From 40a474934cec8a98740a4164f0e291b748998eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20=C5=BD=C3=A1=C4=8Dek?= Date: Sat, 19 Sep 2026 09:02:31 +0200 Subject: [PATCH] Advance standalone admission, finite artillery and native validation --- .gitignore | 4 + README.md | 4 +- .../Scripts/Game/ERR/ERR_MortarAimSolution.c | 31 + .../ai/Scripts/Game/ERR/ERR_MortarBattery.c | 160 +- addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c | 112 +- .../ai/Scripts/Game/ERR/ERR_MortarReadiness.c | 177 ++ .../Scripts/Game/ERR/ERR_MortarReportLedger.c | 20 + .../Game/ERR/ERR_MortarSupplyTransfer.c | 108 ++ addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c | 58 +- .../Game/ERR/ERR_NativeMortarFiringProbe.c | 330 ++++ .../Game/ERR/ERR_NativeMortarTransferProbe.c | 383 +++++ .../Game/ERR/ERR_NativeHQResponseProof.c | 284 ++++ .../chat/Scripts/Game/ERR/ERR_NativeSmoke.c | 80 +- .../core/Scripts/Game/ERR/ERR_DiscoveryMap.c | 42 +- .../Scripts/Game/ERR/ERR_LocalAdmission.c | 107 ++ .../Scripts/Game/ERR/ERR_NativeBaseSmoke.c | 58 + .../Game/ERR/ERR_NativeDiscoveryMapProbe.c | 140 ++ .../Game/ERR/ERR_NativeLocalAdmissionProbe.c | 129 ++ .../Game/ERR/ERR_NativePoweredFlightProbe.c | 321 ++++ .../ERR/ERR_NativeStationTeardownDiagnostic.c | 4 +- .../Game/ERR/ERR_OrdinaryScenarioLaunch.c | 16 + addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c | 59 +- docs/acceptance.json | 74 + docs/architecture.md | 6 + docs/casualty-loading.md | 6 +- docs/current-status.md | 42 +- docs/dedicated-native-diagnostic.md | 51 + docs/dedicated-preparation.md | 34 + docs/dedicated-resource-audit.md | 41 + docs/discovery-map-usability.md | 15 + .../console.log.txt | 636 +++++++ .../error.log.txt | 118 ++ .../headless-launch.log.txt | 150 ++ .../launch-source-sha256.json | 164 ++ .../launch-source.json | 45 + .../2026-09-19-mortar-first-shot/report.json | 9 + .../rereintroduced-hq.log.txt | 66 + .../runner.json.txt | 19 + .../script.log.txt | 315 ++++ .../source-provenance.json | 4 + .../source-sha256.json | 164 ++ .../archive-sha256.json | 15 + .../cleanup-verification.json | 4 + .../dedicated-2026-09-19-083213/command.json | 111 ++ .../isolation-preflight.json | 65 + .../logs/logs_2026-09-19_08-32-13/console.log | 346 ++++ .../logs/logs_2026-09-19_08-32-13/error.log | 49 + .../logs/logs_2026-09-19_08-32-13/script.log | 173 ++ .../settings/ReforgerEngineSettings.conf | 96 ++ .../.save/settings/ReforgerGameSettings.conf | 2 + .../dedicated-2026-09-19-083213/result.json | 116 ++ .../dedicated-2026-09-19-083213/review.json | 23 + .../source-manifest-after.json | 279 ++++ .../source-manifest.json | 279 ++++ .../source/.gitattributes | 2 + .../source/.gitignore | 7 + .../source/README.md | 32 + .../addons/ai/Prefabs/ERR/MortarCrew.et | 8 + .../addons/ai/Prefabs/ERR/MortarCrew.et.meta | 7 + .../addons/ai/Scripts/Game/ERR/ERR_HQ.c | 339 ++++ .../ai/Scripts/Game/ERR/ERR_HQJournal.c | 101 ++ .../ai/Scripts/Game/ERR/ERR_HQNetwork.c | 241 +++ .../ai/Scripts/Game/ERR/ERR_HQObservation.c | 199 +++ .../addons/ai/Scripts/Game/ERR/ERR_HQReport.c | 144 ++ .../Game/ERR/ERR_HelicopterAvailability.c | 31 + .../ai/Scripts/Game/ERR/ERR_MortarBattery.c | 461 +++++ .../ai/Scripts/Game/ERR/ERR_MortarFiring.c | 231 +++ .../Scripts/Game/ERR/ERR_MortarPrediction.c | 131 ++ .../ai/Scripts/Game/ERR/ERR_MortarReadiness.c | 177 ++ .../ai/Scripts/Game/ERR/ERR_MortarSalvo.c | 16 + .../Game/ERR/ERR_MortarSupplyTransfer.c | 108 ++ .../ai/Scripts/Game/ERR/ERR_MortarSystem.c | 244 +++ .../Game/ERR/ERR_NativeMortarFiringProbe.c | 241 +++ .../Game/ERR/ERR_NativePatrolHQProbe.c | 87 + .../Scripts/Game/ERR/ERR_SettlementSafety.c | 63 + .../ai/Scripts/Game/ERR/ERR_SupportScenario.c | 9 + .../source/addons/ai/addon.gproj | 9 + .../addons/chat/Missions/ERR_Everon.conf | 11 + .../addons/chat/Missions/ERR_Everon.conf.meta | 9 + .../chat/Scripts/Game/ERR/ERR_AdminCommands.c | 36 + .../Scripts/Game/ERR/ERR_NativeMortarProbe.c | 10 + .../Scripts/Game/ERR/ERR_NativeRadioProbe.c | 114 ++ .../chat/Scripts/Game/ERR/ERR_NativeSmoke.c | 434 +++++ .../ERRChat/ERR_OrdinaryScenarioLaunchChat.c | 16 + .../ERR/ERR_ValidateWorldPlugin.c | 51 + .../source/addons/chat/addon.gproj | 12 + .../addons/core/Configs/ERR/EveronSites.conf | 136 ++ .../core/Configs/ERR/EveronSites.conf.meta | 9 + .../Configs/ERR/Factions/MissionVehicles.conf | 24 + .../ERR/Factions/MissionVehicles.conf.meta | 7 + .../addons/core/Configs/ERR/Factions/US.conf | 277 +++ .../core/Configs/ERR/Factions/US.conf.meta | 7 + .../core/Configs/ERR/Factions/USSR.conf | 276 +++ .../core/Configs/ERR/Factions/USSR.conf.meta | 7 + .../core/Configs/ERR/GameOverScreens.conf | 21 + .../Configs/ERR/GameOverScreens.conf.meta | 9 + .../core/Configs/ERR/VanillaFactions.conf | 7 + .../Configs/ERR/VanillaFactions.conf.meta | 9 + .../addons/core/Missions/ERR_Everon_Base.conf | 11 + .../core/Missions/ERR_Everon_Base.conf.meta | 9 + .../addons/core/Prefabs/ERR/Extraction.et | 6 + .../core/Prefabs/ERR/Extraction.et.meta | 9 + .../addons/core/Prefabs/ERR/FactionManager.et | 10 + .../core/Prefabs/ERR/FactionManager.et.meta | 7 + .../addons/core/Prefabs/ERR/FieldCover.et | 13 + .../core/Prefabs/ERR/FieldCover.et.meta | 7 + .../addons/core/Prefabs/ERR/GameMode.et | 14 + .../addons/core/Prefabs/ERR/GameMode.et.meta | 9 + .../core/Prefabs/ERR/ObjectiveDocument.et | 5 + .../Prefabs/ERR/ObjectiveDocument.et.meta | 9 + .../source/addons/core/Prefabs/ERR/Patrol.et | 10 + .../addons/core/Prefabs/ERR/Patrol.et.meta | 7 + .../source/addons/core/Prefabs/ERR/Prison.et | 90 + .../addons/core/Prefabs/ERR/Prison.et.meta | 9 + .../addons/core/Prefabs/ERR/PrisonDoor.et | 19 + .../core/Prefabs/ERR/PrisonDoor.et.meta | 9 + .../addons/core/Prefabs/ERR/PrisonWall.et | 8 + .../core/Prefabs/ERR/PrisonWall.et.meta | 9 + .../addons/core/Prefabs/ERR/Prisoner.et | 55 + .../addons/core/Prefabs/ERR/Prisoner.et.meta | 7 + .../source/addons/core/Prefabs/ERR/Radio.et | 16 + .../addons/core/Prefabs/ERR/Radio.et.meta | 9 + .../core/Prefabs/ERR/SpectatorCamera.et | 7 + .../core/Prefabs/ERR/SpectatorCamera.et.meta | 9 + .../addons/core/Prefabs/ERR/SupplyCache.et | 28 + .../core/Prefabs/ERR/SupplyCache.et.meta | 9 + .../addons/core/Prefabs/ERR/SupplySite.et | 6 + .../core/Prefabs/ERR/SupplySite.et.meta | 9 + .../core/Scripts/Game/ERR/ERR_Actions.c | 39 + .../addons/core/Scripts/Game/ERR/ERR_Actors.c | 81 + .../core/Scripts/Game/ERR/ERR_AdminService.c | 111 ++ .../Game/ERR/ERR_CasualtyGroundSupport.c | 82 + .../Game/ERR/ERR_CasualtyLoadingGameMode.c | 48 + .../Game/ERR/ERR_CasualtyLoadingOwner.c | 75 + .../Game/ERR/ERR_CasualtyLoadingService.c | 305 ++++ .../core/Scripts/Game/ERR/ERR_DiscoveryMap.c | 51 + .../Scripts/Game/ERR/ERR_DiscoveryService.c | 62 + .../Scripts/Game/ERR/ERR_DocumentComponent.c | 8 + .../Scripts/Game/ERR/ERR_EnvironmentService.c | 164 ++ .../Game/ERR/ERR_EscapeGameOverScreenInfo.c | 72 + .../Game/ERR/ERR_ExtractionPlacement.c | 112 ++ .../Scripts/Game/ERR/ERR_ExtractionService.c | 101 ++ .../Scripts/Game/ERR/ERR_FactionCatalog.c | 42 + .../core/Scripts/Game/ERR/ERR_GameMode.c | 419 +++++ .../Scripts/Game/ERR/ERR_InitialGuardRules.c | 12 + .../core/Scripts/Game/ERR/ERR_Inventory.c | 19 + .../Scripts/Game/ERR/ERR_LoadCasualtyAction.c | 23 + .../Scripts/Game/ERR/ERR_LocalAdmission.c | 107 ++ .../core/Scripts/Game/ERR/ERR_Location.c | 69 + .../core/Scripts/Game/ERR/ERR_MissionRules.c | 46 + .../Game/ERR/ERR_NativeAdminSettingsProbe.c | 76 + .../Scripts/Game/ERR/ERR_NativeBaseSmoke.c | 738 ++++++++ .../Game/ERR/ERR_NativeCasualtyGroundProbe.c | 80 + .../Game/ERR/ERR_NativeCasualtyLoadProbe.c | 255 +++ .../Game/ERR/ERR_NativeCasualtyRemoveProbe.c | 160 ++ .../Game/ERR/ERR_NativeCasualtyServiceProbe.c | 293 ++++ .../Game/ERR/ERR_NativeContractsProbe.c | 52 + .../Game/ERR/ERR_NativeDefinitionProbe.c | 60 + .../Game/ERR/ERR_NativeEnvironmentProbe.c | 163 ++ .../ERR/ERR_NativeEnvironmentRestartProbe.c | 118 ++ .../Game/ERR/ERR_NativeExtractionProbe.c | 172 ++ .../Game/ERR/ERR_NativeFactionCatalogProbe.c | 75 + .../Game/ERR/ERR_NativeGuardCancelProbe.c | 247 +++ .../Game/ERR/ERR_NativeLifecycleProbe.c | 190 +++ .../Scripts/Game/ERR/ERR_NativeMedicalProbe.c | 225 +++ .../Game/ERR/ERR_NativeObjectiveLossProbe.c | 183 ++ .../Game/ERR/ERR_NativeObjectiveProbe.c | 238 +++ .../Scripts/Game/ERR/ERR_NativePatrolProbe.c | 203 +++ .../Game/ERR/ERR_NativePrisonerProbe.c | 210 +++ .../Game/ERR/ERR_NativeRadioDefenceProbe.c | 367 ++++ .../Game/ERR/ERR_NativeRecoveryProbe.c | 96 ++ .../Scripts/Game/ERR/ERR_NativeResultProbe.c | 68 + .../Scripts/Game/ERR/ERR_NativeSiteSurvey.c | 58 + .../ERR/ERR_NativeStationTeardownDiagnostic.c | 111 ++ .../Scripts/Game/ERR/ERR_NativeTimeProbe.c | 117 ++ .../Game/ERR/ERR_NativeTransportProbe.c | 146 ++ .../Game/ERR/ERR_NativeTransportSurvey.c | 36 + .../Scripts/Game/ERR/ERR_ObjectiveDetails.c | 59 + .../core/Scripts/Game/ERR/ERR_ObjectiveText.c | 64 + .../core/Scripts/Game/ERR/ERR_Objectives.c | 60 + .../core/Scripts/Game/ERR/ERR_Observer.c | 225 +++ .../Game/ERR/ERR_OrdinaryScenarioLaunch.c | 130 ++ .../Game/ERR/ERR_PlayerAdminCommands.c | 61 + .../Scripts/Game/ERR/ERR_PlayerEscapeResult.c | 56 + .../core/Scripts/Game/ERR/ERR_PlayerGuide.c | 41 + .../core/Scripts/Game/ERR/ERR_PlayerRoster.c | 118 ++ .../Game/ERR/ERR_RadioDefenceService.c | 137 ++ .../core/Scripts/Game/ERR/ERR_RadioFeedback.c | 19 + .../Scripts/Game/ERR/ERR_RecoveryService.c | 74 + .../core/Scripts/Game/ERR/ERR_Resources.c | 10 + .../Scripts/Game/ERR/ERR_ScenarioComponent.c | 58 + .../core/Scripts/Game/ERR/ERR_Settings.c | 139 ++ .../Scripts/Game/ERR/ERR_SiteDefinition.c | 167 ++ .../Scripts/Game/ERR/ERR_SiteDiscoveryRules.c | 17 + .../core/Scripts/Game/ERR/ERR_SiteService.c | 484 ++++++ .../Scripts/Game/ERR/ERR_SpawnFinalization.c | 84 + .../core/Scripts/Game/ERR/ERR_SpawnLogic.c | 375 +++++ .../Scripts/Game/ERR/ERR_SpawnPlacement.c | 84 + .../core/Scripts/Game/ERR/ERR_Supplies.c | 7 + .../core/Scripts/Game/ERR/ERR_TimeService.c | 81 + .../GameLib/ERR/ERR_DiagnosticNoSplash.c | 26 + .../ERR/ERR_ValidateBaseWorldPlugin.c | 27 + .../source/addons/core/Worlds/ERR_Everon.ent | 3 + .../addons/core/Worlds/ERR_Everon.ent.meta | 9 + .../Worlds/ERR_Everon_Layers/default.layer | 35 + .../source/addons/core/addon.gproj | 8 + .../intel/Scripts/Game/ERR/ERR_IntelService.c | 76 + .../source/addons/intel/addon.gproj | 9 + .../map/Materials/ERRM_MapRenderTarget.emat | 7 + .../Materials/ERRM_MapRenderTarget.emat.meta | 17 + .../Items/Equipment/ERRM_SharedFieldMap.et | 78 + .../Equipment/ERRM_SharedFieldMap.et.meta | 17 + .../map/Scripts/Game/ERR/ERR_ScenarioMap.c | 7 + .../Game/ERRMap/ERRM_SharedMapComponent.c | 200 +++ .../ERRMap/SharedMapRenderTarget.layout | 39 + .../ERRMap/SharedMapRenderTarget.layout.meta | 17 + .../source/addons/map/addon.gproj | 9 + .../source/docs/acceptance.json | 533 ++++++ .../source/docs/addons.json | 7 + .../source/docs/admin-discovery-setting.md | 23 + .../source/docs/architecture.md | 66 + .../source/docs/base-gameplay-gaps.md | 48 + .../source/docs/base-replacement.md | 41 + .../docs/casualty-ground-source-sha256.json | 3 + .../source/docs/casualty-ground-support.md | 23 + .../source/docs/casualty-incapacitation.md | 11 + .../source/docs/casualty-loading.md | 48 + .../docs/casualty-remove-source-sha256.json | 11 + .../source/docs/configuration.md | 44 + .../source/docs/current-status.md | 35 + .../source/docs/dependency-audit.json | 673 ++++++++ .../docs/environment-restart-fixture.md | 21 + .../source/docs/environment.md | 28 + .../source/docs/extraction.md | 21 + .../docs/faction-catalog-source-hashes.json | 9 + .../source/docs/finite-mortar-operations.md | 38 + .../source/docs/ground-transport.md | 23 + .../source/docs/guard-cancellation-fix.md | 20 + .../guard-cancellation-source-hashes.json | 5 + .../source/docs/guard-source-hashes.json | 7 + ...al-extraction-placement-source-sha256.json | 6 + .../docs/initial-extraction-placement.md | 24 + .../source/docs/initial-guard-readiness.md | 17 + .../source/docs/inventory-identity.md | 9 + .../docs/local-singleplayer-admission.md | 28 + .../docs/medical-kit-teardown-ownership.md | 36 + .../source/docs/migration-provenance.json | 104 ++ .../source/docs/migration.md | 33 + .../source/docs/mission-faction-catalogs.md | 23 + .../source/docs/mission-time.md | 31 + .../mortar-transactions-source-sha256.json | 7 + .../source/docs/native-casualty-remove.md | 28 + .../source/docs/native-errors.md | 45 + .../source/docs/native-followup-snapshot.json | 59 + .../source/docs/native-guard-cancellation.md | 15 + .../source/docs/native-initial-snapshot.json | 57 + .../source/docs/native-medical-fixture.md | 27 + .../source/docs/native-mortar-firing.md | 54 + .../source/docs/objective-widget-lifecycle.md | 21 + .../source/docs/ordinary-diagnostic-splash.md | 13 + .../source/docs/ordinary-game-startup.md | 95 ++ .../docs/ordinary-identity-diagnostics.md | 18 + .../docs/ordinary-launch-callback-fix.md | 9 + .../docs/ordinary-splash-source-hashes.json | 7 + .../docs/original-feature-coverage.json | 539 ++++++ .../source/docs/original-feature-coverage.md | 28 + .../docs/original-resource-inventory.json | 335 ++++ .../source/docs/performance-comparison.md | 91 + .../source/docs/player-lifecycle.md | 29 + .../source/docs/prisoner-loadout.md | 36 + .../source/docs/radio-defence.md | 33 + .../source/docs/radio-document-loss.md | 19 + .../source/docs/radio-feedback.md | 11 + .../source/docs/recovery.md | 11 + .../source/docs/release-qualification.md | 57 + .../source/docs/runtime-testing.md | 101 ++ .../source/docs/site-authoring.md | 41 + .../source/docs/site-patrols.md | 35 + .../source/docs/validation.md | 248 +++ .../source/docs/vanilla-resources.json | 105 ++ .../helicopter_availability_regression.py | 19 + .../source/tests/hq_network_regression.py | 77 + .../source/tests/mortar_salvo_regression.py | 21 + .../source/tests/policy_harness.py | 14 + .../source/tests/test_admin_setting_policy.py | 35 + .../tests/test_casualty_ground_policy.py | 17 + .../tests/test_casualty_incapacitation.py | 45 + .../tests/test_casualty_loading_policy.py | 41 + .../tests/test_casualty_remove_probe.py | 43 + .../tests/test_casualty_reservation_death.py | 43 + .../source/tests/test_diagnostic_no_splash.py | 44 + .../source/tests/test_environment_policy.py | 51 + .../tests/test_environment_restart_runner.py | 62 + .../tests/test_extraction_placement_policy.py | 51 + .../tests/test_faction_catalog_scope.py | 57 + .../tests/test_guard_cancellation_policy.py | 65 + .../source/tests/test_headless_game_runner.py | 321 ++++ .../source/tests/test_initial_guard_policy.py | 29 + .../test_inventory_enumeration_policy.py | 78 + .../source/tests/test_local_admission.py | 89 + .../source/tests/test_mission_rules.py | 29 + .../source/tests/test_mortar_transactions.py | 101 ++ .../source/tests/test_native_mortar_probe.py | 44 + .../tests/test_performance_comparison.py | 171 ++ .../tests/test_player_admission_policy.py | 75 + .../tests/test_prison_placement_policy.py | 59 + .../source/tests/test_radio_defence_policy.py | 44 + .../tests/test_radio_feedback_policy.py | 36 + .../source/tests/test_recovery_policy.py | 17 + .../source/tests/test_release_check.py | 409 +++++ .../source/tests/test_settings_migration.py | 31 + .../tests/test_site_discovery_policy.py | 25 + .../source/tests/test_time_policy.py | 50 + .../source/tools/archive_native.py | 46 + .../source/tools/check.py | 65 + .../source/tools/compare_performance.py | 227 +++ .../tools/desktop/kwin-right-monitor.js | 40 + .../source/tools/headless_game.py | 394 +++++ .../source/tools/headless_workbench.py | 151 ++ .../source/tools/import_settings.py | 59 + .../source/tools/native_command.py | 34 + .../source/tools/native_provenance.py | 137 ++ .../source/tools/native_report.py | 44 + .../source/tools/reference_guard.py | 21 + .../source/tools/release_check.py | 201 +++ .../source/tools/source_manifest.py | 29 + .../dedicated-2026-09-19-083213/stdout.log | 339 ++++ .../archive-sha256.json | 16 + .../cleanup-verification.json | 4 + .../command.json | 104 ++ .../isolation-preflight.json | 65 + .../logs/logs_2026-09-19_08-40-40/console.log | 224 +++ .../logs/logs_2026-09-19_08-40-40/error.log | 73 + .../logs/logs_2026-09-19_08-40-40/script.log | 27 + .../settings/ReforgerEngineSettings.conf | 96 ++ .../.save/settings/ReforgerGameSettings.conf | 2 + .../result.json | 109 ++ .../review.json | 30 + .../runner.py | 139 ++ .../source-manifest-after.json | 279 ++++ .../source-manifest.json | 279 ++++ .../stdout.log | 223 +++ .../authored-source-audit.json | 22 + .../installed-reference-scan.json | 377 +++++ .../game-2026-09-19-081359/console.log.txt | 457 +++++ .../game-2026-09-19-081359/error.log.txt | 82 + .../game-startup-report.json.txt | 28 + .../headless-launch.log.txt | 139 ++ .../launch-source-sha256.json | 159 ++ .../game-2026-09-19-081359/launch-source.json | 40 + .../game-2026-09-19-081359/report.json | 27 + .../game-2026-09-19-081359/runner.json.txt | 25 + .../game-2026-09-19-081359/script.log.txt | 222 +++ .../source-provenance.json | 4 + .../game-2026-09-19-081359/source-sha256.json | 159 ++ .../game-2026-09-19-082733/console.log.txt | 460 +++++ .../game-2026-09-19-082733/error.log.txt | 81 + .../game-startup-report.json.txt | 24 + .../headless-launch.log.txt | 139 ++ .../launch-source-sha256.json | 162 ++ .../game-2026-09-19-082733/launch-source.json | 40 + .../game-2026-09-19-082733/report.json | 23 + .../game-2026-09-19-082733/runner.json.txt | 25 + .../game-2026-09-19-082733/script.log.txt | 225 +++ .../source-provenance.json | 4 + .../game-2026-09-19-082733/source-sha256.json | 162 ++ .../game-2026-09-19-082938/console.log.txt | 484 ++++++ .../game-2026-09-19-082938/error.log.txt | 81 + .../game-startup-report.json.txt | 24 + .../headless-launch.log.txt | 139 ++ .../launch-source-sha256.json | 162 ++ .../game-2026-09-19-082938/launch-source.json | 40 + .../game-2026-09-19-082938/report.json | 23 + .../rereintroduced-hq.log.txt | 9 + .../game-2026-09-19-082938/runner.json.txt | 25 + .../game-2026-09-19-082938/script.log.txt | 225 +++ .../source-provenance.json | 4 + .../game-2026-09-19-082938/source-sha256.json | 162 ++ .../native-2026-09-19-080656/console.log.txt | 1478 ++++++++++++++++ .../native-2026-09-19-080656/error.log.txt | 200 +++ .../headless-launch.log.txt | 157 ++ .../launch-source-sha256.json | 158 ++ .../launch-source.json | 47 + .../native-2026-09-19-080656/report.json | 9 + .../native-2026-09-19-080656/runner.json.txt | 19 + .../native-2026-09-19-080656/script.log.txt | 1078 ++++++++++++ .../source-provenance.json | 4 + .../source-sha256.json | 158 ++ .../native-2026-09-19-081601/console.log.txt | 623 +++++++ .../native-2026-09-19-081601/error.log.txt | 119 ++ .../headless-launch.log.txt | 150 ++ .../launch-source-sha256.json | 159 ++ .../launch-source.json | 45 + .../native-2026-09-19-081601/report.json | 9 + .../native-2026-09-19-081601/runner.json.txt | 19 + .../native-2026-09-19-081601/script.log.txt | 332 ++++ .../source-provenance.json | 4 + .../source-sha256.json | 159 ++ .../native-2026-09-19-081837/console.log.txt | 610 +++++++ .../native-2026-09-19-081837/err-result.png | Bin 0 -> 178672 bytes .../native-2026-09-19-081837/error.log.txt | 118 ++ .../headless-launch.log.txt | 150 ++ .../launch-source-sha256.json | 161 ++ .../launch-source.json | 45 + .../native-2026-09-19-081837/report.json | 9 + .../rereintroduced-hq.log.txt | 10 + .../native-2026-09-19-081837/runner.json.txt | 19 + .../native-2026-09-19-081837/script.log.txt | 290 ++++ .../source-provenance.json | 4 + .../source-sha256.json | 161 ++ .../native-2026-09-19-082123/console.log.txt | 595 +++++++ .../native-2026-09-19-082123/error.log.txt | 108 ++ .../headless-launch.log.txt | 150 ++ .../launch-source-sha256.json | 161 ++ .../launch-source.json | 45 + .../native-2026-09-19-082123/report.json | 15 + .../rereintroduced-hq.log.txt | 66 + .../native-2026-09-19-082123/runner.json.txt | 19 + .../native-2026-09-19-082123/script.log.txt | 278 +++ .../source-provenance.json | 4 + .../source-sha256.json | 161 ++ .../native-2026-09-19-083810/console.log.txt | 694 ++++++++ .../native-2026-09-19-083810/error.log.txt | 118 ++ .../headless-launch.log.txt | 150 ++ .../launch-source-sha256.json | 164 ++ .../launch-source.json | 45 + .../native-2026-09-19-083810/report.json | 9 + .../rereintroduced-hq.log.txt | 16 + .../native-2026-09-19-083810/runner.json.txt | 19 + .../native-2026-09-19-083810/script.log.txt | 375 +++++ .../source-provenance.json | 4 + .../source-sha256.json | 164 ++ .../console.log.txt | 1024 ++++++++++++ .../err-prison.png | Bin 0 -> 153870 bytes .../err-result.png | Bin 0 -> 178203 bytes .../error.log.txt | 202 +++ .../headless-launch.log.txt | 157 ++ .../launch-source-sha256.json | 164 ++ .../launch-source.json | 45 + .../report.json | 15 + .../rereintroduced-hq.log.txt | 52 + .../runner.json.txt | 19 + .../script.log.txt | 592 +++++++ .../source-provenance.json | 4 + .../source-sha256.json | 164 ++ .../console.log.txt | 309 ++++ .../error.log.txt | 89 + .../headless-launch.log.txt | 146 ++ .../launch-source-sha256.json | 166 ++ .../launch-source.json | 45 + .../report.json | 18 + .../runner.json.txt | 19 + .../script.log.txt | 48 + .../source-provenance.json | 4 + .../source-sha256.json | 166 ++ .../console.log.txt | 185 ++ .../error.log.txt | 50 + .../headless-launch.log.txt | 131 ++ .../launch-source-sha256.json | 167 ++ .../launch-source.json | 45 + .../report.json | 40 + .../runner.json.txt | 19 + .../script.log.txt | 47 + .../source-provenance.json | 4 + .../source-sha256.json | 167 ++ .../native-2026-09-19-085048/console.log.txt | 588 +++++++ .../native-2026-09-19-085048/error.log.txt | 118 ++ .../headless-launch.log.txt | 150 ++ .../launch-source-sha256.json | 167 ++ .../launch-source.json | 45 + .../native-2026-09-19-085048/report.json | 9 + .../native-2026-09-19-085048/runner.json.txt | 19 + .../native-2026-09-19-085048/script.log.txt | 297 ++++ .../source-provenance.json | 4 + .../source-sha256.json | 167 ++ .../console.log.txt | 188 +++ .../error.log.txt | 53 + .../headless-launch.log.txt | 131 ++ .../launch-source-sha256.json | 168 ++ .../launch-source.json | 47 + .../report.json | 46 + .../runner.json.txt | 19 + .../script.log.txt | 50 + .../source-provenance.json | 4 + .../source-sha256.json | 168 ++ .../native-2026-09-19-085442/console.log.txt | 1486 +++++++++++++++++ .../native-2026-09-19-085442/error.log.txt | 200 +++ .../headless-launch.log.txt | 156 ++ .../launch-source-sha256.json | 168 ++ .../launch-source.json | 47 + .../native-2026-09-19-085442/report.json | 9 + .../native-2026-09-19-085442/runner.json.txt | 19 + .../native-2026-09-19-085442/script.log.txt | 1086 ++++++++++++ .../source-provenance.json | 4 + .../source-sha256.json | 168 ++ docs/finite-mortar-operations.md | 38 + docs/initial-extraction-placement.md | 2 +- docs/local-singleplayer-admission.md | 30 + docs/mortar-aim-renewal-sources.json | 8 + docs/mortar-aim-renewal.md | 15 + docs/mortar-expiry-evidence.md | 11 + docs/mortar-report-deduplication.md | 9 + docs/mortar-transactions-source-sha256.json | 7 + docs/native-casualty-remove.md | 2 +- docs/native-hq-response-proof.md | 13 + docs/native-local-admission-probe.md | 13 + docs/native-mortar-firing.md | 21 + docs/native-mortar-transfer.md | 33 + docs/native-powered-flight.md | 30 + docs/ordinary-game-startup.md | 2 + docs/ordinary-identity-diagnostics.md | 18 + docs/original-feature-coverage.json | 12 +- docs/original-feature-coverage.md | 10 +- docs/release-qualification.md | 2 +- docs/validation.md | 34 + tests/mortar_salvo_regression.py | 2 +- tests/test_dedicated_native.py | 67 + tests/test_dedicated_preflight.py | 104 ++ tests/test_headless_game_runner.py | 18 +- tests/test_local_admission.py | 89 + tests/test_mortar_aim_renewal.py | 83 + tests/test_mortar_report_ledger.py | 39 + tests/test_mortar_transactions.py | 101 ++ tests/test_native_local_admission_probe.py | 52 + tests/test_native_mortar_probe.py | 81 + tests/test_native_mortar_transfer.py | 84 + tests/test_powered_flight_policy.py | 63 + tools/check.py | 2 +- tools/dedicated_native.py | 139 ++ tools/dedicated_preflight.py | 163 ++ tools/headless_game.py | 6 +- tools/headless_workbench.py | 9 +- 532 files changed, 56456 insertions(+), 199 deletions(-) create mode 100644 addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c create mode 100644 addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c create mode 100644 addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c create mode 100644 addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c create mode 100644 addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c create mode 100644 addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c create mode 100644 addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c create mode 100644 addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c create mode 100644 addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c create mode 100644 addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c create mode 100644 addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c create mode 100644 docs/dedicated-native-diagnostic.md create mode 100644 docs/dedicated-preparation.md create mode 100644 docs/dedicated-resource-audit.md create mode 100644 docs/discovery-map-usability.md create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/console.log.txt create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/error.log.txt create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/headless-launch.log.txt create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/launch-source-sha256.json create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/launch-source.json create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/report.json create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/rereintroduced-hq.log.txt create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/runner.json.txt create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/script.log.txt create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/source-provenance.json create mode 100644 docs/evidence/2026-09-19-mortar-first-shot/source-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/archive-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/cleanup-verification.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/command.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/isolation-preflight.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/console.log create mode 100644 docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/error.log create mode 100644 docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/script.log create mode 100644 docs/evidence/dedicated-2026-09-19-083213/profile/profile/.save/settings/ReforgerEngineSettings.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/profile/profile/.save/settings/ReforgerGameSettings.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/result.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/review.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source-manifest-after.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source-manifest.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/.gitattributes create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/.gitignore create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/README.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Prefabs/ERR/MortarCrew.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/addon.gproj create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Missions/ERR_Everon.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Missions/ERR_Everon.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/addon.gproj create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/EveronSites.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/EveronSites.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/US.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/US.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/USSR.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/USSR.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/GameOverScreens.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/GameOverScreens.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/VanillaFactions.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/VanillaFactions.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Missions/ERR_Everon_Base.conf create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Missions/ERR_Everon_Base.conf.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Extraction.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Extraction.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FactionManager.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FactionManager.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FieldCover.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FieldCover.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/GameMode.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/GameMode.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/ObjectiveDocument.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Patrol.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Patrol.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prison.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prison.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonDoor.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonWall.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonWall.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prisoner.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prisoner.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Radio.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Radio.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SpectatorCamera.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplyCache.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplyCache.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplySite.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplySite.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Actions.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Actors.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Location.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Observer.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Resources.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Settings.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Worlds/ERR_Everon.ent create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Worlds/ERR_Everon.ent.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Worlds/ERR_Everon_Layers/default.layer create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/core/addon.gproj create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/intel/addon.gproj create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Materials/ERRM_MapRenderTarget.emat create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/addons/map/addon.gproj create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/acceptance.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/addons.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/admin-discovery-setting.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/architecture.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/base-gameplay-gaps.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/base-replacement.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-source-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-support.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-incapacitation.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-loading.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-remove-source-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/configuration.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/current-status.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/dependency-audit.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/environment-restart-fixture.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/environment.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/extraction.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/faction-catalog-source-hashes.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/finite-mortar-operations.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/ground-transport.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-fix.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-source-hashes.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-source-hashes.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement-source-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-guard-readiness.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/inventory-identity.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/local-singleplayer-admission.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/medical-kit-teardown-ownership.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/migration-provenance.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/migration.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-faction-catalogs.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-time.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/mortar-transactions-source-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-casualty-remove.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-errors.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-followup-snapshot.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-guard-cancellation.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-initial-snapshot.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-medical-fixture.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/native-mortar-firing.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/objective-widget-lifecycle.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-diagnostic-splash.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-game-startup.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-identity-diagnostics.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-launch-callback-fix.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-splash-source-hashes.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/original-resource-inventory.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/performance-comparison.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/player-lifecycle.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/prisoner-loadout.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-defence.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-document-loss.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-feedback.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/recovery.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/release-qualification.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/runtime-testing.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/site-authoring.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/site-patrols.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/validation.md create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/docs/vanilla-resources.json create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/helicopter_availability_regression.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/hq_network_regression.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/mortar_salvo_regression.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/policy_harness.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_admin_setting_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_ground_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_incapacitation.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_loading_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_remove_probe.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_reservation_death.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_diagnostic_no_splash.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_restart_runner.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_extraction_placement_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_faction_catalog_scope.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_guard_cancellation_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_headless_game_runner.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_initial_guard_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_inventory_enumeration_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_local_admission.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mission_rules.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mortar_transactions.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_native_mortar_probe.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_performance_comparison.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_player_admission_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_prison_placement_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_defence_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_feedback_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_recovery_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_release_check.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_settings_migration.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_site_discovery_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tests/test_time_policy.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/archive_native.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/check.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/compare_performance.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/desktop/kwin-right-monitor.js create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_game.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_workbench.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/import_settings.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/native_command.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/native_provenance.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/native_report.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/reference_guard.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/release_check.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/source/tools/source_manifest.py create mode 100644 docs/evidence/dedicated-2026-09-19-083213/stdout.log create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/archive-sha256.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/cleanup-verification.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/command.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/isolation-preflight.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/console.log create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/error.log create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/script.log create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/profile/.save/settings/ReforgerEngineSettings.conf create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/profile/.save/settings/ReforgerGameSettings.conf create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/result.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/review.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/runner.py create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest-after.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest.json create mode 100644 docs/evidence/dedicated-2026-09-19-084040-vanilla/stdout.log create mode 100644 docs/evidence/dedicated-resource-audit/authored-source-audit.json create mode 100644 docs/evidence/dedicated-resource-audit/installed-reference-scan.json create mode 100644 docs/evidence/game-2026-09-19-081359/console.log.txt create mode 100644 docs/evidence/game-2026-09-19-081359/error.log.txt create mode 100644 docs/evidence/game-2026-09-19-081359/game-startup-report.json.txt create mode 100644 docs/evidence/game-2026-09-19-081359/headless-launch.log.txt create mode 100644 docs/evidence/game-2026-09-19-081359/launch-source-sha256.json create mode 100644 docs/evidence/game-2026-09-19-081359/launch-source.json create mode 100644 docs/evidence/game-2026-09-19-081359/report.json create mode 100644 docs/evidence/game-2026-09-19-081359/runner.json.txt create mode 100644 docs/evidence/game-2026-09-19-081359/script.log.txt create mode 100644 docs/evidence/game-2026-09-19-081359/source-provenance.json create mode 100644 docs/evidence/game-2026-09-19-081359/source-sha256.json create mode 100644 docs/evidence/game-2026-09-19-082733/console.log.txt create mode 100644 docs/evidence/game-2026-09-19-082733/error.log.txt create mode 100644 docs/evidence/game-2026-09-19-082733/game-startup-report.json.txt create mode 100644 docs/evidence/game-2026-09-19-082733/headless-launch.log.txt create mode 100644 docs/evidence/game-2026-09-19-082733/launch-source-sha256.json create mode 100644 docs/evidence/game-2026-09-19-082733/launch-source.json create mode 100644 docs/evidence/game-2026-09-19-082733/report.json create mode 100644 docs/evidence/game-2026-09-19-082733/runner.json.txt create mode 100644 docs/evidence/game-2026-09-19-082733/script.log.txt create mode 100644 docs/evidence/game-2026-09-19-082733/source-provenance.json create mode 100644 docs/evidence/game-2026-09-19-082733/source-sha256.json create mode 100644 docs/evidence/game-2026-09-19-082938/console.log.txt create mode 100644 docs/evidence/game-2026-09-19-082938/error.log.txt create mode 100644 docs/evidence/game-2026-09-19-082938/game-startup-report.json.txt create mode 100644 docs/evidence/game-2026-09-19-082938/headless-launch.log.txt create mode 100644 docs/evidence/game-2026-09-19-082938/launch-source-sha256.json create mode 100644 docs/evidence/game-2026-09-19-082938/launch-source.json create mode 100644 docs/evidence/game-2026-09-19-082938/report.json create mode 100644 docs/evidence/game-2026-09-19-082938/rereintroduced-hq.log.txt create mode 100644 docs/evidence/game-2026-09-19-082938/runner.json.txt create mode 100644 docs/evidence/game-2026-09-19-082938/script.log.txt create mode 100644 docs/evidence/game-2026-09-19-082938/source-provenance.json create mode 100644 docs/evidence/game-2026-09-19-082938/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-080656/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-080656/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-080656/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-080656/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-080656/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-080656/report.json create mode 100644 docs/evidence/native-2026-09-19-080656/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-080656/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-080656/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-080656/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-081601/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-081601/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-081601/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-081601/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-081601/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-081601/report.json create mode 100644 docs/evidence/native-2026-09-19-081601/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-081601/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-081601/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-081601/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-081837/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-081837/err-result.png create mode 100644 docs/evidence/native-2026-09-19-081837/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-081837/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-081837/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-081837/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-081837/report.json create mode 100644 docs/evidence/native-2026-09-19-081837/rereintroduced-hq.log.txt create mode 100644 docs/evidence/native-2026-09-19-081837/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-081837/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-081837/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-081837/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-082123/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-082123/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-082123/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-082123/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-082123/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-082123/report.json create mode 100644 docs/evidence/native-2026-09-19-082123/rereintroduced-hq.log.txt create mode 100644 docs/evidence/native-2026-09-19-082123/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-082123/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-082123/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-082123/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-083810/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-083810/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-083810/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-083810/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-083810/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-083810/report.json create mode 100644 docs/evidence/native-2026-09-19-083810/rereintroduced-hq.log.txt create mode 100644 docs/evidence/native-2026-09-19-083810/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-083810/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-083810/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-083810/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/err-prison.png create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/err-result.png create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/report.json create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/rereintroduced-hq.log.txt create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-084026-restart-station-error/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/report.json create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-084543-local-admission-failure/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/report.json create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-085048/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-085048/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-085048/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-085048/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-085048/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-085048/report.json create mode 100644 docs/evidence/native-2026-09-19-085048/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-085048/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-085048/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-085048/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/report.json create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-085442/console.log.txt create mode 100644 docs/evidence/native-2026-09-19-085442/error.log.txt create mode 100644 docs/evidence/native-2026-09-19-085442/headless-launch.log.txt create mode 100644 docs/evidence/native-2026-09-19-085442/launch-source-sha256.json create mode 100644 docs/evidence/native-2026-09-19-085442/launch-source.json create mode 100644 docs/evidence/native-2026-09-19-085442/report.json create mode 100644 docs/evidence/native-2026-09-19-085442/runner.json.txt create mode 100644 docs/evidence/native-2026-09-19-085442/script.log.txt create mode 100644 docs/evidence/native-2026-09-19-085442/source-provenance.json create mode 100644 docs/evidence/native-2026-09-19-085442/source-sha256.json create mode 100644 docs/finite-mortar-operations.md create mode 100644 docs/local-singleplayer-admission.md create mode 100644 docs/mortar-aim-renewal-sources.json create mode 100644 docs/mortar-aim-renewal.md create mode 100644 docs/mortar-expiry-evidence.md create mode 100644 docs/mortar-report-deduplication.md create mode 100644 docs/mortar-transactions-source-sha256.json create mode 100644 docs/native-hq-response-proof.md create mode 100644 docs/native-local-admission-probe.md create mode 100644 docs/native-mortar-firing.md create mode 100644 docs/native-mortar-transfer.md create mode 100644 docs/native-powered-flight.md create mode 100644 docs/ordinary-identity-diagnostics.md create mode 100644 tests/test_dedicated_native.py create mode 100644 tests/test_dedicated_preflight.py create mode 100644 tests/test_local_admission.py create mode 100644 tests/test_mortar_aim_renewal.py create mode 100644 tests/test_mortar_report_ledger.py create mode 100644 tests/test_mortar_transactions.py create mode 100644 tests/test_native_local_admission_probe.py create mode 100644 tests/test_native_mortar_probe.py create mode 100644 tests/test_native_mortar_transfer.py create mode 100644 tests/test_powered_flight_policy.py create mode 100644 tools/dedicated_native.py create mode 100644 tools/dedicated_preflight.py diff --git a/.gitignore b/.gitignore index c29b752..e44ccfb 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ __pycache__/ .build/ .local/ profiles/ + +# Preserve exact raw dedicated diagnostic evidence, outside release addons. +!docs/evidence/**/*.log +!docs/evidence/**/resourceDatabase.rdb diff --git a/README.md b/README.md index 85a518c..3d31525 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 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 verified checkpoints and the prioritized remaining work. Ordinary-game startup and ground-to-helicopter casualty loading have retained native failures; manual gameplay, real multiplayer, complete physical HQ support, measured FPS improvement and release qualification remain unfinished. The [original responsibility inventory](docs/original-feature-coverage.md) is a scope map, not proof that every original behavior has been replaced. +See [current development status](docs/current-status.md) for verified checkpoints and the prioritized remaining work. Ordinary Core and companion startup now admit a real local prisoner cleanly; focused casualty-loading and physical mortar tests also pass. A later companion restart retains support-station cleanup errors. Manual gameplay, real multiplayer, complete HQ support, measured FPS improvement and release qualification remain unfinished. The [original responsibility inventory](docs/original-feature-coverage.md) is a scope map, not proof that every original behavior has been replaced. ## Projects and scenarios @@ -27,6 +27,6 @@ python3 tools/check.py For bounded hidden, muted local native tests, see [runtime testing](docs/runtime-testing.md). Recorded Workbench checkpoints include Core-only and companion-loaded escape/restart, finite stock and document-loss recovery, twelve physical prisoner/seat fixtures, real medical treatment, local result/objective widgets, patrol movement and HQ preemption/resumption. Clean environment/restart evidence exists after narrowing the vanilla vehicle catalogs; it does not qualify subsequent source changes. -These scripted local fixtures manipulate positions and selected native states. They do not establish ordinary-game startup, manual escape/piloting, real remote reconnects, twelve connected players or improved FPS. [Current status](docs/current-status.md) separates those gaps from demonstrated development behavior. [Validation evidence](docs/validation.md) preserves exact source checkpoints and failed iterations; `docs/acceptance.json` keeps unverified release requirements pending. +These scripted local fixtures manipulate positions and selected native states. They do not establish manual escape/piloting, real remote reconnects, twelve connected players or improved FPS. Separate regular-game runs establish standalone startup/admission; an isolated native Linux run establishes empty-server preparation, with inherited resource errors reproduced by a vanilla control. [Current status](docs/current-status.md) separates those gaps from demonstrated development behavior. [Validation evidence](docs/validation.md) preserves exact source checkpoints and failed iterations; `docs/acceptance.json` keeps unverified release requirements pending. No release package has been published. diff --git a/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c b/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c new file mode 100644 index 0000000..9d31f27 --- /dev/null +++ b/addons/ai/Scripts/Game/ERR/ERR_MortarAimSolution.c @@ -0,0 +1,31 @@ +// 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; + 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/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c b/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c index d177d02..86d8628 100644 --- a/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c +++ b/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c @@ -33,12 +33,20 @@ class ERR_MortarBattery ref ERR_HQReport Report; ref ERR_HQRoute RadioOrder; ref ERR_HQReport PendingRadioReport; + ref ERR_HQReport PendingSupplyReport; + protected ref ERR_MortarReadiness m_Readiness; + protected ref ERR_MortarSupplyTransfer m_Transfer; + protected ref array m_AttemptedShells = {}; + protected bool m_Stopped; + protected ref ERR_MortarReportLedger m_ReportLedger = new ERR_MortarReportLedger(); vector Position; vector Impact; vector AimOffset; int AimedShot = -1; float FlightTime; float AimedAt = -1; + SCR_AIGetArtilleryAimDistanceCompensation AimSolver; + ref ERR_MortarAimSolution AimSolution; float AirspaceUntil; vector AirspaceImpact; float AirspaceRadius = 600; @@ -94,6 +102,7 @@ class ERR_MortarBattery 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"; @@ -105,8 +114,13 @@ class ERR_MortarBattery return ""; } - void BeginRequest(ERR_HQReport report, float now) + 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++; @@ -118,6 +132,7 @@ class ERR_MortarBattery 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; } void ObserveProjectile(IEntity projectileEntity, IEntity firingCharacter, bool playerGunner) @@ -134,6 +149,8 @@ class ERR_MortarBattery // Only a physical projectile unlocks the next load. It must be aimed again. Released = false; AimedAt = -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 @@ -234,10 +251,11 @@ class ERR_MortarBattery Position = gun.GetOrigin(); SpawnedAt = now; Claimed = true; + m_Readiness = new ERR_MortarReadiness(this); } - protected int InventoryShells(InventoryStorageManagerComponent inventory) + int InventoryShells(InventoryStorageManagerComponent inventory) { if (!inventory) return 0; @@ -252,36 +270,41 @@ class ERR_MortarBattery return count; } - protected void Equip(IEntity soldier) + bool Stopped() { return m_Stopped; } + bool SupplyPending() { return m_Transfer && m_Transfer.Unresolved(); } + bool SupplyAuthorized(float now) { - InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(soldier.FindComponent(InventoryStorageManagerComponent)); - if (!inventory) - { - Audit("EQUIP FAILED", string.Format("crew=%1 inventory missing", soldier)); - return; - } - if (soldier == RadioOperator) - { - int capability = ERR_HQRadio.Capability(soldier); - Audit("RADIO EQUIP", string.Format("operator=%1 capability=%2 (2=physical manpack); next HQ radio index verifies route", soldier, capability)); - return; - } - if (ERR_HQRadio.Capability(soldier) == 0 && !inventory.TrySpawnPrefabToStorage("{E1A5D4B878AA8980}Prefabs/Items/Equipment/Radios/Radio_R148.et")) - Print("Rereintroduced AI [mortar]: crew radio did not fit; HQ handoff required", LogLevel.WARNING); - // Native mortar-crew backpacks carry three EMPTY three-round boxes. - // Fill them once. No infinite ammunition or replacement after casualties. - for (int i = InventoryShells(inventory); i < 9; i++) - { - if (!inventory.TrySpawnPrefabToStorage(SHELL, purpose: EStoragePurpose.PURPOSE_DEPOSIT)) - break; - } - Audit("EQUIP", string.Format("crew=%1 inventory HE=%2 requested=9 radio capability=%3 (0=none)", soldier, InventoryShells(inventory), ERR_HQRadio.Capability(soldier))); + 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(); } - bool SupplyGunner() + ERR_MortarSupplyState SupplyState(float now) { - if (!Operational()) - return SupplyFailed(OperationalReason()); + // 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()) @@ -303,15 +326,15 @@ class ERR_MortarBattery } } } - if (!gunner) return SupplyFailed("no fighting gunner found"); - if (ERR_Actors.Group(gunner) != Group) return SupplyFailed("turret occupant belongs to another group"); - if (!ERR_Actors.CanFight(gunner)) return SupplyFailed("gunner cannot fight"); + 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 SupplyFailed("gunner inventory missing"); + return SupplyStateFailed("gunner inventory missing"); if (InventoryShells(destination) > 0) - return true; - int nearbyDonors, donorShells, storageRejected, moveRejected; + return ERR_MortarSupplyState.READY; + int nearbyDonors, donorShells, storageRejected; array consideredShells = {}; foreach (AIAgent bearer : agents) { @@ -330,20 +353,27 @@ class ERR_MortarBattery { if (!item || !item.GetPrefabData() || item.GetPrefabData().GetPrefabName() != SHELL) continue; - if (consideredShells.Contains(item)) 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; } - if (inventory.TryMoveItemToStorage(item, storage)) - { - Audit("AMMO TRANSFER", string.Format("request accepted donor=%1 gunner=%2 shell=%3; inventory move is not a fired shot", donor, gunner, item)); - return true; - } - moveRejected++; + 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 SupplyFailed(string.Format("gunner empty; fighting donors with inventory within 12m=%1 donor HE=%2 destination storage rejected=%3 native move rejected=%4", nearbyDonors, donorShells, storageRejected, moveRejected)); + 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) @@ -363,8 +393,12 @@ class ERR_MortarBattery CommandOpen = false; RadioOrder = null; PendingRadioReport = null; + PendingSupplyReport = null; + if (m_Transfer) m_Transfer.Invalidate(); Report = null; AimedAt = -1; + AimSolver = null; + AimSolution = null; if (Activity) Activity.Complete(); Activity = null; @@ -399,42 +433,21 @@ class ERR_MortarBattery 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 (!StartupActivated && now - SpawnedAt >= 10000) - { - SCR_AIVehicleUsageComponent usage = SCR_AIVehicleUsageComponent.Cast(Gun.FindComponent(SCR_AIVehicleUsageComponent)); - if (!usage || !Group.GetGroupUtilityComponent().m_VehicleMgr || !Group.GetGroupUtilityComponent().m_VehicleMgr.TryAddVehicle(usage)) - { - SpawnFailure = "native gun registration failed"; - Cancel(SpawnFailure); - return; - } - array initialCrew = {}; - Group.GetAgents(initialCrew); - foreach (AIAgent initialAgent : initialCrew) - { - IEntity initialActor = initialAgent.GetControlledEntity(); - if (initialActor && initialActor.GetPrefabData() && initialActor.GetPrefabData().GetPrefabName() == RADIO_OPERATOR) RadioOperator = initialActor; - } - StartupActivated = true; - Audit("CREW ACTIVATE", "startup delay elapsed; activating and equipping crew"); - Group.ActivateAI(); - array agents = {}; - Group.GetAgents(agents); - foreach (AIAgent agent : agents) - { - if (agent && ERR_Actors.CanFight(agent.GetControlledEntity())) - { - agent.SetPermanentLOD(0); - agent.ActivateAI(); - Equip(agent.GetControlledEntity()); - } - } - } 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)); @@ -448,6 +461,7 @@ class ERR_MortarBattery 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; diff --git a/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c b/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c index eeaf1ec..0eda135 100644 --- a/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c +++ b/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c @@ -36,6 +36,8 @@ modded class SCR_AIGetArtilleryAimDistanceCompensation if (!battery) return super.EOnTaskSimulate(owner, dt); battery.AimedAt = -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; } @@ -43,13 +45,56 @@ modded class SCR_AIGetArtilleryAimDistanceCompensation 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.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.AimedAt = 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; + } + + 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 ENodeResult.FAIL; } + 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 ENodeResult.FAIL; } + 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 ENodeResult.FAIL; } + if (!source) { system.Withhold(battery, "shell resource has no entity source", ammo); return null; } array coefficients = {}; GetAmmoInitialSpeedCoefficients(ammo, coefficients); if (coefficients.IsEmpty()) @@ -66,13 +111,13 @@ modded class SCR_AIGetArtilleryAimDistanceCompensation // 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 ENodeResult.FAIL; } - if (!system.OutsideSettlements(impact)) { system.Withhold(battery, "aim target inside settlement exclusion", system.SettlementReason); return ENodeResult.FAIL; } + 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(gun.GetOrigin(), impact); - float altitude = impact[1] - gun.GetOrigin()[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 ENodeResult.FAIL; } + 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++) @@ -86,25 +131,26 @@ modded class SCR_AIGetArtilleryAimDistanceCompensation 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 ENodeResult.FAIL; } + 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 ENodeResult.FAIL; } - if (!system.Safe(battery, impact, flight + 2)) { system.Withhold(battery, "aim impact safety rejected", system.SafetyReason); return ENodeResult.FAIL; } - battery.Impact = impact; - battery.AimOffset = salvoOffset; - battery.AimedShot = battery.OrderShots; - battery.FlightTime = flight; - battery.AimedAt = now; - battery.LastFailure = ""; - battery.Trace("AIM SOLUTION", "ready", string.Format("predicted impact=%1 flight=%2s charge index=%3 aim height offset=%4m latest source=M%5", impact, flight, charge, offset, report.MessageId)); - vector aim = impact + Vector(0, offset, 0); - SetVariableOut(PORT_AIM_POS, aim); - SetVariableOut(PORT_INIT_SPEED_ID, charge); - return ENodeResult.SUCCESS; + 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; } } @@ -204,17 +250,27 @@ modded class SCR_AIStaticArtilleryBehavior_ShootingLogic } if (battery) { - if (!battery.CommandOpen) return ENodeResult.FAIL; - // Loading can outlast the native pause. Count confirmed shells only. - if (battery.OrderShots <= behavior.GetShotCount()) return ENodeResult.RUNNING; + 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) + { + ERR_MortarSupplyState supply = battery.SupplyState(GetGame().GetWorld().GetWorldTime()); + if (supply == ERR_MortarSupplyState.PENDING) return ENodeResult.RUNNING; + if (supply == ERR_MortarSupplyState.FAILED) + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (system) system.Withhold(battery, "next native load lacks confirmed physical gunner ammunition"); + return ENodeResult.FAIL; + } + } } ENodeResult result = super.EOnTaskSimulate(owner, dt); if (battery && result == ENodeResult.SUCCESS) { SetVariableOut(PORT_AIMING_NEEDED, true); - // Transfer existing nearby crew ammunition before the next native load. - if (battery.CommandOpen && battery.OrderShots < ERR_MortarSalvo.ROUNDS) - battery.SupplyGunner(); } return result; } diff --git a/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c b/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c new file mode 100644 index 0000000..3e5ed42 --- /dev/null +++ b/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c @@ -0,0 +1,177 @@ +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; + 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/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c b/addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c new file mode 100644 index 0000000..46aad47 --- /dev/null +++ b/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/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c b/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c new file mode 100644 index 0000000..ece2586 --- /dev/null +++ b/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/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c b/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c index eb68e10..79ef2c9 100644 --- a/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c +++ b/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c @@ -36,12 +36,14 @@ class ERR_MortarSystem 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; } @@ -125,13 +127,19 @@ class ERR_MortarSystem bool AllowShot(ERR_MortarBattery battery) { float now = GetGame().GetWorld().GetWorldTime(); - if (!ERR_HQ.MissionActive()) return Withhold(battery, "mission inactive"); + if (m_Stopped || !ERR_HQ.MissionActive()) return Withhold(battery, "mission inactive or HQ stopped"); if (!battery.Operational()) return Withhold(battery, battery.OperationalReason()); 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 > 10000) return Withhold(battery, "fresh aim solution required"); + 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 (now - battery.AimedAt > 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; @@ -142,20 +150,41 @@ class ERR_MortarSystem } protected void AdvanceOrder(ERR_MortarBattery battery, float now) { - if (!battery.RadioOrder) return; - int state = battery.RadioOrder.Advance(now, m_HQ.Journal()); - if (state == 0) return; - ERR_HQReport delivered = battery.PendingRadioReport; - battery.RadioOrder = null; - battery.PendingRadioReport = null; - if (state < 0 || !ERR_MortarPrediction.Fresh(delivered, now) || !battery.Operational() || battery.Activity || !battery.SupplyGunner()) + if (battery.RadioOrder) { - battery.Cancel("radio delivery, report freshness or gunner availability failed"); + 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; } - battery.Order(delivered, now); + 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); } + void Tick(float now) { if (m_Stopped || !Replication.IsServer()) return; @@ -179,9 +208,10 @@ class ERR_MortarSystem float distance = float.MAX; foreach (ERR_MortarBattery battery : m_Batteries) { - if (!battery.StartupActivated || !battery.Operational() || battery.Activity || battery.RadioOrder || now < battery.NextOrder || battery.CountShells() == 0) continue; + 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; @@ -192,7 +222,7 @@ class ERR_MortarSystem if (!selected || !target) return; ERR_HQRoute route = m_HQ.Downlink(selected.Group, "MORTAR ORDER", target.Description(now), target.MessageId); if (!route) return; - selected.BeginRequest(target, now); + if (!selected.BeginRequest(target, now)) return; selected.RadioId = route.MessageId; selected.RadioOrder = route; selected.PendingRadioReport = target.Snapshot(); @@ -216,6 +246,6 @@ class ERR_MortarSystem void Stop() { m_Stopped = true; - foreach (ERR_MortarBattery battery : m_Batteries) battery.Cancel("HQ stopped"); + foreach (ERR_MortarBattery battery : m_Batteries) battery.Stop(); } } diff --git a/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c b/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c new file mode 100644 index 0000000..e9dde5e --- /dev/null +++ b/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c @@ -0,0 +1,330 @@ +#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 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) || battery.AimedAt < 0 || now < battery.AimedAt || now - battery.AimedAt > 10000 || 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/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c b/addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c new file mode 100644 index 0000000..c0d206a --- /dev/null +++ b/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/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c b/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c new file mode 100644 index 0000000..6ed3e4a --- /dev/null +++ b/addons/chat/Scripts/Game/ERR/ERR_NativeHQResponseProof.c @@ -0,0 +1,284 @@ +#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.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 || unit.Radio != original.Radio || !original.Actors.Contains(unit.Radio) || !route.Downlink || route.Nodes.IsEmpty() || route.Nodes[route.Nodes.Count() - 1].Carrier != unit.Radio || route.Failed || route.Sending || route.Cursor != route.Nodes.Count() - 1 || !unit.Waypoint) { Fail("delivered response lacks immutable accepted report and original physical 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/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c b/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c index 5d1929d..d8a21c2 100644 --- a/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c +++ b/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c @@ -17,8 +17,13 @@ modded class ERR_GameMode protected bool m_ERRTestRadioNetwork; protected bool m_ERRTestHQResponse; protected bool m_ERRTestMortar; + protected bool m_ERRTestMortarFire; + 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) @@ -31,9 +36,13 @@ modded class ERR_GameMode m_ERRTestRadioNetwork = outcome == "radio-network"; m_ERRTestHQResponse = outcome == "hq-response"; m_ERRTestMortar = outcome == "mortar-inventory"; + m_ERRTestMortarFire = outcome == "mortar-fire" || outcome == "mortar-expiry"; + 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_ERRTestMortarTransfer) 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); @@ -52,6 +61,9 @@ modded class ERR_GameMode } protected void ERR_StopHQPatrol() { + if (m_ERRHQResponseProof) m_ERRHQResponseProof.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(); } @@ -87,6 +99,24 @@ modded class ERR_GameMode protected void ERR_SmokePhase(ERR_Phase previous, ERR_Phase current) { if (m_ERRSmokeDone || !ERR_MissionRules.Terminal(current)) 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; @@ -149,6 +179,20 @@ 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 == 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); @@ -181,6 +225,20 @@ modded class ERR_GameMode m_ERRSmokeStep = 130; 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); @@ -189,7 +247,7 @@ modded class ERR_GameMode } if (m_ERRTestHQResponse) { - DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRHQResponseProof = new ERR_NativeHQResponseProof(this, m_ERRSmokePlayer); m_ERRSmokeStep = 110; return; } @@ -343,23 +401,9 @@ modded class ERR_GameMode } else if (m_ERRSmokeStep == 110) { - ERR_HQ hq = ERR_HQ.Cast(Command()); - if (!hq || !hq.ERR_ProbeSquadsReady()) return; - ERR_MovePlayer(hq.ERR_ProbeResponseOrigin()); - m_ERRSmokeStep = 111; - m_ERRSmokeWait = now + 1000; - } - else if (m_ERRSmokeStep == 111) - { - ERR_HQ hq = ERR_HQ.Cast(Command()); - if (now >= m_ERRNextProbeLog) - { - Print("ERR HQ PROBE: " + hq.ERR_ProbePerception()); - m_ERRNextProbeLog = now + 10000; - } - if (!hq.ERR_ProbeDeliveredResponse()) return; - if (!ERR_Check(true, "native visual contact reaches HQ and orders a different existing squad")) return; - if (!ERR_Check(hq.ERR_ProbeUniqueAssignments(), "HQ uses distinct waypoints within the existing force and order limits")) return; + 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); diff --git a/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c b/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c index f5b424b..0e2a383 100644 --- a/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c +++ b/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c @@ -1,3 +1,26 @@ +// 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); } + 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 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); + } +} + // Read replicated discovery locally. A server-wide marker list never leaks // locations which have not been recovered through gameplay. modded class ERR_LocationComponent @@ -17,15 +40,6 @@ modded class ERR_LocationComponent if (!GetGame().GetPlayerController() || Knowledge() <= 0 || (Knowledge() == m_ERRShown && Label() == m_ERRShownLabel)) return; SCR_MapMarkerManagerComponent manager = SCR_MapMarkerManagerComponent.GetInstance(); if (!manager || !manager.GetMarkerConfig()) return; - if (!m_ERRMarker) - { - m_ERRMarker = new SCR_MapMarkerBase(); - m_ERRMarker.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); - vector p = Position(); - m_ERRMarker.SetWorldPos(Math.Round(p[0]), Math.Round(p[2])); - m_ERRMarker.SetMarkerConfigID(0); - manager.InsertStaticMarker(m_ERRMarker, true); - } string label = "Unknown location"; if (Knowledge() == 2) { @@ -36,6 +50,16 @@ modded class ERR_LocationComponent 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); + vector p = Position(); + m_ERRMarker.SetWorldPos(Math.Round(p[0]), Math.Round(p[2])); + m_ERRMarker.SetMarkerConfigID(0); + m_ERRMarker.SetCustomText(label); + manager.InsertStaticMarker(m_ERRMarker, true); + } m_ERRMarker.SetCustomText(label); m_ERRShown = Knowledge(); m_ERRShownLabel = Label(); diff --git a/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c b/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c new file mode 100644 index 0000000..55bd09f --- /dev/null +++ b/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/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c b/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c index 770240b..6d01863 100644 --- a/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c +++ b/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c @@ -17,11 +17,14 @@ modded class ERR_GameMode 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_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; @@ -79,12 +82,15 @@ modded class ERR_GameMode } protected void ERR_StopHealthProbes() { + ERR_NativeDiscoveryMapProbe.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_ERRCasualtyServiceProbe) m_ERRCasualtyServiceProbe.Stop(); if (m_ERRObjectiveLossProbe) m_ERRObjectiveLossProbe.Stop(); if (m_ERRBaseMedicalProbe) m_ERRBaseMedicalProbe.Stop(); @@ -156,6 +162,20 @@ modded class ERR_GameMode { if (!ERR_MissionRules.Terminal(current)) return; GetGame().GetCallqueue().Remove(ERR_BaseTick); + if (m_ERRExtractionCase == "powered-flight") + { + if (!ERR_BaseCheck(current == ERR_Phase.DEFEAT && m_ERRBaseStep == 1802, "native powered-flight fixture finished before explicit test reset")) return; + ERR_StopHealthProbes(); + 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; @@ -285,6 +305,25 @@ modded class ERR_GameMode Print("ERR SMOKE COMPLETE: expected startup-failure"); 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); @@ -423,6 +462,25 @@ modded class ERR_GameMode 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 == "powered-flight") + { + DamageManagerComponent.Cast(m_ERRBasePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRPoweredFlightProbe = new ERR_NativePoweredFlightProbe(this); + 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); diff --git a/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c b/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c new file mode 100644 index 0000000..020803d --- /dev/null +++ b/addons/core/Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c @@ -0,0 +1,140 @@ +#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; + } +} +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.RemoveStaticMarker(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; + 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; + Stop(); + return Check(manager.GetStaticMarkers().Count() == originalCount, "owned probe widgets and markers removed; mission markers preserved"); + } +} +#endif diff --git a/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c b/addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c new file mode 100644 index 0000000..20ae4a7 --- /dev/null +++ b/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/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c b/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c new file mode 100644 index 0000000..e7e870a --- /dev/null +++ b/addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c @@ -0,0 +1,321 @@ +#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) + { + super.OnPrepareControls(owner, am, dt, player); + ERR_NativePoweredFlightProbe probe = ERR_NativePoweredFlightProbe.Current(); + if (probe && !player) probe.PreparePilot(this, owner, dt); + } +} +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 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 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; + } +} +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 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_HelicopterUpdates; + protected bool m_Bound; + protected bool m_ModeSaved; + protected bool m_Stopped; + protected bool m_Complete; + protected bool m_ReadbackOK = true; + static const ResourceName AIRCRAFT = "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et"; + static const ResourceName GROUP = "{8DE0C0830FE0C33D}Prefabs/Groups/OPFOR/Group_USSR_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"; + } + static ERR_NativePoweredFlightProbe Current() { return s_Current; } + void ERR_NativePoweredFlightProbe(ERR_GameMode mode) + { + m_Mode = mode; m_Deadline = GetGame().GetWorld().GetWorldTime() + 240000; + if (Enabled() && !s_Current) s_Current = this; + else m_Stopped = true; + } + 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++; + } + void PreparePilot(CharacterControllerComponent controller, IEntity owner, float dt) + { + if (!m_Bound || controller != m_Character || owner != m_Pilot || !PoweredAuthority() || !m_Input || !m_Simulation || dt <= 0 || dt > 0.2) return; + vector transform[4]; m_Simulation.GetWorldTransform(transform); + vector velocity = m_Simulation.GetVelocity(); + vector angular = m_Simulation.GetAngularVelocityLocal(); + float height = transform[3][1] - m_Home[1]; + float forward, aside, torque; + float collective = -1; + 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; + vector acceleration = offset * 0.08 - velocity * 0.3; 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] * 0.3, 0.15); + aside = ERR_PoweredFlightRules.ClampInput((vector.Dot(acceleration, transform[0]) / 9.81 + transform[0][1]) * 0.8 + angular[2] * 0.3, 0.15); + float headingError = m_Heading - m_Aircraft.GetAngles()[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; + } + 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(); + for (int index = 0; index < 12; index++) + { + float angle = index * Math.PI / 6; + vector candidate = ERR_Actors.Ground(anchor + Vector(Math.Cos(angle) * 120, 0, Math.Sin(angle) * 120)); + if (candidate[1] < 2) continue; + bool flat = true; + 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); + if (Math.AbsFloat(SCR_TerrainHelper.GetTerrainY(point) - candidate[1]) > 0.8) flat = false; + } + if (!flat || !SCR_WorldTools.TraceCilinderUtil(candidate + "0 2.5 0", 15, 4, TraceFlags.ENTS)) continue; + TraceBox clearance = new TraceBox(); clearance.Start = candidate + "0 3 0"; clearance.End = candidate + "0 35 0"; + clearance.Mins = "-15 -1 -15"; clearance.Maxs = "15 1 15"; clearance.Flags = TraceFlags.ENTS | TraceFlags.WORLD; + if (GetGame().GetWorld().TraceMove(clearance, null) < 1) continue; + result = candidate; return true; + } + return false; + } + protected void Diagnostic(float now) + { + if (!m_Simulation || !m_Aircraft || now < m_NextLog) return; + m_NextLog = now + 2000; + vector transform[4]; m_Simulation.GetWorldTransform(transform); + 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()); + 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)); + } + void Stop() + { + if (m_Stopped) return; + // Input cleanup is confined to the same unclaimed test pilot/aircraft. + bool ours = m_Bound && OwnPilot() && !PlayerPresent(); + m_Stopped = true; m_Bound = false; + if (s_Current == this) s_Current = null; + if (ours && m_Input) + { + m_Input.SetVehicleCollective(0); m_Input.SetVehicleThrottle(0); + m_Input.SetVehicleCyclicForward(0); m_Input.SetVehicleCyclicAside(0); m_Input.SetVehicleAntiTorque(0); + if (m_Controller && m_ModeSaved) m_Controller.SetCollectiveMode(m_OriginalMode); + } + 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. + } + int Tick(float now) + { + if (m_Complete) return 1; + if (m_Stopped) return -1; + 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 (m_PreviousTick >= 0 && (now < m_PreviousTick || now - m_PreviousTick > 1500)) m_Stable = -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_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; + m_Group.SetPermanentLOD(0); m_Group.ActivateAI(); + m_Controller = HelicopterControllerComponent.Cast(m_Aircraft.FindComponent(HelicopterControllerComponent)); + if (m_Controller) { m_Simulation = m_Controller.GetSimulation(); m_Seat = m_Controller.GetPilotCompartmentSlot(); } + m_Fuel = FuelManagerComponent.Cast(m_Aircraft.FindComponent(FuelManagerComponent)); + if (!Check(m_Simulation && m_Seat && !m_Seat.GetOccupant() && m_Fuel && m_Fuel.HasFuel(), "native flight simulation, actual active pilot seat and finite fuel present")) return -1; + AIGroup nativeGroup = m_Group; + m_Pilot = m_Seat.SpawnCharacterInCompartment(PILOT, nativeGroup, GROUP); + if (!Check(m_Pilot && nativeGroup == m_Group, "one existing vanilla character spawned through native pilot-seat mechanism")) return -1; + m_Mode.Own(m_Pilot); + m_Stage = 1; m_StageDeadline = now + 30000; return 0; + } + if (m_Stage == 1) + { + 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 || !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.GetAngles()[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) { Check(false, "current owned conscious pilot, fuel, rotors 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_ControlUpdates < 3 || m_HelicopterUpdates < 3) return 0; + if (!Check(m_Controller.GetCollectiveMode() == CollectiveMode.Direct && m_Input.GetVehicleCollective() == -1, "owned native input hooks apply minimum collective in Direct mode")) return -1; + 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_Simulation.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 > 22 || 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_Collective = -0.8; m_Stage = 4; m_StageDeadline = now + 65000; m_Stable = -1; return 0; + } + if (m_Stage >= 4 && m_Stage <= 6 && !m_Controller.IsEngineOn()) { Check(false, "powered flight retains real running engine"); return -1; } + 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; + m_Stage = 6; m_StageDeadline = now + 65000; m_Stable = -1; + } + return 0; + } + if (m_Stage == 6) + { + 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; + 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/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c b/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c index 80f8607..7c331df 100644 --- a/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c +++ b/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c @@ -67,7 +67,7 @@ modded class SCR_BaseItemSupportStationComponent ownerName = owner.GetName(); if (owner.GetPrefabData()) prefab = owner.GetPrefabData().GetPrefabName(); } - SCR_EntityCatalogManagerComponent catalog = SCR_EntityCatalogManagerComponent.GetInstance(); + bool globalCatalogPresent = SCR_EntityCatalogManagerComponent.GetInstance() != null; SCR_BaseGameMode baseMode; if (GetGame()) baseMode = SCR_BaseGameMode.Cast(GetGame().GetGameMode()); int gameState = -1; @@ -80,7 +80,7 @@ modded class SCR_BaseItemSupportStationComponent 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, catalog != null); + 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; diff --git a/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c b/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c index c90e446..fae422c 100644 --- a/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c +++ b/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c @@ -111,4 +111,20 @@ modded class ArmaReforgerScripted 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); + } +} + #endif diff --git a/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c b/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c index 4b40aa6..5c62327 100644 --- a/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c +++ b/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c @@ -10,6 +10,8 @@ class ERR_SpawnLogic : SCR_SpawnLogic 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) { @@ -18,11 +20,17 @@ class ERR_SpawnLogic : SCR_SpawnLogic { 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) @@ -40,20 +48,47 @@ class ERR_SpawnLogic : SCR_SpawnLogic ERR_GameMode mode = ERR_GameMode.Get(); BindLifecycle(mode); SCR_PlayerController resultController = SCR_PlayerController.Cast(GetGame().GetPlayerManager().GetPlayerController(playerId)); - if (resultController) resultController.ERR_ResetEscapeResult(); + if (resultController && (!m_LocalAdmission || !m_LocalAdmission.OfflineMode())) resultController.ERR_ResetEscapeResult(); #ifndef WORKBENCH string diagnosticProject; - if (System.GetCLIParam("errOrdinaryScenario", 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) resultController.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + if (resultController) + { + if (m_LocalAdmission && m_LocalAdmission.OfflineMode()) resultController.ERR_ResetEscapeResult(); + resultController.ERR_PublishEscapeResult(mode.Players(), mode.Extraction()); + } m_Identities.Set(playerId, identity); - if (ResolveReconnection(playerId)) + 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); @@ -68,6 +103,7 @@ class ERR_SpawnLogic : SCR_SpawnLogic 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; } @@ -150,6 +186,7 @@ class ERR_SpawnLogic : SCR_SpawnLogic { 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); @@ -197,10 +234,21 @@ class ERR_SpawnLogic : SCR_SpawnLogic 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) @@ -277,6 +325,7 @@ class ERR_SpawnLogic : SCR_SpawnLogic } 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(); @@ -287,6 +336,7 @@ class ERR_SpawnLogic : SCR_SpawnLogic { 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; @@ -300,6 +350,7 @@ class ERR_SpawnLogic : SCR_SpawnLogic { m_LifecycleMode.OnPhaseChanged().Remove(AdmissionPhaseChanged); m_LifecycleMode.OnStop().Remove(StopAdmissions); + m_LifecycleMode.OnTick().Remove(CheckLocalAdmissionTick); } GetGame().GetCallqueue().Remove(RetrySpawn); GetGame().GetCallqueue().Remove(ObserveAfterLoss); diff --git a/docs/acceptance.json b/docs/acceptance.json index d6f9368..9993a1e 100644 --- a/docs/acceptance.json +++ b/docs/acceptance.json @@ -501,6 +501,80 @@ "docs/evidence/native-2026-09-19-073806/source-sha256.json", "docs/evidence/native-2026-09-19-073806/source-provenance.json" ] + }, + "scripted_casualty_loading": { + "status": "passed", + "scope": "87 clean native assertions. Actual local controlled casualty, real five-second action completion boundary, owner handshake, native reservation and observed child-seat occupancy; synthetic helper admission and direct completion only, no held input or remote RPC qualification.", + "evidence": [ + "docs/evidence/native-2026-09-19-075514/report.json", + "docs/evidence/native-2026-09-19-075514/console.log.txt", + "docs/evidence/native-2026-09-19-075514/source-sha256.json" + ] + }, + "scripted_casualty_removal": { + "status": "passed", + "scope": "66 clean native assertions. Actual inherited vanilla removal action, authored exterior door, real exit event, vacant bench and live incapacitated grounded body. Direct completion only, no ordinary held input, remote transit or post-removal extraction result assertion.", + "evidence": [ + "docs/evidence/native-2026-09-19-080058/report.json", + "docs/evidence/native-2026-09-19-080058/console.log.txt", + "docs/evidence/native-2026-09-19-080058/source-sha256.json" + ] + }, + "scripted_mortar_inventory_current": { + "status": "passed", + "scope": "37 clean companion-loaded native assertions. Four physical crew, real manpack operator, exactly 27 distinct HE shells, finite depletion and permanent gun/crew loss. No firing or later readiness/transfer source qualification.", + "evidence": [ + "docs/evidence/native-2026-09-19-080226/report.json", + "docs/evidence/native-2026-09-19-080226/console.log.txt", + "docs/evidence/native-2026-09-19-080226/source-sha256.json" + ] + }, + "ordinary_core_startup": { + "status": "passed", + "scope": "Regular Game without Workbench; matching Core header/MissionSystems; genuine local controller and canonical living prisoner after native audit/finalization; 15-second settle and cleanup, zero captured failures. Standalone round-local key, diagnostic noSplash, no held input, full escape, normal splash or multiplayer claim. This is not a Workbench smoke qualification.", + "evidence": [ + "docs/evidence/game-2026-09-19-082733/report.json", + "docs/evidence/game-2026-09-19-082733/console.log.txt", + "docs/evidence/game-2026-09-19-082733/game-startup-report.json.txt", + "docs/evidence/game-2026-09-19-082733/source-sha256.json" + ] + }, + "ordinary_companion_startup": { + "status": "passed", + "scope": "Regular Game without Workbench; matching Chat header and vanilla MissionSystems; normal native audit/finalization yields actual local canonical living prisoner with all companion addons. Fifteen-second ready interval, cleanup, zero captured failures. Standalone round-local key and diagnostic noSplash only; no full escape, normal splash or multiplayer claim.", + "evidence": [ + "docs/evidence/game-2026-09-19-082938/report.json", + "docs/evidence/game-2026-09-19-082938/console.log.txt", + "docs/evidence/game-2026-09-19-082938/source-sha256.json", + "docs/evidence/game-2026-09-19-082938/game-startup-report.json.txt" + ] + }, + "scripted_mortar_first_projectile": { + "status": "passed", + "scope": "48 clean native assertions. Synthetic stationary observation enters actual RTO uplink, HQ scheduling and downlink, native activity/ballistic aiming and actual projectile callback; exactly one of 27 original physical shells consumed. Explicit Stop followed by twelve seconds without duplicate orders, firing or replenishment. Immutable original-command ballistic revalidation handles native aiming delay without renewing observation age. No perception, impact accuracy, full salvo or multiplayer claim.", + "evidence": [ + "docs/evidence/2026-09-19-mortar-first-shot/report.json", + "docs/evidence/2026-09-19-mortar-first-shot/console.log.txt", + "docs/evidence/2026-09-19-mortar-first-shot/source-sha256.json" + ] + }, + "scripted_mortar_exact_transfer": { + "status": "passed", + "scope": "119 clean local native assertions. Explicit scheduler/radio bypass fixture moves real existing HE shell donor-to-gunner, verifies callback plus exact source/destination identity, cancels a second accepted operation, permits no new request/readiness, conserves all 27 original shells and restores each original owner. Native callback completed synchronously before cancellation; late callback timing is untested. No firing or remote ownership claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-083810/report.json", + "docs/evidence/native-2026-09-19-083810/console.log.txt", + "docs/evidence/native-2026-09-19-083810/source-sha256.json" + ] + }, + "scripted_standalone_admission_replay": { + "status": "passed", + "scope": "54 clean native assertions using real sole local controller/body/life. Callback replay retains canonical state and idle spawn metadata; disclosed helper argument faults latch closed, and live invalid-controller injection triggers normal defeat with original spent life/body retained. No genuine network disconnect, authentication, or remote mode proof.", + "evidence": [ + "docs/evidence/native-2026-09-19-085048/report.json", + "docs/evidence/native-2026-09-19-085048/console.log.txt", + "docs/evidence/native-2026-09-19-085048/source-sha256.json" + ] } } } diff --git a/docs/architecture.md b/docs/architecture.md index d9d13d7..f4439c6 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -64,3 +64,9 @@ The native end-data connection ID list is retained only as a framework adapter. `ERR_ObjectiveText` supplies hints and native task descriptions from the same mission state. Radio identification can update local guidance within the search phase, and extraction instructions use the configured replicated radius. `ERR_ObjectiveDetails` subscribes open successor task details directly to native display-data changes; it removes that subscription on task switch and widget detach. Detach also removes native global task-event callbacks, and pending overflow work is cancelled before assignee labels are deleted. Other task types retain their native behavior. See [objective widget lifecycle](objective-widget-lifecycle.md). Optional ground transport belongs to the existing site definition/service and its rollback path. It has bounded parking checks, actual native fuel and compartments, and no replacement/refill loop. See [ground transport](ground-transport.md). + +## Standalone admission and finite mortar orders + +`ERR_LocalAdmission` supplies a round-local roster key only for the sole genuine local controller in native `RplMode.None`. It is selected through normal audited spawn admission, pinned to that controller/context and closed on invalidation. It is not an account identity and never replaces native identity handling in Listen, Dedicated or Client modes. [Design and evidence](local-singleplayer-admission.md). + +HQ owns each finite mortar battery, its readiness, delivered order and exact shell transactions. Initial expansion and inventory callbacks must resolve to the actual original crew and 27 distinct HE shells. Resupply moves one exact existing shell; acceptance alone is not readiness. Re-aim validation recomputes native ballistics against the immutable original command while retaining the original report's expiry. The per-battery report ledger prevents a cancelled/completed radio observation from becoming another order; only newly delivered observations can authorize new attempts. [Operations](finite-mortar-operations.md), [aim renewal](mortar-aim-renewal.md), [report deduplication](mortar-report-deduplication.md). diff --git a/docs/casualty-loading.md b/docs/casualty-loading.md index 3d37589..d1a93e7 100644 --- a/docs/casualty-loading.md +++ b/docs/casualty-loading.md @@ -21,7 +21,7 @@ An already committed native movement is not rolled back if conditions subsequent The mode adapter owns Tick/Stop/roster subscriptions and replicates only the current extraction-aircraft reference for client action presentation. Roster events run cleanup even when the ordinary mission tick returns early on an empty server. PREPARING roster callbacks are no-ops and cannot permanently stop the service. Terminal/explicit Stop latches before notifying subscribers, releases owned tickets and removes subscriptions. No new persistent settings, public entity-selection RPC, automatic spawning or original Escapists resource is introduced. -## Merge and checks +## Integration and checks New production files: @@ -30,7 +30,7 @@ New production files: - `addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c` - `addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c` -Copy this document and `tests/test_casualty_loading_policy.py`, then apply `casualty-production-integration.patch` for `Prisoner.et` and `tools/check.py`. No existing GameMode source or native probe is replaced. The action reuses the existing Prisoner resource identity; new nested action/UI component IDs are successor-authored. +The successor Prisoner prefab owns the action and `tools/check.py` includes the casualty policy regression. The action reuses the existing Prisoner resource identity; new nested action/UI component IDs are successor-authored. Offline checks execute production timing/range/aircraft-motion policy bodies and the complete repository suite. Native work must inspect the real spawned action and inherited medicine actions, show strict rejection for nonparticipants/old bodies/wrong phase, then exercise genuine two-player authorization and physical movement. Test cancellation during action progress, recovery during progress, duplicate callers, last-seat contention, native refusal, loss of replication visibility, delayed/reordered/expired handshake, disconnect/reconnect, aircraft loss and terminal transition. Confirm native seat reservation cleanup and actual single occupancy. Do not count synthetic fixture roster identities as proof of remote controller ownership. @@ -40,7 +40,7 @@ Offline checks execute production timing/range/aircraft-motion policy bodies and The fixture deliberately advances legal mission phases to reach extraction; it does not claim a completed radio objective. It checks a fresh settling window, native external bench reservations, a physical successor wall blocking sight, the real action's completion boundary, duplicate requests, actual player occupancy, reservation release, preserved target identity and idempotent Stop. It does not simulate holding action input, remote packet timing or Stop during an in-flight command. It retains inherited medical-action presence. On completion the normal test reset ends the round; cleanup deletes only the helper/obstacle and releases fixture-owned reservations, with no forced recovery, seated-player teleport, body deletion or unrelated health restoration. -The WORKBENCH mode override routes owner callbacks to the helper adapter only during this explicit case. Add the new fixture source, then use `casualty-service-base-snippets.md` for parent-owned smoke/runner integration. [075514](evidence/native-2026-09-19-075514/report.json) completes this local fixture with 87 passing assertions and zero engine or script/VM errors. The production one-shot initial placement lets the original aircraft settle naturally; separate raised, tilted and moving aircraft are rejected. A single actual native damage request incapacitates the controlled player, then the real action completion boundary and owner-controller handshake load that living body into the selected child bench exactly once. External reservations and physical obstruction reject requests; successful loading releases the reservation, retains player identity and survives idempotent Stop without another completion. +The WORKBENCH mode override routes owner callbacks to the helper adapter only during this explicit case. Core smoke and the hidden runner expose the opt-in `casualty-service` case. [075514](evidence/native-2026-09-19-075514/report.json) completes this local fixture with 87 passing assertions and zero engine or script/VM errors. The production one-shot initial placement lets the original aircraft settle naturally; separate raised, tilted and moving aircraft are rejected. A single actual native damage request incapacitates the controlled player, then the real action completion boundary and owner-controller handshake load that living body into the selected child bench exactly once. External reservations and physical obstruction reject requests; successful loading releases the reservation, retains player identity and survives idempotent Stop without another completion. The real local controller takes the server/local fast path; this does not exercise remote Owner/Server RPC transit. Only the helper membership is adapted, and action completion is invoked directly rather than holding input for five seconds. The fixture requests its own reset after loading, without a complete radio-to-extraction playthrough. Real two-player input, latency/reordering, disconnect/death while pending, last-seat contention and entity-removal cleanup remain separate requirements. Earlier contact and damage-fixture failures are preserved in the validation log. diff --git a/docs/current-status.md b/docs/current-status.md index 28b0ea2..5029c8c 100644 --- a/docs/current-status.md +++ b/docs/current-status.md @@ -1,35 +1,33 @@ # Current development status -Evidence checkpoint: 19 September 2026, through archived run `080058`. Later running tests are not included. The primary deliverable is an independently authored replacement for the abandoned Escapists base mission, with the existing companion behavior integrated through its interfaces. The first release targets vanilla Everon and up to twelve players. It must complete prison → scavenging/intel → radio defence → helicopter extraction without the original mod or dependent extensions loaded. +Evidence checkpoint: 19 September 2026, through the archived 084026 companion restart run and separate 084040 vanilla dedicated control. Later running tests are not included. The primary deliverable remains an independently authored replacement for the abandoned Escapists base mission, integrating companion behavior through its interfaces. The first release targets vanilla Everon and up to twelve players, completing prison → scavenging/intel → radio defence → helicopter extraction without the original mod or dependent extensions. -The successor has its own five addon projects, scenario/resource identities, authored Everon sites and vanilla asset references. The base loop and several failure paths have passed scripted local Workbench checkpoints. This is a development implementation, not a released or fully accepted replacement. [Acceptance](acceptance.json) remains pending for manual gameplay, real multiplayer, performance and release qualification. +The successor has five independent addon projects, its own scenario/resource identities, authored Everon sites and vanilla asset references. Ordinary Core and companion startup now work with real local admission. Scripted base-loop checkpoints and focused physical support tests exist, but this is not a released or fully accepted replacement. All seventeen release cases remain pending in [acceptance](acceptance.json); development checks record narrower evidence. ## Established development checkpoints -| Area | What the recorded evidence establishes | Important limit | +| Area | Recorded evidence | Limit | | --- | --- | --- | -| Independent base loop | Core-only and companion-loaded scripted escape, interrupted radio defence, extraction, defeat and restart have completed. Native task details and personal result widgets have focused lifecycle checks. | Historical runs exercise their recorded sources; they do not qualify later changes or manual play. See [validation](validation.md). | -| Prison, equipment and medicine | [Prisoner fixture](evidence/native-2026-09-19-063949/report.json) places one controlled player and eleven physical characters inside the prison, verifies explicit starter inventory and real clue transfers. [Medical fixture](evidence/native-2026-09-19-062406/report.json) demonstrates blood-loss treatment, consumed supplies and native consciousness recovery. | These are not twelve connected clients or ordinary treatment input/animation tests. Five initial pistols are a balance choice to evaluate in play; the count alone is not a demonstrated defect. | -| Scavenging and discovery | Finite stock/lost containers remain depleted; two independent clue caches support progression. [Document-loss fixture](evidence/native-2026-09-19-071654/report.json) verifies close physical radio discovery after partial knowledge and loss of all documents. | Manual route visibility, travel, inventory interaction and threat balance remain unqualified. | -| Player lifecycle and extraction | Native admission/finalization, local observer cleanup, physical helicopter seat capacity and identity-based results have focused checks. [Recovery fixture](evidence/native-2026-09-19-064406/report.json) preserves incapacitated survivors and verifies explicit authorized abandonment. | [Casualty-loading fixture](evidence/native-2026-09-19-075514/report.json) now loads the real local incapacitated player from the ground into a reserved bench and releases the reservation. Its helper identity is synthetic; remote reconnect and two-client rescue remain unproved. | -| Existing physical forces | [Patrol fixture](evidence/native-2026-09-19-070919/report.json) demonstrates real cyclic movement. [Companion fixture](evidence/native-2026-09-19-072838/report.json) verifies HQ Search preemption and physical patrol resumption without creating response forces. [Cancellation fixture](evidence/native-2026-09-19-073601/report.json) verifies stopped incomplete groups do not dispatch late members. | The delivered-order patrol test bypasses radio transit. Broader reports, combat, support and losses need integrated qualification. | -| Environment and native errors | [Environment/restart fixture](evidence/native-2026-09-19-065351/report.json) passes two real rounds with zero native errors after restricting vehicle catalogs to required assets. | Earlier vehicle-schema errors are historical, not evidence every current run fails. Intermittent medical-kit teardown attribution remains unresolved; a later [full-loop checkpoint](evidence/native-2026-09-19-073806/report.json) also passes two rounds without native errors. Subsequent initial-placement changes still need their own qualification. | +| Ordinary game admission | Regular, non-Workbench [Core](evidence/game-2026-09-19-082733/game-startup-report.json.txt) and [all-companion](evidence/game-2026-09-19-082938/game-startup-report.json.txt) runs load their headers/MissionSystems and admit the genuine local controller to a living canonical prisoner, with a fifteen-second ready interval and zero captured errors. | Diagnostic noSplash and standalone round-local roster key; no ordinary full route, normal splash, network identity or manual input qualification. [Admission design](local-singleplayer-admission.md). | +| Independent base loop | [Two Core rounds](evidence/native-2026-09-19-080656/report.json) pass 564 assertions, including radio feedback, extraction and restart, with zero errors. | That snapshot predates the standalone admission helper. The later [two companion rounds](evidence/native-2026-09-19-084026-restart-station-error/report.json) complete 96 assertions but retain two support-station catalog errors during restart; they are a failed runtime result. | +| Prison, equipment and medicine | [Prisoner fixture](evidence/native-2026-09-19-063949/report.json) places one controlled player and eleven physical characters inside the prison with exact kits and real clue transfers. [Medical fixture](evidence/native-2026-09-19-062406/report.json) demonstrates blood-loss treatment, consumed supplies and native consciousness recovery. | Physical actors are not twelve connected clients. Ordinary treatment input, animations, supply balance and navigation remain unqualified. The medical snapshot retains historical catalog errors. | +| Discovery and radio | [Partial document loss](evidence/native-2026-09-19-071654/report.json) verifies close physical discovery after partial knowledge and loss of all documents. Radio feedback/continuous defence and interruption have complete Core-loop checks. | Manual discovery, travel, inventory interaction, combat balance and remote feedback remain unqualified. No replacement clues are spawned after loss. | +| Player lifecycle and extraction | [Lifecycle](evidence/native-2026-09-19-081601/report.json), [recovery](evidence/native-2026-09-19-064406/report.json), [casualty loading](evidence/native-2026-09-19-075514/report.json) and [stock removal](evidence/native-2026-09-19-080058/report.json) have focused native checks. The actual local incapacitated body can be loaded into a reserved bench and removed alive beside the authored door. | Direct completion/helper admission is disclosed. Held input, remote owner handshake, competing rescuers, disconnect/death/deletion during loading and real reconnect remain unproved. | +| Physical infantry | [Patrol](evidence/native-2026-09-19-070919/report.json), [HQ preemption/resumption](evidence/native-2026-09-19-072838/report.json) and [pending-spawn cancellation](evidence/native-2026-09-19-073601/report.json) pass without creating response forces. | The delivered-order patrol test bypasses radio transit. Integrated perception/combat, interrupted reports and support losses need broader qualification. | +| Physical mortar | [First projectile](evidence/2026-09-19-mortar-first-shot/report.json) passes 48 assertions through the actual uplink/HQ/downlink/native activity path, consuming one original HE shell and stopping without duplicates. [Exact inventory transfer](evidence/native-2026-09-19-083810/report.json) passes 119 assertions and restores all 27 original shells to their original owners. | Observation is synthetic; impact is unmeasured. Transfer fixture bypasses radio/scheduling and observed a synchronous callback. Full salvo, post-expiry authorization, genuine late callback, perception and remote ownership are separate. | +| Dedicated compilation | [Regular Linux server](evidence/dedicated-2026-09-19-083213/review.json) compiles Core and reaches prison phase with zero players/36 AI inside a network namespace without external routes. | Four resource errors remain; [vanilla-only control](evidence/dedicated-2026-09-19-084040-vanilla/review.json) reproduces all four. No participant joined. This local-server route is diagnostic-only; public/authenticated hosting is not configured or qualified. | -## Immediate blockers and next work +## Immediate work -1. **Resolve the remaining ordinary-game errors and establish player admission.** The [scenario-header launch](evidence/game-2026-09-19-080004/report.json) compiles production Game without WORKBENCH/ENF_WB, verifies the Core header and vanilla MissionSystems, and reaches `phase 0 -> 1` without the earlier guard-spawn crash being captured. It remains a failed run: vanilla splash `SCR_WidgetExportRuleRoot` errors persist and the local player's identity cannot be bound, so spawning is withheld. Preserve identity validation while diagnosing the offline launch/admission path. This is partial startup evidence, not clean startup or a playable session. [Runner details](ordinary-game-startup.md). -2. **Qualify casualty loading beyond the local success.** [075514](evidence/native-2026-09-19-075514/report.json) passes the complete local service fixture with no native errors: naturally settled helicopter, actual incapacitation, completion-time authorization, external reservations, blocked sight, one owner-handshake load into the selected bench, identity retention and cleanup. Earlier parked-contact and fixture-damage failures remain archived. [Stock removal fixture](evidence/native-2026-09-19-080058/report.json) also verifies the inherited door action clears the bench and leaves a living incapacitated body beside its authored exit. Real action input, remote ownership/RPC timing, competing rescuers, disconnect/death during a pending load and entity-deletion cleanup still need their own tests. [Casualty service](casualty-loading.md), [support investigation](casualty-ground-support.md). -3. **Rerun the current integrated base and companions.** Guard cancellation and replicated radio feedback have clean evidence from [two complete Core rounds](evidence/native-2026-09-19-073806/report.json); the later placement/casualty changes now have a focused local pass. A full current-source escape/restart regression must still exercise those changes together with discovery/task presentation, ordinary victory, early aircraft loss, death and abandonment. Keep failed iterations and source/log provenance; do not substitute earlier clean snapshots. +1. **Finish current-source regressions and investigate restart cleanup.** The companion loop reaches both victories but emits two `SCR_BaseResupplySupportStationComponent` catalog errors between rounds. Preserve that failure and obtain the existing bounded teardown diagnostics before deciding whether a scoped lifecycle correction is warranted. Current Core regression must include the new standalone helper; focused callback replay/fail-closed probing is now implemented and awaits native execution. +2. **Close physical support gaps.** A report ledger now prevents a cancelled/completed observation from repeatedly allocating mortar orders. A new expiry fixture and its native run must verify this while HQ remains active. Aircraft support needs a newly written flight driver: the extension inherited its flight base from original Escapists, so a namespace-only migration is insufficient. Installed native pilot input APIs have been identified; powered flight, actual fuel use and safe landing remain feasibility work. Logistics and rearming must retain finite physical stocks and losses. +3. **Qualify the ordinary playable route.** Check gate/equipment access, medical actions, finding the radio without fixture knowledge, defend/recover behavior, ground travel, real boarding/piloting/navigation and partial escape. Review authored layout and finite supplies from actual play. Preserve vanilla unconscious recovery and explicit administrator abandonment. +4. **Establish genuine multiplayer evidence.** The private dedicated runtime is installed and native empty-server startup is demonstrated. Real accepted client identities, joins/reconnects, remote ownership and replication remain outstanding; local bodies/callback injections are not substitutes. -4. **Play the complete route with ordinary input.** Validate prison gate/equipment access, scavenging and medical interactions, finding the radio without fixture knowledge, defend/recover behavior, ground-vehicle route, manual helicopter boarding/takeoff/navigation and partial escape. Tune the authored layout and finite supplies from actual play. The implemented all-incapacitated policy is preserved vanilla recovery plus explicit administrator abandonment; no automatic recovery is promised. -5. **Finish and qualify physical HQ support.** Infantry observation/report/order paths and patrol integration exist. Operational mortar firing, aircraft support, transport/rearming and depot/logistics behavior remain incomplete. Preserve a single HQ coordinator, radio-delivered reports, finite physical forces/ammunition and loss retention; cover interrupted reports, stale contacts and duplicate-order prevention. The [responsibility inventory](original-feature-coverage.md) remains a scope map, not behavioral proof. +## First-release qualification -## First-release qualification still required +Cover simultaneous/late joins in each phase, preload cancellation, reconnect and connection-ID reuse, reserved bodies, spent lives, death/unconsciousness/treatment, spectators and streaming cleanup. Verify remote task/map/radio/result updates, settings authorization, seat contention, partial escape, empty-server behavior, defeat and repeated restart with up to twelve connected players. -Establish a dedicated-server test environment and real clients, then cover concurrent/late joins in each phase, preload cancellation, reconnect and connection-ID reuse, reserved bodies, spent lives, death/unconsciousness/treatment, spectators and streaming cleanup. Verify remote task/map/radio/result updates, settings authorization, seat contention, partial escape, empty-server behavior, defeat and repeated restart with up to twelve connected players. Local fixtures narrow these risks but do not close them. +Collect matched original/successor workloads with repeated client-frame and server-tick measurements. No FPS improvement is demonstrated; the [comparison tool](performance-comparison.md) currently has synthetic regression evidence only. Complete provenance/dependency review, build/test the package under successor identities and satisfy the [release checker](release-qualification.md) with applicable source-bound evidence. No release package is published. -Collect real matched original/successor workloads with repeated client-frame and server-tick recordings. No FPS improvement has been demonstrated; the [comparison tool](performance-comparison.md) currently has synthetic regression evidence only. - -Finally complete provenance/dependency review, build and test the package under the successor's own identities, and satisfy the [release checker](release-qualification.md) with current source-bound evidence. No release package has been published. RHS, additional terrains, complete original parity, alternate starts and distant-unit simulation remain later scope. - -Older audits such as [base gameplay gaps](base-gameplay-gaps.md) preserve findings made before subsequent implementations. Read their update notes and linked native evidence before treating an old missing-feature statement as a current defect. This status page consolidates priorities; the evidence ledger remains authoritative for individual recorded checks. +Original mission sources remain read-only. Hidden test displays, private profiles/prefixes and muted test audio keep engine work off the user's monitors. RHS, additional terrains, full original feature parity, alternate starts and distant-unit simulation remain later scope. Historical audits and evidence describe their own snapshots; the [validation ledger](validation.md) records both failures and subsequent fixes. diff --git a/docs/dedicated-native-diagnostic.md b/docs/dedicated-native-diagnostic.md new file mode 100644 index 0000000..0ec7cea --- /dev/null +++ b/docs/dedicated-native-diagnostic.md @@ -0,0 +1,51 @@ +# Isolated native Linux dedicated startup diagnostic + +The stable Linux `ArmaReforgerServer` successfully compiled the frozen successor Core game scripts, loaded its scenario header and native MissionSystems, and reached prison phase during the 2026-09-19 08:32:13 local diagnostic. This establishes server compilation and empty-server mission preparation. It does **not** establish multiplayer, authentication, client replication, ordinary input, graceful shutdown, comparative performance or release readiness. Four native installed-asset resource errors remain; this was not an entirely error-free run. + +## Safe diagnostic route + +The official [startup parameter documentation](https://community.bistudio.com/wiki/Arma_Reforger%3AStartup_Parameters) documents `-server` with local `-addons`/`-addonsDir`, separately from `-config`. It describes `-worldSystemsConfig` as diagnostic-executable only. Installed `GameStateTransitions.RequestScenarioChangeTransition` accepts either a mission header or world resource. The bounded experiment confirmed that this regular dedicated executable also accepts the successor `.conf` header as the `-server` value; no special header flag or JSON configuration was necessary. + +`tools/dedicated_native.py` is exclusively a disconnected diagnostic launcher. Its immutable command selections cannot add a JSON configuration, clients, credentials, public hosting, Workshop downloads or validation-disabling options. The native local-server route nevertheless logged **`0.0.0.0:2001, fastValidation=false`**, despite CLI bind hints. These are native local-test defaults, not safe hosting configuration. Never remove the mandatory namespace isolation or repurpose this command for public/authenticated hosting. The separate review-only dedicated preflight plan retains its own `fastValidation=true` and BattlEye configuration; this experiment does not validate that configuration route. + +The runner masks host home, `/tmp` and `/run`, clears inherited environment, mounts host root and runtime read-only, and exposes only private source/profile/home/temp paths for engine writes. Networking, PID, IPC and UTS namespaces are isolated. A native namespace-aware Python probe requires a different network namespace, only `lo`, no IPv4 routes and no non-loopback IPv6 route. It runs both before launch and immediately before `exec`; any failure prevents server launch. Reading `/sys/class/net` alone is insufficient because a read-only host sysfs mount can show host interfaces even inside a separate network namespace. + +Each run owns a new process group and private PID namespace. It records the exact command, binary hash, source manifest before/after, raw stdout and native logs; its timeout terminates only that owned group. Runtime can be bounded to 1–110 seconds, followed by at most ten seconds cleanup. A lock prevents concurrent instances of this diagnostic. Backend is explicitly disabled and the network namespace independently prevents external traffic. No displays, audio server sockets, Steam account profile or original missions are exposed for writes. + +Example after reviewing the source and installed private runtime: + +```sh +python3 tools/dedicated_native.py \ + --source /tmp/frozen-successor \ + --runtime /tmp/erri-dedicated-runtime/server \ + --archive /tmp/erri-dedicated-attempt-new \ + --route header --seconds 90 +``` + +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 + +[Development archive](evidence/dedicated-2026-09-19-083213/review.json). Native log: `profile/logs/logs_2026-09-19_08-32-13/console.log`. The engine ran unmodified copied sources: 277 source/resource/document/tool files, all unchanged after the run. Binary SHA-256: `91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f` (stable server app 1874900, private installed public payload). + +Evidence from the native log: + +- Line 61: backend services disabled. +- Line 94: game successfully created after native Game compilation; no `SCRIPT (E)` entries captured. +- Line 100: native SaveGameManager starts `{AD62322D5213C440}Missions/ERR_Everon_Base.conf`. +- Line 109: native world systems initialize `{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf`. +- Line 157: native RPL server starts inside the isolated namespace, with the local-test defaults described above. +- Line 307: successor transitions from preparation phase 0 to prison phase 1. +- Subsequent native statistics report zero players and 36 physical AI characters. The capped empty-server FPS is not a comparative performance benchmark. + +The four captured `(E)` lines concern vanilla editor-helper resources: `TransparentMat.emat` referenced from installed Calvary content, `Gizmo3D/sphere.xob` referenced from installed `Blast_small_Invisible_Trigger.et`, and the resulting material-not-found/default-material pair. Raw surrounding resource stacks remain in the archive. No assets/errors were suppressed or replaced. Core preparation nevertheless completed; whether these packed-runtime resource errors affect any visible or released use still requires investigation. + +The 90-second deadline ended via supervisor SIGTERM (`exit=-15`), not native mission-completion shutdown. A separate read-only host check confirmed the owned supervisor absent and no remaining `ArmaReforgerServer` executable process. The source manifest did not change. No real participant joined and no direct scripted `RplSession.Mode` observation was added to this frozen-source run. + +Earlier failed isolation checks are preserved. The sandbox-local network namespace attempt returned NETLINK permission denied before any engine; the host namespace-only verification succeeded. Attempt 01 then failed before engine launch because a new mount destination could not be created under read-only root. Attempt 02 corrected destinations beneath private `/tmp`; both its preflight and immediate pre-exec probe passed. No isolation check was bypassed. + +## 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. + +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). diff --git a/docs/dedicated-preparation.md b/docs/dedicated-preparation.md new file mode 100644 index 0000000..1a81a2c --- /dev/null +++ b/docs/dedicated-preparation.md @@ -0,0 +1,34 @@ +# Private dedicated-server preparation + +`tools/dedicated_preflight.py` inspects files and prepares a reviewable configuration/evidence plan. It never installs software, executes the server, starts a listener, authenticates a player or changes Steam/Wine state. A zero exit status means inspection succeeded, not that runtime or multiplayer acceptance passed. Every plan explicitly keeps `launch_allowed` and `multiplayer_passed` false. + +The intended runtime is stable native Linux Arma Reforger Server, Steam app **1874900**, in `/tmp/erri-dedicated-runtime/server`. Stable client/Tools apps 1874880/1874910 are already installed separately. Experimental apps and server 1890870 are not substitutes: the official [hosting guide](https://community.bistudio.com/wiki/Arma_Reforger:Server_Hosting) distinguishes the branches and documents anonymous SteamCMD installation of the Linux server. Server and client Steam build IDs belong to different apps and need not equal; compare actual engine versions before native tests. + +The private preparation downloaded Valve's SteamCMD bootstrap from `https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz`, the installer address used by the official [SteamCMD documentation](https://developer.valvesoftware.com/wiki/SteamCMD). The direct documentation fetch returned HTTP403 during this audit; the Bohemia hosting guide was available. Runtime provenance is in `runtime-origin.json`, and raw SteamCMD app-info/install logs stay outside Git alongside the runtime. + +SteamCMD ran anonymously inside a bubblewrap filesystem sandbox: original home was masked by `private-home`, `/tmp` and `/run` were private, the host root was read-only and only the private runtime was writable. Its displayed `/home/jakub/Steam/logs` path referred to that masked private home, not the user's Steam data. No environment HOME value, installed Steam app, shared Wine prefix, original mission or global package was changed. SteamCMD can update its own private installation. The payload remains outside the successor repository and should not be committed. `/tmp` is tmpfs on this host; inspect both free space and available RAM before allocating another copy. + +To inspect without writing: + +```sh +python3 tools/dedicated_preflight.py --source /home/jakub/devel/escapistsrereintroduced --runtime /tmp/erri-dedicated-runtime --project core +``` + +To write a new review bundle, add `--write-plan /tmp/erri-dedicated-runtime/review-core`. It must be a new direct child of the marked private runtime; existing evidence is never overwritten. The bundle contains: + +- `preflight.json`: exact selected addon/header/world/systems, binary/app manifest metadata, limitations and required evidence. +- `server-config.review.json`: loopback-only game bind/public address, two-player capacity, no public listing, unchanged native fast validation/BattlEye, crash reporting disabled; no configured RCON or A2S. +- `source-manifest.json`: exact authored source/resource hashes, with its file SHA-256 bound in the preflight report. +- `REVIEW.txt`: explicit no-launch status and remaining prerequisites. + +The configuration is a review draft, not a ready launcher. The official [server configuration](https://community.bistudio.com/wiki/Arma_Reforger:Server_Config) uses `game.scenarioId`; unpublished local-addon selection/authenticated configuration compatibility still needs verification. The documented local-mod `-server` route and `-config` route must not be combined blindly: the installed startup code reports `-config cannot be used together with addons!`. The plan records the local addon directory and selected GUID separately and leaves `game.mods` empty rather than inventing Workshop revisions. It does not publish addons or trigger Workshop downloads. Native header/MissionSystems loading must be verified for whichever reviewed route is chosen. + +A real multiplayer run needs two genuine accepted player identities and two native client controllers. Two copied profiles, two actor entities, two fake connection IDs or two clients sharing one account do not establish this. The current ordinary runner deliberately refuses any existing game process; a separate multi-process supervisor would need explicit ownership of all its children and separate prefixes, profiles, headless displays and audio routing while continuing to protect unrelated games. A second licensed/authenticated client on another machine avoids local account/runtime contention. Loopback-only preparation cannot serve that second machine until an explicitly reviewed LAN configuration exists. + +Eight synthetic-file regressions cover missing/wrong/linked runtime binaries, stable-app selection, actual ELF architecture, strict loopback configuration, header/source bindings, immutable evidence outputs and no process execution. Native library compatibility, engine startup, player authentication, replication and FPS remain separate tests. + +## Installation observed on 2026-09-19 + +Anonymous installation completed with SteamCMD exit 0 and its successful-install marker. App 1874900 is fully installed (`StateFlags=4`), public build **24870635**, with shared depot 1874901 manifest 8361215099969594635 and Linux depot 1874902 manifest 3259094621086219309. Installed payload is **10,278,170,614 bytes**. The server is an executable x86-64 ELF; its exact NUL-terminated version strings include **1.8.0.13**. Passive `readelf` inspection found the interpreter and all seven declared native libraries in the host library cache. This is file-level compatibility evidence, not executed-server validation. + +`/tmp/erri-dedicated-runtime/installation-inspection.json` binds the bootstrap, app-info log, installation log, app manifest and server binary with SHA-256. The completed Core review bundle is `/tmp/erri-dedicated-runtime/review-core`; its source snapshot is the repository state at bundle creation, and must be recaptured after later source changes. No server/listener was launched during that preparation step. Subsequent [isolated native diagnostics](dedicated-native-diagnostic.md) established regular-server header loading and empty-server preparation; authentication and multiplayer behavior remain untested. diff --git a/docs/dedicated-resource-audit.md b/docs/dedicated-resource-audit.md new file mode 100644 index 0000000..ea87e51 --- /dev/null +++ b/docs/dedicated-resource-audit.md @@ -0,0 +1,41 @@ +# Dedicated resource error diagnosis + +The four error lines from the first successor Linux dedicated startup have two missing-resource causes in installed vanilla prefabs. No corresponding successor-authored helper entity or direct reference was found. A minimal successor gameplay patch is not justified by the source evidence: it would require changing inherited terrain content, replacing normal particle definitions or shadowing vanilla identities. + +## Exact installed references + +The read-only extraction uses the installed stable server's `addons/data/data002.pak`, not original Escapists content: + +| Native error | Installed source evidence | Successor relationship | +| --- | --- | --- | +| Wrong GUID/name for `TransparentMat.emat` | `Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et:8`, `MeshObject` material assignment for `SourceMaterial "Decal"` refers to `{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat`. | Successor `Worlds/ERR_Everon.ent:2` inherits installed `worlds/Eden/Eden.ent`. Native stack identifies inherited Calvary entity 1104061 at approximately 8831/2673, outside the authored escape route. | +| Material file missing and default-material fallback | The same inherited Calvary's native creation subsequently requests that same missing material. | These are the third and fourth error messages for the first missing resource, not two independent successor defects. | +| Wrong GUID/name for `Gizmo3D/sphere.xob` | `Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et:4–6` has a `MeshObject` with `Enabled 0`, but still sets `Object` to `{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob`. | Installed vehicle/helicopter explosions, rotor destruction, grenade effects and mortar effects reference this particle contact trigger. The native log observes resource preloading, not creation of an authored visible editor sphere. | + +The disabled mesh is paired with a real `SCR_ParticleContactComponent` configured for BLAST effects at lines 8–13. Removing the entire trigger would remove intended particle-contact behavior. A disabled mesh property does not prevent the resource resolver from validating its reference, as the actual native error demonstrates. + +The installed particle scan found direct trigger references in `Particles/Vehicle/Helicopter/Helicopter_Explosion.ptc:1059`, `Helicopter_MI8_rotor_destruction.ptc:1394`, `Particles/Vehicle/Vehicle_explosion_small_01.ptc:914`, `Particles/Weapon/Explosion_RGD5.ptc:180` and `Particles/Weapon/Muzzle_Mortar.ptc:292`, among others. The source scan does not establish which one caused the first shared preload; the native stack names only the shared trigger. + +All seven installed server PAK indices were searched. Neither `system/wbdata/PreviewWindow/TransparentMat.emat` nor `system/wbdata/Gizmo3D/sphere.xob` is present. Both referenced prefab files themselves are present with exact source hashes in the audit. Thus this is a packaged-runtime dependency mismatch, not merely a guessed wrong material name. + +## Successor audit boundary + +A scan of 133 frozen addon text files (`.c`, `.ent`, `.layer`, `.et`, `.conf`, `.layout`, `.emat`, `.gproj`) found no direct `system/wbdata`, Calvary, shared blast-trigger or affected GUID reference. The authored Everon layer has only seven top-level mission services: game mode, AI world, perception, factions, loadouts, radio manager and chat. Dynamic successor compositions are not implicated by the direct reference scan. Parent-world and vanilla prefab inheritance remain intentional. + +The frozen sources and native log already prove these exact references are vanilla. The separate no-successor native control reproduced the same errors in the installed Everon Game Master scenario. This distinction matters: merely identifying a vanilla parent does not prove that a particular successor request could not have exposed a previously unused path. + +Scan metadata is archived in [the resource audit](evidence/dedicated-resource-audit/installed-reference-scan.json). Extracted vendor assets remain outside Git under `/tmp/erri-dedicated-native-build/resource-audit`: read-only extracted source, `installed-reference-scan.json`, `authored-source-audit.json`, and the scanner. Raw first-run errors remain untouched in `attempt-02-header/profile/logs/logs_2026-09-19_08-32-13/console.log`. Copied vendor assets are evidence only and are not successor release resources. + +## Repair decision + +No gameplay/resource patch is made. Do not delete inherited Calvaries, replace broad explosion graphs, reassign vanilla GUIDs, add Workbench as a production dependency or suppress resource errors to obtain a clean-looking result. An upstream corrected runtime asset reference would address the common cause. If a future scoped compatibility replacement is necessary, it needs separate ownership/resource design and visual/particle validation; it is not an implied harmless fix from these logs. + +## Vanilla control result + +[The vanilla control log](evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/console.log) records the regular Linux dedicated executable with no `-addons` or `-addonsDir`. Lines 29–31 list only native core `5614BBCCBB55ED1C` and ArmaReforger `58D0FB3206B6F859`; no successor project is loaded. Line 86 resolves installed `Missions/21_GM_Eden.conf` to header GUID `59AD59368755F41A`. Line 98 initializes its authored `GameMasterSystems.conf`. This control uses the vanilla scenario's systems, not successor MissionSystems. + +The same missing material and sphere references reproduce at lines 92 and 95, with the same Calvary and blast-trigger prefab stacks. Lines 120–121 reproduce the material-not-found/default-material pair. Native mode enters GAME with zero players. The control also logs additional vanilla vehicle-property and empty-resource errors; those remain in the complete raw log and are not claimed to be successor errors or an entirely clean control. + +The enumerated `vanilla-everon` route in the disconnected runner uses only `-server Missions/21_GM_Eden.conf` alongside the normal private profile/backend-disabled/native diagnostic options. It does not change JSON hosting, enable networking, override world systems or load successor source. Both preflight and immediate pre-exec namespace checks remain mandatory. Four source-local launcher tests pass, including rejection of network escape conditions and ensuring the vanilla control has no successor-loading arguments. + +The control reached its 90-second supervision deadline and exited via owned-group SIGTERM. The follow-up host check found no owned supervisor or native server process remaining. The archived source-copy manifest was unchanged. All 21 control `(E)` lines are retained; four match the original two missing-resource causes exactly. diff --git a/docs/discovery-map-usability.md b/docs/discovery-map-usability.md new file mode 100644 index 0000000..fe06881 --- /dev/null +++ b/docs/discovery-map-usability.md @@ -0,0 +1,15 @@ +# Discovery markers during ordinary play + +`ERR_DiscoveryMap.c` now creates successor-owned objective markers with their label already set, refreshes the existing native text widget when knowledge changes, and prevents native annotation editing/dragging/deletion from altering objective facts. Discovery knowledge and location coordinates remain server-owned; local marker presentation adds no synchronization or mission progress authority. + +The installed native implementation establishes the defects: + +- `SCR_MapMarkerManagerComponent.InsertStaticMarker:169–175` assigns a local player owner and synchronously calls `OnCreateMarker`. +- `SCR_MapMarkerBase.SetCustomText:198–201` changes only stored data. `OnCreateMarker:344–378` initializes a widget from that data; `OnUpdate:409–431` updates position, not label text. Previously a map already open during discovery could show a blank newly-created marker or retain `Unknown location` after identification until reopening. +- `SCR_MapMarkersUI.IsOwnedMarker:114–123` controls editing and dragging at lines 1080,1287,1303. Its deletion entry and quickbind check `CanBeRemovedByOwner` at lines947,1049. Previously objective markers passed all these native checks, so a player could remove a discovery marker permanently or move it to a false coordinate; the successor's cached knowledge prevented restoration. + +The new `ERR_DiscoveryMarker` subclass changes only these authored local markers. It clears the insertion-assigned owner at the native creation boundary and marks itself nonremovable. Its label is scenario-authored rather than a player annotation, so its own creation and label updates use the native synchronous text path; unrelated player marker filtering and behavior remain unchanged. Label updates while closed retain model data for native recreation without creating duplicate markers. + +`ERR_NativeDiscoveryMapProbe.Run()` is an opt-in WORKBENCH check, to invoke once after a real local fixture participant and native marker manager exist. It creates two owned hidden native marker widgets: the unchanged vanilla marker demonstrates the stale text and user-annotation eligibility; the successor marker demonstrates immediate label refresh and protected ownership. It then detaches/recreates its own widget and checks retained text and exact marker-count cleanup. No mission locations, discovery state, inventories, map menus or player input are altered. Invoke `Stop()` from fixture cleanup if interrupted. The probe has not been run by this agent; native compilation and the actual result remain pending centrally. `python3 tools/check.py` passed after these changes. + +The audit also inspected native prison gate inheritance/context, stock `SCR_OpenStorageAction`, radio tuning phase/knowledge checks and native helicopter/result presentation. Source alone does not establish held-input reachability, collision clearance while walking through the gate, dragging stock in a real inventory window or manual boarding/flying. These remain ordinary-play tests; direct completion fixtures cannot substitute for them. A separate inherited-gate destruction/progression vulnerability was reported for follow-up, without changing gate health in this marker patch. diff --git a/docs/evidence/2026-09-19-mortar-first-shot/console.log.txt b/docs/evidence/2026-09-19-mortar-first-shot/console.log.txt new file mode 100644 index 0000000..e4128a1 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/console.log.txt @@ -0,0 +1,636 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-33-52\console.log started at 2026-09-19 08:33:52 (2026-09-19 06:33:52 UTC) + +08:33:52.277 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-33-52' to filesystem under name logs +08:33:52.277 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:33:52.277 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:33:52.279 PROFILING : Workbench Create Engine took: 10.057300 ms +08:33:53.325 INIT : INIT : Workbench Init Engine +08:33:53.325 ENGINE : Initializing engine, version 192142 +08:33:53.325 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 mortar-fire -noThrow -disableCrashReporter +08:33:53.335 ENGINE : Addon dirs: +08:33:53.335 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +08:33:53.335 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:33:53.335 ENGINE : dir: './addons' +08:33:53.335 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:33:53.335 ENGINE : Available addons: +08:33:53.335 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:33:53.335 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:33:53.335 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:33:53.335 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:33:53.335 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:33:53.335 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:33:53.335 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:33:53.335 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:33:53.335 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:33:53.336 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:33:53.336 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:33:53.336 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:33:53.451 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:33:53.454 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:33:53.454 ENGINE : CPU vendor : AuthenticAMD +08:33:53.454 ENGINE : CPU type : 2 +08:33:53.454 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:33:53.454 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:33:53.454 ENGINE : CPU count logical : 16 +08:33:53.454 ENGINE : CPU count physical : 8 +08:33:53.454 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:33:53.454 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:33:53.454 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:33:53.455 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:33:53.455 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:33:53.455 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:33:53.456 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:33:53.588 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:33:53.589 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:33:53.589 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-33-52/resourceDatabase.rdb) +08:33:53.745 RESOURCES : RESOURCES : ResourceDB: full scan +08:33:53.749 RESOURCES : RESOURCES : scanning... +08:33:53.749 RESOURCES : RESOURCES : scanning @"ERR_Chat" +08:33:53.751 RESOURCES : RESOURCES : scanning @"ERR_Map" +08:33:53.753 RESOURCES : RESOURCES : scanning @"ERR_Intel" +08:33:53.753 RESOURCES : RESOURCES : scanning @"ERR_Ai" +08:33:53.754 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:33:53.759 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:33:53.906 RESOURCES : RESOURCES : scanning @"core" +08:33:53.910 RESOURCES : RESOURCES : scanning @"profile" +08:33:53.911 RESOURCES : RESOURCES : scanning @"logs" +08:33:53.911 RESOURCES : RESOURCES : processing meta-files... +08:33:53.973 RESOURCES : RESOURCES : processing files... +08:33:53.984 INIT : Workbench startup +08:33:53.984 INIT : Workbench Init Engine +08:33:53.984 RESOURCES : ResourceDB: full scan +08:33:53.984 RESOURCES : processing files... +08:33:53.984 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:33:53.984 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:33:53.984 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:33:53.984 RESOURCES : RESOURCES : processing folders... +08:33:53.990 RESOURCES : RESOURCES : creating GUID-item mapping... +08:33:54.006 RESOURCES : RESOURCES : building tree... +08:33:54.056 PROFILING : ResourceDB: full scan took: 311.260500 ms +08:33:54.057 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:33:54.059 RESOURCES : ResourceDB: written 741/741 bytes +08:33:54.059 RESOURCES : ResourceDB: cache successfully saved +08:33:54.059 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:33:54.060 RESOURCES : ResourceDB: written 750/750 bytes +08:33:54.060 RESOURCES : ResourceDB: cache successfully saved +08:33:54.060 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:33:54.062 RESOURCES : ResourceDB: written 227/227 bytes +08:33:54.062 RESOURCES : ResourceDB: cache successfully saved +08:33:54.062 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:33:54.063 RESOURCES : ResourceDB: written 1356/1356 bytes +08:33:54.063 RESOURCES : ResourceDB: cache successfully saved +08:33:54.064 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:33:54.065 RESOURCES : ResourceDB: written 6203/6203 bytes +08:33:54.065 RESOURCES : ResourceDB: cache successfully saved +08:33:54.065 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:33:54.067 RESOURCES : ResourceDB: written 206/206 bytes +08:33:54.067 RESOURCES : ResourceDB: cache successfully saved +08:33:54.067 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-33-52/resourceDatabase.rdb) +08:33:54.069 RESOURCES : ResourceDB: written 162/162 bytes +08:33:54.069 RESOURCES : ResourceDB: cache successfully saved +08:33:54.069 ENGINE : GameProject load +08:33:54.069 ENGINE : Loaded addons: +08:33:54.069 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:33:54.069 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:33:54.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:33:54.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:33:54.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:33:54.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:33:54.069 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:33:54.071 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:33:54.071 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:33:54.071 ENGINE : Engine user settings config loaded +08:33:54.071 PROFILING : Settings changed took: 0.001700 ms +08:33:54.176 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:33:54.178 RENDER : Basic screen setup: +08:33:54.178 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:33:54.178 RENDER : MSAA : none +08:33:54.191 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:33:54.191 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:33:54.191 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:33:54.191 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:33:54.191 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:33:54.191 RENDER : AMD AGS correctly initialized +08:33:54.191 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 +08:33:54.191 RENDER : Detected output devices: +08:33:54.191 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:33:54.191 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:33:54.191 RENDER : Concurrent frames limit 2 +08:33:54.267 RENDER : DX12 device successfully created by AMD AGS library +08:33:54.267 RENDER : * user markers not supported in this version AMD SW +08:33:54.267 RENDER : Graphics device features +08:33:54.267 RENDER : Needed: +08:33:54.267 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:33:54.267 RENDER : Optional: +08:33:54.267 RENDER : * Allow tearing (VSYNC) : 1 +08:33:54.267 RENDER : * 16 bits : 1 +08:33:54.267 RENDER : * Resource heap tier : 3 +08:33:54.267 RENDER : * Persistent heaps (DRED) : 1 +08:33:54.267 RENDER : * DRED 1.2 is supported by compiler +08:33:54.290 RENDER : Main RT format setup. +08:33:54.290 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:33:54.290 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:33:54.292 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:33:54.321 PROFILING : Settings changed took: 0.016100 ms +08:33:54.866 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:33:54.866 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:33:54.866 AUDIO : Audio client: +08:33:54.866 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:33:54.870 RENDER : RENDER : Reload shaders +08:33:54.870 RENDER : Enfusion shader version 13 +08:33:54.870 INIT : INIT : ShaderListReload +08:33:54.870 PROFILING : ShaderListReload took: 0.000400 ms +08:33:55.009 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:33:55.009 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:33:55.009 AUDIO : Audio client: +08:33:55.009 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:33:55.229 RENDER : Loaded 3752 newer shader binaries +08:33:55.229 PROFILING : Reload shaders took: 359.116800 ms +08:33:55.229 ENGINE : Initializing inputs. +08:33:55.241 NETWORK : Initializing networking. +08:33:55.241 NETWORK : Using new GameRplScheduler. +08:33:55.241 SCRIPT : SCRIPT : Initializing scripts +08:33:55.242 SCRIPT : SCRIPT : ScriptProjectManager init +08:33:57.366 PROFILING : ScriptProjectManager init took: 2123.952000 ms +08:33:57.449 PROFILING : Initializing scripts took: 2207.344500 ms +08:33:57.466 ENGINE : Enfusion engine successfully created. +08:33:57.466 PROFILING : Workbench Init Engine took: 4140.769900 ms +08:33:57.466 INIT : INIT : Workbench Create Game +08:33:57.478 GUI : Using default language (en_us) +08:33:57.478 GUI : Loading 'en_us' localization file. +08:33:57.478 INIT : INIT : Loading StringTable +08:33:57.504 PROFILING : Loading StringTable took: 26.700800 ms +08:33:57.504 SCRIPT : SCRIPT : Compiling GameLib scripts +08:33:57.574 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 +08:33:57.574 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 +08:33:57.575 PROFILING : Compiling GameLib scripts took: 70.223300 ms +08:33:57.575 SCRIPT : SCRIPT : Compiling Game scripts +08:33:58.882 INIT : Workbench Create Game +08:33:58.882 SCRIPT : Compiling Game scripts +08:33:58.882 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:33:58.882 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:33:59.018 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.153 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:33:59.185 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:33:59.322 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:33:59.383 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:33:59.383 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:33:59.388 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:33:59.427 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.427 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.428 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:33:59.428 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:33:59.455 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.488 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:33:59.750 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: e963af0e +08:33:59.756 SCRIPT : Module: Game; loaded 5759x files; 11304x classes; used 33167K 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: 38d29813 +08:33:59.794 PROFILING : Compiling Game scripts took: 2219.106800 ms +08:33:59.800 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:33:59.840 ENGINE : Game successfully created. +08:33:59.841 PROFILING : Workbench Create Game took: 2374.873600 ms +08:33:59.851 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +08:34:00.698 INIT : INIT : Workbench Reload Game +08:34:00.700 ENGINE : Game destroyed. +08:34:00.707 GUI : Using default language (en_us) +08:34:00.707 GUI : Loading 'en_us' localization file. +08:34:00.707 INIT : INIT : Loading StringTable +08:34:00.717 PROFILING : Loading StringTable took: 9.608100 ms +08:34:00.717 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:34:00.724 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:34:00.724 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:34:00.724 ENGINE : Game successfully created. +08:34:00.724 ENGINE : Game successfully initialized. +08:34:00.724 PROFILING : Workbench Reload Game took: 26.331400 ms +08:34:01.444 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:34:02.435 PROFILING : Entities load took: 991.315100 ms +08:34:02.446 WORLD : WORLD : CreateEntities +08:34:02.451 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:34:02.451 PROFILING : NotifyBeforeEntitiesCreated took: 0.003600 ms +08:34:02.451 WORLD : WORLD : Wait for preloading data +08:34:02.451 PROFILING : Wait for preloading data took: 0.003200 ms +08:34:02.568 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:34:02.568 PROFILING : PROFILING : Terrain load +08:34:04.634 PROFILING : Terrain load took: 2065.424800 ms +08:34:08.606 WORLD : CreateEntities +08:34:08.606 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" +08:34:08.606 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:34:08.606 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:34:19.257 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:34:19.257 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005100 ms +08:34:19.713 WORLD : WORLD : NotifyEntitiesInitialized +08:34:19.713 TERRAIN : TERRAIN : Initializing road networks... +08:34:19.716 PROFILING : Initializing road networks... took: 2.551600 ms +08:34:19.716 PROFILING : NotifyEntitiesInitialized took: 2.959900 ms +08:34:19.716 PROFILING : CreateEntities took: 17269.857300 ms +08:34:19.899 PROFILING : * WorldEditor: LoadWorld: 18461.046300 ms +08:34:21.405 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:34:21.406 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:34:21.407 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:34:21.408 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:34:21.496 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:34:21.499 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:34:21.520 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:34:21.542 BACKEND : Attempting online Game Config instead. +08:34:24.850 INIT : INIT : Workbench Reload Game +08:34:24.852 ENGINE : Game destroyed. +08:34:24.859 GUI : Using default language (en_us) +08:34:24.859 GUI : Loading 'en_us' localization file. +08:34:24.859 INIT : INIT : Loading StringTable +08:34:24.879 PROFILING : Loading StringTable took: 19.364600 ms +08:34:24.879 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:34:24.887 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:34:24.887 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:34:24.887 ENGINE : Game successfully created. +08:34:24.887 ENGINE : Game successfully initialized. +08:34:24.887 PROFILING : Workbench Reload Game took: 37.287900 ms +08:34:24.890 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:34:24.944 PLATFORM : Save data from container 'settings' have been loaded +08:34:25.032 PLATFORM : Save data from container 'sessions' have been loaded +08:34:25.033 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:34:25.033 ENGINE : Game user settings config loaded +08:34:25.130 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:34:25.138 WORLD : WORLD : Game::LoadEntities +08:34:25.138 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:34:25.139 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:34:25.139 WORLD : WORLD : CreateEntities +08:34:25.139 WORLD : WORLD : CreateEntities +08:34:25.139 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:34:25.151 RESOURCES : Loaded mission headers from 7 addon(s)! +08:34:25.151 PROFILING : NotifyBeforeEntitiesCreated took: 11.719800 ms +08:34:25.151 WORLD : WORLD : Wait for preloading data +08:34:25.151 PROFILING : Wait for preloading data took: 0.000900 ms +08:34:29.785 WORLD : Game::LoadEntities +08:34:29.786 WORLD : CreateEntities +08:34:29.786 WORLD : CreateEntities +08:34:29.786 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" +08:34:29.786 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:34:29.786 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:34:31.174 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:34:31.174 ENTITY : CreateComponent 'Hierarchy' +08:34:31.174 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>') +08:34:31.175 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:34:31.175 ENTITY : CreateComponent 'Hierarchy' +08:34:31.175 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>') +08:34:31.175 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:34:31.175 ENTITY : CreateComponent 'Hierarchy' +08:34:31.175 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>') +08:34:31.180 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:34:31.180 ENTITY : CreateComponent 'Hierarchy' +08:34:31.180 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>') +08:34:31.180 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:34:31.180 ENTITY : CreateComponent 'Hierarchy' +08:34:31.180 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>') +08:34:31.180 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:34:31.180 ENTITY : CreateComponent 'Hierarchy' +08:34:31.180 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>') +08:34:31.185 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:34:31.185 ENTITY : CreateComponent 'Hierarchy' +08:34:31.185 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>') +08:34:31.185 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:34:31.185 ENTITY : CreateComponent 'Hierarchy' +08:34:31.185 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>') +08:34:31.186 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:34:31.186 ENTITY : CreateComponent 'Hierarchy' +08:34:31.186 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>') +08:34:36.513 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:34:36.513 PROFILING : NotifyBeforeEntitiesInitialized took: 0.059000 ms +08:34:38.450 WORLD : InitEntities 'world' +08:34:38.450 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:34:38.450 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:34:38.474 WORLD : InitEntities 'world' +08:34:38.474 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:34:38.474 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:34:38.475 WORLD : WORLD : NotifyEntitiesInitialized +08:34:38.475 TERRAIN : TERRAIN : Initializing road networks... +08:34:38.477 PROFILING : Initializing road networks... took: 2.500100 ms +08:34:38.477 DEFAULT : DEFAULT : WorldVolumesCollection +08:34:38.533 PROFILING : WorldVolumesCollection took: 55.687900 ms +08:34:38.533 INIT : INIT : SoundWorldInit +08:34:38.546 PROFILING : SoundWorldInit took: 12.824400 ms +08:34:38.546 PROFILING : NotifyEntitiesInitialized took: 71.249000 ms +08:34:38.546 PROFILING : CreateEntities took: 13406.715800 ms +08:34:38.546 PROFILING : CreateEntities took: 13406.905500 ms +08:34:38.547 WORLD : WORLD : Wait for preloading data around camera +08:34:38.547 PROFILING : Wait for preloading data around camera took: 0.001500 ms +08:34:38.547 WORLD : WORLD : EOnActivate +08:34:38.580 PROFILING : EOnActivate took: 32.713400 ms +08:34:38.580 PROFILING : Game::LoadEntities took: 13441.853900 ms +08:34:38.903 DEFAULT : Entered offline game state. +08:34:39.006 NETWORK : Player connected: connectionID=2147483646 +08:34:39.007 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:34:39.007 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:34:39.012 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:34:39.012 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:34:39.012 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:34:39.013 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! +08:34:39.013 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! +08:34:39.015 SCRIPT (W): Can't open config file "" +08:34:39.022 WORLD : InitEntities 'world' +08:34:39.022 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:34:39.022 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:34:39.022 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:34:39.022 SCRIPT (W): Slot_Chat Has no Content! +08:34:39.023 SCRIPT (W): Slot_VON Has no Content! +08:34:39.023 SCRIPT (W): Slot_AvailableActions Has no Content! +08:34:39.023 SCRIPT (W): Slot_Vehicle Has no Content! +08:34:39.023 SCRIPT (W): Slot_GameVersion Has no Content! +08:34:39.023 SCRIPT (W): Slot_Notifications Has no Content! +08:34:39.023 SCRIPT (W): Slot_Hints Has no Content! +08:34:39.035 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:34:39.035 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:34:39.035 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:34:39.036 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. +08:34:39.036 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. +08:34:39.038 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:34:39.039 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:34:39.039 NETWORK : Players connecting: 0 +08:34:39.039 NETWORK : Players connected: 1 / 1 +08:34:39.068 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +08:34:39.069 PROFILING : Workbench startup took: 46854.562300 ms +08:34:39.093 WORLD : Frame start +08:34:39.093 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:34:39.107 WORLD : UpdateEntities +08:34:39.107 WORLD : Frame +08:34:39.107 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:34:39.281 WORLD : UpdateEntities +08:34:39.281 WORLD : PostFrame +08:34:39.281 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:34:39.281 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:34:39.326 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:34:39.326 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:34:39.326 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:34:39.326 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:34:39.470 RENDER : RENDER : ObjectsHeightMap::Build +08:34:39.471 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:34:39.631 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 160.071300 ms +08:34:39.638 PROFILING : ObjectsHeightMap::Build took: 167.372900 ms +08:34:40.811 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:34:40.836 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:34:40.837 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:34:40.868 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:34:40.870 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:34:40.931 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:34:40.931 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:34:40.939 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:34:40.992 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:34:40.993 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:34:40.995 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:34:40.995 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:34:40.999 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:34:41.001 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:34:41.001 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:34:41.002 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:34:41.002 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:34:41.002 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:34:41.003 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:34:41.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:34:41.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:34:41.003 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 +08:34:41.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:34:41.004 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:34:41.004 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 +08:34:41.004 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:34:41.004 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:34:41.004 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 +08:34:41.004 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.767 WORLD : UpdateEntities +08:34:41.768 WORLD : AfterPostSimulate +08:34:41.768 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:34:41.843 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:41.844 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:41.844 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:41.844 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:42.094 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5298,7499.7> up=0.99566 +08:34:42.094 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.314761 angularSpeed=0.054178 +08:34:42.094 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:42.095 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6151,7501.98> +08:34:42.095 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3151,7501.98> terrainY=63.3158 tireTerrainGap=-0.000720978 +08:34:42.095 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6151,7501.98> radius=0.3 bottom=<7012.06,63.3151,7501.98> fraction=0.451541 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000659943 +08:34:42.095 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6035,7497.71> +08:34:42.095 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1535,7497.71> terrainY=64.156 tireTerrainGap=-0.00251007 +08:34:42.096 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6035,7497.71> radius=0.45 bottom=<7009.88,64.1535,7497.71> fraction=0.443634 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00239563 +08:34:42.096 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2636,7497.75> +08:34:42.096 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8136,7497.75> terrainY=63.8176 tireTerrainGap=-0.00397873 +08:34:42.096 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2636,7497.75> radius=0.45 bottom=<7014.42,63.8136,7497.75> fraction=0.436389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00399399 +08:34:42.096 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:42.347 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:42.347 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:42.348 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:42.348 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:42.849 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:42.850 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:42.850 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:43.099 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5333,7499.72> up=0.994184 +08:34:43.100 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0956389 angularSpeed=0.0274173 +08:34:43.100 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:43.100 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6188,7501.99> +08:34:43.100 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3188,7501.99> terrainY=63.3138 tireTerrainGap=0.00501251 +08:34:43.100 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6188,7501.99> radius=0.3 bottom=<7012.06,63.3188,7501.99> fraction=0.477311 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0050087 +08:34:43.101 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6035,7497.72> +08:34:43.101 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1535,7497.72> terrainY=64.1496 tireTerrainGap=0.00389862 +08:34:43.101 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6035,7497.72> radius=0.45 bottom=<7009.92,64.1535,7497.72> fraction=0.472503 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00395203 +08:34:43.101 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2654,7497.79> +08:34:43.101 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8154,7497.79> terrainY=63.8152 tireTerrainGap=0.000133514 +08:34:43.101 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2654,7497.79> radius=0.45 bottom=<7014.46,63.8154,7497.79> fraction=0.455 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=9.91821e-05 +08:34:43.102 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:43.352 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:43.353 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:43.353 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:43.353 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.607 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:34:43.858 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.858 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.859 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.859 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:44.180 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5324,7499.74> up=0.993868 +08:34:44.181 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0420608 angularSpeed=0.0613614 +08:34:44.181 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:44.181 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6135,7502.01> +08:34:44.181 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3135,7502.01> terrainY=63.3116 tireTerrainGap=0.00194168 +08:34:44.181 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6135,7502.01> radius=0.3 bottom=<7012.07,63.3135,7502.01> fraction=0.463272 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00191879 +08:34:44.182 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5949,7497.72> +08:34:44.182 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1449,7497.72> terrainY=64.1435 tireTerrainGap=0.0014267 +08:34:44.182 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5949,7497.72> radius=0.45 bottom=<7009.96,64.1449,7497.72> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +08:34:44.182 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.26,7497.83> +08:34:44.182 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.81,7497.83> terrainY=63.8127 tireTerrainGap=-0.00266647 +08:34:44.183 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.26,7497.83> radius=0.45 bottom=<7014.5,63.81,7497.83> fraction=0.442222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00271225 +08:34:44.183 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:44.183 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.184 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.184 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.184 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.683 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:44.683 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:44.684 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:44.684 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:45.190 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5283,7499.74> up=0.993815 +08:34:45.190 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:34:45.191 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:45.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.01> +08:34:45.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.01> terrainY=63.3113 tireTerrainGap=0.00128174 +08:34:45.191 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.01> radius=0.3 bottom=<7012.07,63.3126,7502.01> fraction=0.46034 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00127411 +08:34:45.192 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:34:45.192 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1421 tireTerrainGap=0.00263214 +08:34:45.192 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.466891 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00271606 +08:34:45.192 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:34:45.193 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00181198 +08:34:45.193 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:34:45.193 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:45.193 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.194 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:45.194 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:45.194 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:45.696 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.697 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.697 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.697 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:46.198 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5283,7499.74> up=0.993815 +08:34:46.199 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:34:46.199 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:46.199 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.01> +08:34:46.199 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.01> terrainY=63.3113 tireTerrainGap=0.00128174 +08:34:46.199 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.01> radius=0.3 bottom=<7012.07,63.3126,7502.01> fraction=0.46034 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00127411 +08:34:46.200 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:34:46.200 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1421 tireTerrainGap=0.00263214 +08:34:46.200 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.466891 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00271606 +08:34:46.200 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:34:46.200 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00181198 +08:34:46.201 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:34:46.201 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:46.201 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:46.202 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:34:46.212 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:34:46.213 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:34:46.213 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:34:46.358 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:34:46.398 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:34:46.631 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:34:46.631 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:34:46.632 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:34:46.632 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:34:46.632 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:34:46.632 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:34:46.632 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:34:46.639 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:34:47.139 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:34:52.182 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:34:57.235 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:34:57.746 SCRIPT : ERR SMOKE PASS: mortar firing untasked original gun and complete four-person crew start without shots +08:34:57.746 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing dedicated actual manpack supplies the radio route +08:34:57.748 SCRIPT : ERR SMOKE PASS: mortar firing exactly 27 distinct physical initial HE shells +08:34:57.764 SCRIPT : ERR MORTAR FIXTURE IMPACT: position=<5200,80.1937,6400> batteryDistance=1000; no characters/vehicles in 400m square; production settlement/friendly exclusions passed +08:34:57.764 SCRIPT : ERR SMOKE PASS: mortar firing bounded candidate survey finds an unoccupied production-safe impact area +08:34:57.764 SCRIPT : ERR SMOKE PASS: mortar firing fixture-owned inert report identity exists; no enemy perception is claimed +08:34:57.765 SCRIPT : ERR SMOKE PASS: mortar firing synthetic observation enters actual existing radio uplink once +08:35:02.301 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:07.341 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:12.390 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:17.439 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:22.503 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:27.540 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:32.598 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:37.627 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:38.871 WORLD : UpdateEntities +08:35:38.871 WORLD : Frame +08:35:38.872 SCRIPT : ERR MORTAR FIXTURE PROJECTILE: event=1 entity=Projectile<0x000000019F269600> @"ENTITY:4611686018427390926" ('Projectile','Assets/Weapons/Ammo/Shells/82mm_Mortar_2B14/Shell_82mm_HE_O832DU.xob') at <5999.590820 204.000366 6999.681641> @"{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et" origin=<5999.59,204,6999.68> order=1 source=M1 aimAge=1909.73 flight=24.2333; impact is not measured +08:35:39.144 SCRIPT : ERR SMOKE PASS: mortar firing one physical projectile follows real uplink/downlink, native activity and fresh aim +08:35:39.145 SCRIPT : ERR SMOKE PASS: mortar firing one fired projectile consumes one of 27 original inventory shells +08:35:39.145 SCRIPT : ERR SMOKE PASS: mortar firing explicit support Stop closes native order and route idempotently +08:35:42.668 SCRIPT : ERR MORTAR FIXTURE: step=2 startup=1 source=M1 observedEvents=1 ready=0 failure= +08:35:47.713 SCRIPT : ERR MORTAR FIXTURE: step=2 startup=1 source=M1 observedEvents=1 ready=0 failure= +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing stopped service issues no duplicate order, projectile or replenishment over 12 seconds +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing original group and gun retain four crew +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.257 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.257 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.257 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:35:51.257 SCRIPT : ERR SMOKE PASS: native mortar first shot and stop complete before explicit reset +08:35:51.257 SCRIPT : ERR SMOKE COMPLETE: native HQ radio to first mortar projectile and explicit stop; fixture reset requested +08:35:51.365 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:35:51.367 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:35:51.367 SCRIPT (W): Slot_Chat Has no Content! +08:35:51.367 SCRIPT (W): Slot_VON Has no Content! +08:35:51.368 SCRIPT (W): Slot_GameVersion Has no Content! +08:35:51.368 SCRIPT (W): Slot_Notifications Has no Content! +08:35:53.422 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:35:53.423 SCRIPT : -- Stack trace -- +08:35:53.423 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:35:53.423 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:35:53.423 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:35:53.423 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:35:53.423 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:35:53.423 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:35:53.423 SCRIPT : ----------------- +08:35:53.423 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:35:53.424 SCRIPT : -- Stack trace -- +08:35:53.424 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:35:53.424 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:35:53.424 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:35:53.424 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:35:53.424 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:35:53.424 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:35:53.424 SCRIPT : ----------------- +08:35:53.426 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:35:53.426 SCRIPT (W): Slot_Chat Has no Content! +08:35:53.426 SCRIPT (W): Slot_VON Has no Content! +08:35:53.427 SCRIPT (W): Slot_GameVersion Has no Content! +08:35:53.427 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/2026-09-19-mortar-first-shot/error.log.txt b/docs/evidence/2026-09-19-mortar-first-shot/error.log.txt new file mode 100644 index 0000000..5b5c73b --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/error.log.txt @@ -0,0 +1,118 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-33-52\error.log started at 2026-09-19 08:33:53 (2026-09-19 06:33:53 UTC) + +08:33:53.984 INIT : Workbench startup +08:33:53.984 INIT : Workbench Init Engine +08:33:53.984 RESOURCES : ResourceDB: full scan +08:33:53.984 RESOURCES : processing files... +08:33:53.984 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:33:53.984 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:33:53.984 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:33:58.882 INIT : Workbench Create Game +08:33:58.882 SCRIPT : Compiling Game scripts +08:33:58.882 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:33:58.882 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:33:59.018 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.153 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:33:59.185 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:33:59.322 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:33:59.383 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:33:59.383 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:33:59.388 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:33:59.427 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.427 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.428 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:33:59.428 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:33:59.455 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.488 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:34:08.606 WORLD : CreateEntities +08:34:08.606 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" +08:34:08.606 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:34:08.606 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:34:24.890 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:34:29.785 WORLD : Game::LoadEntities +08:34:29.786 WORLD : CreateEntities +08:34:29.786 WORLD : CreateEntities +08:34:29.786 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" +08:34:29.786 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:34:29.786 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:34:31.174 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:34:31.174 ENTITY : CreateComponent 'Hierarchy' +08:34:31.174 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>') +08:34:31.175 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:34:31.175 ENTITY : CreateComponent 'Hierarchy' +08:34:31.175 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>') +08:34:31.175 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:34:31.175 ENTITY : CreateComponent 'Hierarchy' +08:34:31.175 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>') +08:34:31.180 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:34:31.180 ENTITY : CreateComponent 'Hierarchy' +08:34:31.180 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>') +08:34:31.180 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:34:31.180 ENTITY : CreateComponent 'Hierarchy' +08:34:31.180 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>') +08:34:31.180 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:34:31.180 ENTITY : CreateComponent 'Hierarchy' +08:34:31.180 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>') +08:34:31.185 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:34:31.185 ENTITY : CreateComponent 'Hierarchy' +08:34:31.185 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>') +08:34:31.185 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:34:31.185 ENTITY : CreateComponent 'Hierarchy' +08:34:31.185 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>') +08:34:31.186 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:34:31.186 ENTITY : CreateComponent 'Hierarchy' +08:34:31.186 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>') +08:34:38.450 WORLD : InitEntities 'world' +08:34:38.450 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:34:38.450 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:34:39.012 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:34:39.012 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:34:39.012 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:34:39.013 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! +08:34:39.013 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! +08:34:39.015 SCRIPT (W): Can't open config file "" +08:34:39.022 WORLD : InitEntities 'world' +08:34:39.022 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:34:39.022 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:34:39.022 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:34:39.022 SCRIPT (W): Slot_Chat Has no Content! +08:34:39.023 SCRIPT (W): Slot_VON Has no Content! +08:34:39.023 SCRIPT (W): Slot_AvailableActions Has no Content! +08:34:39.023 SCRIPT (W): Slot_Vehicle Has no Content! +08:34:39.023 SCRIPT (W): Slot_GameVersion Has no Content! +08:34:39.023 SCRIPT (W): Slot_Notifications Has no Content! +08:34:39.023 SCRIPT (W): Slot_Hints Has no Content! +08:34:39.035 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:34:39.035 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:34:39.035 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:34:39.036 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. +08:34:39.036 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. +08:34:39.039 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:34:39.281 WORLD : UpdateEntities +08:34:39.281 WORLD : PostFrame +08:34:39.281 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:34:39.281 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:34:39.326 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:34:39.326 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:34:39.326 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:34:39.326 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:34:41.767 WORLD : UpdateEntities +08:34:41.768 WORLD : AfterPostSimulate +08:34:41.768 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:35:51.367 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:35:51.367 SCRIPT (W): Slot_Chat Has no Content! +08:35:51.367 SCRIPT (W): Slot_VON Has no Content! +08:35:51.368 SCRIPT (W): Slot_GameVersion Has no Content! +08:35:51.368 SCRIPT (W): Slot_Notifications Has no Content! +08:35:53.422 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:35:53.423 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:35:53.426 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:35:53.426 SCRIPT (W): Slot_Chat Has no Content! +08:35:53.426 SCRIPT (W): Slot_VON Has no Content! +08:35:53.427 SCRIPT (W): Slot_GameVersion Has no Content! +08:35:53.427 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/2026-09-19-mortar-first-shot/headless-launch.log.txt b/docs/evidence/2026-09-19-mortar-first-shot/headless-launch.log.txt new file mode 100644 index 0000000..2525f2f --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/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: 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. +[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: 0x1c001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1c001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1c001a4 + 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: 0x1c003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1c003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1c003a4 + 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: 0x1c003a4 - 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: 0x1c003a4 swapchain: 0x5555651afbb0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555651afbb0 +[Gamescope WSI] Destroyed swapchain: 0x5555651afbb0 +[Gamescope WSI] Creating swapchain for xid: 0x1c003a4 - 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: 0x1c003a4 swapchain: 0x5555651afbb0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555651afbb0 +[Gamescope WSI] Destroyed swapchain: 0x5555651afbb0 +[Gamescope WSI] Creating swapchain for xid: 0x1c003a4 - 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: 0x1c003a4 swapchain: 0x55556513c740 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/2026-09-19-mortar-first-shot/launch-source-sha256.json b/docs/evidence/2026-09-19-mortar-first-shot/launch-source-sha256.json new file mode 100644 index 0000000..e058dc0 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/launch-source-sha256.json @@ -0,0 +1,164 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "e4589e5af55701f8c1f7f33e0a49e45f34b073bfddbdc87e009bea69af683828", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "acbc8a1d6a5c76278c447b666ae7362740953422a9ca287361ad6286b6944c59", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "95186a6c1553b38c6a214e897f845ef1799d8acca0cc896d8df73de680050888", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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/2026-09-19-mortar-first-shot/launch-source.json b/docs/evidence/2026-09-19-mortar-first-shot/launch-source.json new file mode 100644 index 0000000..b8ce424 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "fd2f772d-e946-4722-b0e0-9000847a6a67", + "captured_unix": 1789799630.6427813, + "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", + "mortar-fire", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4" +} diff --git a/docs/evidence/2026-09-19-mortar-first-shot/report.json b/docs/evidence/2026-09-19-mortar-first-shot/report.json new file mode 100644 index 0000000..7439545 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/2026-09-19-mortar-first-shot/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/2026-09-19-mortar-first-shot/rereintroduced-hq.log.txt b/docs/evidence/2026-09-19-mortar-first-shot/rereintroduced-hq.log.txt new file mode 100644 index 0000000..312fcb7 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/rereintroduced-hq.log.txt @@ -0,0 +1,66 @@ +#1 t=6.5s M0 REGISTER group 1 [session=1789799678-1] +#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=1789799678-1] +#3 t=7.5s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=0 operational=1 crew agents=1 fighting=1 inventory HE=0 radio connected=0 cooldown remaining=0s [session=1789799678-1] +#4 t=7.5s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=7.48225s last failure= [session=1789799678-1] +#5 t=8.6s M0 REGISTER group 2 [session=1789799678-1] +#6 t=8.6s M0 REGISTER group 3 [session=1789799678-1] +#7 t=8.6s M0 REGISTER group 4 [session=1789799678-1] +#8 t=8.6s M0 REGISTER group 5 [session=1789799678-1] +#9 t=8.6s M0 REGISTER group 6 [session=1789799678-1] +#10 t=8.6s M0 REGISTER group 7 [session=1789799678-1] +#11 t=12.5s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=0 operational=1 crew agents=4 fighting=4 inventory HE=0 radio connected=1 cooldown remaining=0s [session=1789799678-1] +#12 t=12.5s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=12.5255s last failure= [session=1789799678-1] +#13 t=17.6s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=0 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789799678-1] +#14 t=17.6s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=17.5787s last failure= [session=1789799678-1] +#15 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=1789799678-1] +#16 t=18.1s M1 FIXTURE REPORT EXPLICIT SYNTHETIC OBSERVATION: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (0s ago) [session=1789799678-1] +#17 t=18.8s M1 TRANSMIT unit 1 -> HQ (long-range) [session=1789799678-1] +#18 t=20.8s M1 RECEIVE HQ received from unit 1 [session=1789799678-1] +#19 t=22.6s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789799678-1] +#20 t=22.6s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=22.644s last failure= [session=1789799678-1] +#21 t=22.8s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789799678-1] +#22 t=22.8s M4 TRANSMIT HQ -> unit 4 (long-range) [session=1789799678-1] +#23 t=22.8s M3 TRANSMIT HQ -> unit 3 (long-range) [session=1789799678-1] +#24 t=22.8s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789799678-1] +#25 t=24.8s M5 RECEIVE unit 6 received from HQ [session=1789799678-1] +#26 t=24.8s M5 ORDER DELIVERED group 6 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789799678-1] +#27 t=24.8s M4 RECEIVE unit 4 received from HQ [session=1789799678-1] +#28 t=24.8s M4 ORDER DELIVERED group 4 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789799678-1] +#29 t=24.8s M3 RECEIVE unit 3 received from HQ [session=1789799678-1] +#30 t=24.8s M3 ORDER DELIVERED group 3 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789799678-1] +#31 t=24.8s M2 RECEIVE unit 2 received from HQ [session=1789799678-1] +#32 t=24.8s M2 ORDER DELIVERED group 2 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789799678-1] +#33 t=26.8s M6 ORDER QUEUED MORTAR ORDER from report M1; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (9s ago) [session=1789799678-1] +#34 t=26.8s M0 MORTAR COMMAND site=1 order=1 radio=M0 source=M1 position=<6000,202.788,7000>; requested rounds=8 HE radius=40m; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (9s ago) [session=1789799678-1] +#35 t=27.7s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789799678-1] +#36 t=27.7s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=1 native action=-1 shell committed=0 order shots=0 total shots=0 age=0.8689s last failure= [session=1789799678-1] +#37 t=27.8s M6 TRANSMIT HQ -> unit 1 (long-range) [session=1789799678-1] +#38 t=29.8s M6 RECEIVE unit 1 received from HQ [session=1789799678-1] +#39 t=29.8s M6 MORTAR AIM site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; native activity created; latest source=M1 observed=X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (12s ago) [session=1789799678-1] +#40 t=30.8s M6 MORTAR ACTIVITY site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=native state=1; age=1.00274s aim age=30.8386s committed=0 shots=0; previous= repeated polls omitted=0 [session=1789799678-1] +#41 t=32.7s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=27.1018s [session=1789799678-1] +#42 t=32.7s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=2.89819s last failure= [session=1789799678-1] +#43 t=32.9s M6 MORTAR AIM START site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=solving moving intercept; latest source=M1; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (15s ago); previous= repeated polls omitted=0 [session=1789799678-1] +#44 t=32.9s M6 MORTAR AIM SOLUTION site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=ready; predicted impact=<5207.07,78.6842,6387.75> flight=24.2333s charge index=2 aim target=<5207.07,2689.01,6387.75> latest source=M1; previous= repeated polls omitted=0 [session=1789799678-1] +#45 t=37.8s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=22.0531s [session=1789799678-1] +#46 t=37.8s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=7.94694s last failure= [session=1789799678-1] +#47 t=42.8s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=16.9899s [session=1789799678-1] +#48 t=42.8s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=13.0101s last failure= [session=1789799678-1] +#49 t=47.9s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=11.9519s [session=1789799678-1] +#50 t=47.9s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=18.0481s last failure= [session=1789799678-1] +#51 t=52.9s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=6.89482s [session=1789799678-1] +#52 t=52.9s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=23.1052s last failure= [session=1789799678-1] +#53 t=57.3s M6 MORTAR AIM REVALIDATED site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=same native command; fresh ballistic solve matched original; source=M1 observed age=39.2116s; previous= repeated polls omitted=0 [session=1789799678-1] +#54 t=57.3s M6 MORTAR SHOOT NODE site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=native result=2; authorization passed; node result does not confirm a physical shot; previous= repeated polls omitted=0 [session=1789799678-1] +#55 t=58s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=1.86609s [session=1789799678-1] +#56 t=58s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=28.1339s last failure= [session=1789799678-1] +#57 t=58.2s M6 MORTAR SHELL COMMIT site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; final safety passed; gunner=SCR_ChimeraCharacter<0x00000001BBD4D770> @"ENTITY:4611686018427390717" ('SCR_ChimeraCharacter','Assets/Characters/Basebody/Basebody_Male_01.xob') at <5999.121094 202.731979 7000.143555> @"{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" predicted impact=<5207.07,78.6842,6387.75> flight=24.2333s; invoking native transfer, awaiting projectile event [session=1789799678-1] +#58 t=59.2s M6 MORTAR FIRED site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; physical projectile=Projectile<0x000000019F269600> @"ENTITY:4611686018427390926" ('Projectile','Assets/Weapons/Ammo/Shells/82mm_Mortar_2B14/Shell_82mm_HE_O832DU.xob') at <5999.590820 204.000366 6999.681641> @"{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et" origin=<5999.59,204,6999.68> order shots=1 total shots=1 predicted impact=<5207.07,78.6842,6387.75> predicted flight=24.2333s gunner=SCR_ChimeraCharacter<0x00000001BBD4D770> @"ENTITY:4611686018427390717" ('SCR_ChimeraCharacter','Assets/Characters/Basebody/Basebody_Male_01.xob') at <5999.121094 202.734802 7000.143555> @"{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" (impact not observed) [session=1789799678-1] +#59 t=59.5s M6 MORTAR REPEATS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; phase=ACTIVITY reason=native state=1 repeated polls omitted=28 [session=1789799678-1] +#60 t=59.5s M6 MORTAR ORDER END site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=HQ stopped observed shots=1 shell committed=0 elapsed=29.6502s last failure= [session=1789799678-1] +#61 t=63s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=0 crew agents=4 fighting=4 inventory HE=26 radio connected=1 cooldown remaining=0s [session=1789799678-1] +#62 t=63s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=1 total shots=1 age=33.1751s last failure= [session=1789799678-1] +#63 t=63s M6 MORTAR SITE BLOCK site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=battery stopped; spawn failure=; previous= repeated polls omitted=0 [session=1789799678-1] +#64 t=68.1s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=0 crew agents=4 fighting=4 inventory HE=26 radio connected=1 cooldown remaining=0s [session=1789799678-1] +#65 t=68.1s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=1 total shots=1 age=38.2199s last failure= [session=1789799678-1] +#66 t=71.6s M0 STOP HQ stopped; tactical orders released [session=1789799678-1] diff --git a/docs/evidence/2026-09-19-mortar-first-shot/runner.json.txt b/docs/evidence/2026-09-19-mortar-first-shot/runner.json.txt new file mode 100644 index 0000000..d9d16cd --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789799758.8077834, + "console_sha256": "c7ddf6da7e620085c8617aa24788769f61b6117dd7b9b70969de09034e15f32f", + "end_source_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "fd2f772d-e946-4722-b0e0-9000847a6a67", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4", + "started_unix": 1789799630.6428425, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-33-52", + "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/2026-09-19-mortar-first-shot/script.log.txt b/docs/evidence/2026-09-19-mortar-first-shot/script.log.txt new file mode 100644 index 0000000..3a09ce4 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/script.log.txt @@ -0,0 +1,315 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-33-52\script.log started at 2026-09-19 08:33:55 (2026-09-19 06:33:55 UTC) + +08:33:55.242 SCRIPT : SCRIPT : Initializing scripts +08:33:55.242 SCRIPT : SCRIPT : ScriptProjectManager init +08:33:57.504 SCRIPT : SCRIPT : Compiling GameLib scripts +08:33:57.574 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 +08:33:57.574 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 +08:33:57.575 SCRIPT : SCRIPT : Compiling Game scripts +08:33:58.882 SCRIPT : Compiling Game scripts +08:33:58.882 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:33:58.882 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:33:59.018 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.153 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:33:59.185 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:33:59.285 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:33:59.322 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:33:59.383 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:33:59.383 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:33:59.388 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:33:59.427 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.427 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.428 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:33:59.428 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:33:59.455 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:33:59.488 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:33:59.750 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: e963af0e +08:33:59.756 SCRIPT : Module: Game; loaded 5759x files; 11304x classes; used 33167K 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: 38d29813 +08:34:00.724 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:34:00.724 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:34:21.496 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:34:21.496 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:34:21.497 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:34:21.498 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:34:21.499 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:34:21.499 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:34:21.520 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:34:24.887 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:34:24.887 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:34:38.450 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:34:38.474 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:34:39.013 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! +08:34:39.013 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! +08:34:39.015 SCRIPT (W): Can't open config file "" +08:34:39.022 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:34:39.022 SCRIPT (W): Slot_Chat Has no Content! +08:34:39.023 SCRIPT (W): Slot_VON Has no Content! +08:34:39.023 SCRIPT (W): Slot_AvailableActions Has no Content! +08:34:39.023 SCRIPT (W): Slot_Vehicle Has no Content! +08:34:39.023 SCRIPT (W): Slot_GameVersion Has no Content! +08:34:39.023 SCRIPT (W): Slot_Notifications Has no Content! +08:34:39.023 SCRIPT (W): Slot_Hints Has no Content! +08:34:39.036 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. +08:34:39.036 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. +08:34:39.039 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:34:39.093 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:34:39.107 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:34:39.281 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:34:40.811 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:34:40.836 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:34:40.837 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:34:40.868 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:34:40.870 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:34:40.931 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:34:40.931 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:34:40.939 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:34:40.992 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:34:40.993 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:34:40.995 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:34:40.995 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:34:40.999 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:34:41.001 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:34:41.001 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:34:41.002 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:34:41.002 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:34:41.002 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:34:41.003 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:34:41.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:34:41.003 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:34:41.003 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 +08:34:41.003 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:34:41.004 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:34:41.004 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 +08:34:41.004 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:34:41.004 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:34:41.004 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 +08:34:41.004 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.005 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:34:41.843 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:41.844 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:41.844 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:41.844 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:42.094 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5298,7499.7> up=0.99566 +08:34:42.094 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.314761 angularSpeed=0.054178 +08:34:42.094 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:42.095 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6151,7501.98> +08:34:42.095 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3151,7501.98> terrainY=63.3158 tireTerrainGap=-0.000720978 +08:34:42.095 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6151,7501.98> radius=0.3 bottom=<7012.06,63.3151,7501.98> fraction=0.451541 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000659943 +08:34:42.095 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6035,7497.71> +08:34:42.095 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1535,7497.71> terrainY=64.156 tireTerrainGap=-0.00251007 +08:34:42.096 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6035,7497.71> radius=0.45 bottom=<7009.88,64.1535,7497.71> fraction=0.443634 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00239563 +08:34:42.096 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2636,7497.75> +08:34:42.096 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8136,7497.75> terrainY=63.8176 tireTerrainGap=-0.00397873 +08:34:42.096 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2636,7497.75> radius=0.45 bottom=<7014.42,63.8136,7497.75> fraction=0.436389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00399399 +08:34:42.096 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:42.347 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:42.347 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:42.348 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:42.348 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:34:42.849 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:42.850 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:42.850 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:43.100 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5333,7499.72> up=0.994184 +08:34:43.100 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0956389 angularSpeed=0.0274173 +08:34:43.100 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:43.100 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6188,7501.99> +08:34:43.100 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3188,7501.99> terrainY=63.3138 tireTerrainGap=0.00501251 +08:34:43.100 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6188,7501.99> radius=0.3 bottom=<7012.06,63.3188,7501.99> fraction=0.477311 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0050087 +08:34:43.101 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6035,7497.72> +08:34:43.101 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1535,7497.72> terrainY=64.1496 tireTerrainGap=0.00389862 +08:34:43.101 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6035,7497.72> radius=0.45 bottom=<7009.92,64.1535,7497.72> fraction=0.472503 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00395203 +08:34:43.101 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2654,7497.79> +08:34:43.101 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8154,7497.79> terrainY=63.8152 tireTerrainGap=0.000133514 +08:34:43.101 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2654,7497.79> radius=0.45 bottom=<7014.46,63.8154,7497.79> fraction=0.455 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=9.91821e-05 +08:34:43.102 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:43.352 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:43.353 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:43.353 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:34:43.353 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.607 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:34:43.858 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.858 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.859 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:43.859 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:34:44.180 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5324,7499.74> up=0.993868 +08:34:44.181 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0420608 angularSpeed=0.0613614 +08:34:44.181 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:44.181 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6135,7502.01> +08:34:44.181 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3135,7502.01> terrainY=63.3116 tireTerrainGap=0.00194168 +08:34:44.181 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6135,7502.01> radius=0.3 bottom=<7012.07,63.3135,7502.01> fraction=0.463272 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00191879 +08:34:44.182 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5949,7497.72> +08:34:44.182 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1449,7497.72> terrainY=64.1435 tireTerrainGap=0.0014267 +08:34:44.182 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5949,7497.72> radius=0.45 bottom=<7009.96,64.1449,7497.72> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +08:34:44.182 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.26,7497.83> +08:34:44.182 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.81,7497.83> terrainY=63.8127 tireTerrainGap=-0.00266647 +08:34:44.183 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.26,7497.83> radius=0.45 bottom=<7014.5,63.81,7497.83> fraction=0.442222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00271225 +08:34:44.183 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:44.183 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.184 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.184 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.184 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:44.683 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:44.683 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:44.684 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:44.684 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:34:45.190 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5283,7499.74> up=0.993815 +08:34:45.190 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:34:45.191 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:45.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.01> +08:34:45.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.01> terrainY=63.3113 tireTerrainGap=0.00128174 +08:34:45.191 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.01> radius=0.3 bottom=<7012.07,63.3126,7502.01> fraction=0.46034 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00127411 +08:34:45.192 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:34:45.192 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1421 tireTerrainGap=0.00263214 +08:34:45.192 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.466891 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00271606 +08:34:45.192 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:34:45.193 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00181198 +08:34:45.193 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:34:45.193 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:45.193 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.194 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:45.194 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:45.194 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:34:45.696 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.697 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.697 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:45.697 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:46.198 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5283,7499.74> up=0.993815 +08:34:46.199 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:34:46.199 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:34:46.199 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6126,7502.01> +08:34:46.199 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3126,7502.01> terrainY=63.3113 tireTerrainGap=0.00128174 +08:34:46.199 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6126,7502.01> radius=0.3 bottom=<7012.07,63.3126,7502.01> fraction=0.46034 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00127411 +08:34:46.200 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:34:46.200 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1421 tireTerrainGap=0.00263214 +08:34:46.200 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.466891 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00271606 +08:34:46.200 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:34:46.200 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00181198 +08:34:46.201 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:34:46.201 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:34:46.201 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:34:46.202 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:34:46.212 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:34:46.213 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:34:46.213 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:34:46.358 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:34:46.398 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:34:46.631 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:34:46.631 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:34:46.632 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:34:46.632 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:34:46.632 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:34:46.632 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:34:46.632 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:34:46.633 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:34:46.634 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:34:46.637 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:34:46.639 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:34:46.640 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:34:47.139 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:34:52.182 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:34:57.235 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:34:57.746 SCRIPT : ERR SMOKE PASS: mortar firing untasked original gun and complete four-person crew start without shots +08:34:57.746 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:34:57.747 SCRIPT : ERR SMOKE PASS: mortar firing dedicated actual manpack supplies the radio route +08:34:57.748 SCRIPT : ERR SMOKE PASS: mortar firing exactly 27 distinct physical initial HE shells +08:34:57.764 SCRIPT : ERR MORTAR FIXTURE IMPACT: position=<5200,80.1937,6400> batteryDistance=1000; no characters/vehicles in 400m square; production settlement/friendly exclusions passed +08:34:57.764 SCRIPT : ERR SMOKE PASS: mortar firing bounded candidate survey finds an unoccupied production-safe impact area +08:34:57.764 SCRIPT : ERR SMOKE PASS: mortar firing fixture-owned inert report identity exists; no enemy perception is claimed +08:34:57.765 SCRIPT : ERR SMOKE PASS: mortar firing synthetic observation enters actual existing radio uplink once +08:35:02.301 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:07.341 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:12.390 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:17.439 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:22.503 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:27.540 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:32.598 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:37.627 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:35:38.872 SCRIPT : ERR MORTAR FIXTURE PROJECTILE: event=1 entity=Projectile<0x000000019F269600> @"ENTITY:4611686018427390926" ('Projectile','Assets/Weapons/Ammo/Shells/82mm_Mortar_2B14/Shell_82mm_HE_O832DU.xob') at <5999.590820 204.000366 6999.681641> @"{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et" origin=<5999.59,204,6999.68> order=1 source=M1 aimAge=1909.73 flight=24.2333; impact is not measured +08:35:39.144 SCRIPT : ERR SMOKE PASS: mortar firing one physical projectile follows real uplink/downlink, native activity and fresh aim +08:35:39.145 SCRIPT : ERR SMOKE PASS: mortar firing one fired projectile consumes one of 27 original inventory shells +08:35:39.145 SCRIPT : ERR SMOKE PASS: mortar firing explicit support Stop closes native order and route idempotently +08:35:42.668 SCRIPT : ERR MORTAR FIXTURE: step=2 startup=1 source=M1 observedEvents=1 ready=0 failure= +08:35:47.713 SCRIPT : ERR MORTAR FIXTURE: step=2 startup=1 source=M1 observedEvents=1 ready=0 failure= +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing stopped service issues no duplicate order, projectile or replenishment over 12 seconds +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing original group and gun retain four crew +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.256 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.257 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.257 SCRIPT : ERR SMOKE PASS: mortar firing final conscious crew entity belongs to original physical roster +08:35:51.257 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:35:51.257 SCRIPT : ERR SMOKE PASS: native mortar first shot and stop complete before explicit reset +08:35:51.257 SCRIPT : ERR SMOKE COMPLETE: native HQ radio to first mortar projectile and explicit stop; fixture reset requested +08:35:51.365 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:35:51.367 SCRIPT (W): Slot_Chat Has no Content! +08:35:51.367 SCRIPT (W): Slot_VON Has no Content! +08:35:51.368 SCRIPT (W): Slot_GameVersion Has no Content! +08:35:51.368 SCRIPT (W): Slot_Notifications Has no Content! +08:35:53.422 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:35:53.423 SCRIPT : -- Stack trace -- +08:35:53.423 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:35:53.423 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:35:53.423 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:35:53.423 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:35:53.423 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:35:53.423 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:35:53.423 SCRIPT : ----------------- +08:35:53.423 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:35:53.424 SCRIPT : -- Stack trace -- +08:35:53.424 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:35:53.424 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:35:53.424 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:35:53.424 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:35:53.424 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:35:53.424 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:35:53.424 SCRIPT : ----------------- +08:35:53.426 SCRIPT (W): Slot_Chat Has no Content! +08:35:53.426 SCRIPT (W): Slot_VON Has no Content! +08:35:53.427 SCRIPT (W): Slot_GameVersion Has no Content! +08:35:53.427 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/2026-09-19-mortar-first-shot/source-provenance.json b/docs/evidence/2026-09-19-mortar-first-shot/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/2026-09-19-mortar-first-shot/source-sha256.json b/docs/evidence/2026-09-19-mortar-first-shot/source-sha256.json new file mode 100644 index 0000000..e058dc0 --- /dev/null +++ b/docs/evidence/2026-09-19-mortar-first-shot/source-sha256.json @@ -0,0 +1,164 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "e4589e5af55701f8c1f7f33e0a49e45f34b073bfddbdc87e009bea69af683828", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "acbc8a1d6a5c76278c447b666ae7362740953422a9ca287361ad6286b6944c59", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "95186a6c1553b38c6a214e897f845ef1799d8acca0cc896d8df73de680050888", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-083213/archive-sha256.json b/docs/evidence/dedicated-2026-09-19-083213/archive-sha256.json new file mode 100644 index 0000000..3a6e959 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/archive-sha256.json @@ -0,0 +1,15 @@ +{ + "cleanup-verification.json": "54e31b30fa5f8102a42d020b6a687799a063dd320ae5b0b30ae1efe64964b553", + "command.json": "20ab83f7e1ec457f3e4b7fad7f89c54c6ae7b649c63f142a552697b55c7bfcad", + "isolation-preflight.json": "bbf1e635e862532fbdd7d6210610b3906f4f1caad7c9ba08e67ecf84324dba7a", + "profile/logs/logs_2026-09-19_08-32-13/console.log": "44a061e2fa092e5a513a51341a54d6254b1d64d2909e0463071c4e348b3f15a0", + "profile/logs/logs_2026-09-19_08-32-13/error.log": "242f30914808638ddab976738b475e4e0c277c9e27a4b2bda46484f438049d0b", + "profile/logs/logs_2026-09-19_08-32-13/script.log": "81f3191e38f6a9932a77d05a22b746777d355938369b65d6cd17be450493b923", + "profile/profile/.save/settings/ReforgerEngineSettings.conf": "a36a9bbca20b2019099052c86f48fb00db7ec01ff7409cc81b6d102789ed50a9", + "profile/profile/.save/settings/ReforgerGameSettings.conf": "1656680640c178239490ffbf9b3ddae04d3ac0993cd84471c0d27b28b76abf13", + "result.json": "d4ca570adf8da3a0dc302f5f163e7f2278ba8f97826ed62154bd2f674c7881af", + "review.json": "5de14885c7e8a62cedd38c03a01ef0d566a1507de0439d42a6da721fd1123741", + "source-manifest-after.json": "d66a6a1a256aec91b752acb153dd1fac94d0950419e3a10ccecb74d50a914a15", + "source-manifest.json": "d66a6a1a256aec91b752acb153dd1fac94d0950419e3a10ccecb74d50a914a15", + "stdout.log": "acb9c1a7d09e057f988c139d97100ca9ac93c2475e83107aced4de869096e865" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/cleanup-verification.json b/docs/evidence/dedicated-2026-09-19-083213/cleanup-verification.json new file mode 100644 index 0000000..0d5e0b3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/cleanup-verification.json @@ -0,0 +1,4 @@ +{ + "ownedSupervisorAbsent": true, + "remainingNativeServerExecutables": [] +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/command.json b/docs/evidence/dedicated-2026-09-19-083213/command.json new file mode 100644 index 0000000..e0adb13 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/command.json @@ -0,0 +1,111 @@ +{ + "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-native-build/attempt-02-header/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-native-build/attempt-02-header", + "/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", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "2528466DE220D91C", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-server", + "{AD62322D5213C440}Missions/ERR_Everon_Base.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "2528466DE220D91C", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-server", + "{AD62322D5213C440}Missions/ERR_Everon_Base.conf" + ], + "seconds": 90, + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": false, + "realPlayers": 0, + "multiplayerProven": false +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/isolation-preflight.json b/docs/evidence/dedicated-2026-09-19-083213/isolation-preflight.json new file mode 100644 index 0000000..0115040 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-native-build/attempt-02-header/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-native-build/attempt-02-header", + "/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-083213/profile/logs/logs_2026-09-19_08-32-13/console.log b/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/console.log new file mode 100644 index 0000000..ffb8097 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/console.log @@ -0,0 +1,346 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_08-32-13/console.log started at 2026-09-19 08:32:13 (2026-09-19 06:32:13 UTC) + +08:32:13.285 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_08-32-13' to filesystem under name logs +08:32:13.285 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/profile' to filesystem under name profile +08:32:13.285 ENGINE : FileSystem: Current working directory: '/tmp/runtime/' +08:32:13.287 ENGINE : Initializing engine, version 192142 +08:32:13.287 ENGINE : CLI Params: -addonsDir /tmp/source/addons -addons 2528466DE220D91C -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -server {AD62322D5213C440}Missions/ERR_Everon_Base.conf +08:32:13.288 ENGINE : Addon dirs: +08:32:13.289 ENGINE : dir: '/tmp/source/addons' +08:32:13.289 ENGINE : dir: './addons' +08:32:13.289 ENGINE : dir: '/tmp/work/profile/addons' +08:32:13.289 ENGINE : Available addons: +08:32:13.289 ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:32:13.289 ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:32:13.289 ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:32:13.289 ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:32:13.289 ENGINE : gproj: '/tmp/source/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:32:13.289 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:32:13.289 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:32:13.289 ENGINE : FileSystem: Adding relative directory '/tmp/source/addons/core' to filesystem under name ERR_Core +08:32:13.366 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 6) to filesystem under name ArmaReforger +08:32:13.366 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 1) to filesystem under name core +08:32:13.366 ENGINE : CPU vendor : AuthenticAMD +08:32:13.366 ENGINE : CPU type : 2 +08:32:13.366 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:32:13.366 ENGINE : CPU cache info : Unknown cache +08:32:13.366 ENGINE : CPU count logical : 16 +08:32:13.366 ENGINE : CPU count physical : 8 +08:32:13.366 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:32:13.366 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=/tmp/source/addons/core/resourceDatabase.rdb) +08:32:13.366 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:32:13.483 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:32:13.484 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +08:32:13.484 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_08-32-13/resourceDatabase.rdb) +08:32:13.632 ENGINE : GameProject load +08:32:13.632 ENGINE : Loaded addons: +08:32:13.632 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:32:13.632 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:32:13.632 ENGINE : gproj: '/tmp/source/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:32:13.633 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf' +08:32:13.633 ENGINE : No Enfusion settings file loaded. Continuing with defaults +08:32:13.633 RENDER : Basic screen setup: +08:32:13.633 RENDER : Back buffer width x height: 0x0 +08:32:13.633 RENDER : Back buffer format : TEXFMT_UNKNOWN (0) +08:32:13.633 RENDER : MSAA : none +08:32:13.633 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version +08:32:13.633 RENDER : Detected output devices: +08:32:13.633 RENDER : * 1 device/s connected to Dummy: +08:32:13.633 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz +08:32:13.633 RENDER : Concurrent frames limit 2 +08:32:13.633 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +08:32:13.645 PROFILING : Settings changed took: 0.028000 ms +08:32:13.647 ENGINE : Initializing inputs. +08:32:13.654 NETWORK : Initializing networking. +08:32:13.654 NETWORK : Using new GameRplScheduler. +08:32:13.655 SCRIPT : SCRIPT : Initializing scripts +08:32:13.655 SCRIPT : SCRIPT : ScriptProjectManager init +08:32:13.655 PROFILING : ScriptProjectManager init took: 0.008000 ms +08:32:13.672 PROFILING : Initializing scripts took: 16.979000 ms +08:32:13.672 BACKEND : Backend Services are disabled. +08:32:13.672 ENGINE : Enfusion engine successfully created. +08:32:13.674 GUI : Using default language (en_us) +08:32:13.674 GUI : Loading 'en_us' localization file. +08:32:13.674 INIT : INIT : Loading StringTable +08:32:13.698 PROFILING : Loading StringTable took: 23.889000 ms +08:32:13.698 SCRIPT : SCRIPT : Compiling GameLib scripts +08:32:13.727 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 +08:32:13.727 PROFILING : Compiling GameLib scripts took: 29.382000 ms +08:32:13.727 SCRIPT : SCRIPT : Compiling Game scripts +08:32:14.505 SCRIPT : Compiling Game scripts +08:32:14.505 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:32:14.505 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:32:14.728 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.739 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:32:14.765 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:32:14.856 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:32:14.856 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:32:14.857 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:32:14.857 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:32:14.885 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:32:14.929 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:32:14.941 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:32:14.941 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:32:14.943 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:32:14.978 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.978 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.979 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:32:14.979 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:32:15.036 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:32:15.140 SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 25833K 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: 2ef250fb +08:32:15.155 PROFILING : Compiling Game scripts took: 1428.098000 ms +08:32:15.155 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:32:15.175 ENGINE : Game successfully created. +08:32:15.259 PLATFORM : Save data from container 'settings' have been loaded +08:32:15.358 PLATFORM : Save data from container 'sessions' have been loaded +08:32:15.358 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +08:32:15.358 PLATFORM : Save data transaction to 'settings' started. +08:32:15.359 NETWORK : Starting local multiplayer server using command line args. +08:32:15.458 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'. +08:32:15.458 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:32:16.058 WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:32:16.058 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +08:32:16.058 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:32:16.058 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:32:16.058 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +08:32:16.206 PROFILING : Entities load took: 748.131000 ms +08:32:16.207 WORLD : WORLD : Game::LoadEntities +08:32:16.207 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +08:32:16.208 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:32:16.208 WORLD : WORLD : CreateEntities +08:32:16.208 WORLD : WORLD : CreateEntities +08:32:16.208 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:32:16.209 RESOURCES : Loaded mission headers from 7 addon(s)! +08:32:16.209 PROFILING : NotifyBeforeEntitiesCreated took: 0.922000 ms +08:32:16.209 WORLD : WORLD : Wait for preloading data +08:32:19.448 WORLD : Game::LoadEntities +08:32:19.448 WORLD : CreateEntities +08:32:19.448 WORLD : CreateEntities +08:32:19.448 WORLD : Wait for preloading data +08:32:19.448 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:32:19.448 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:32:19.448 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +08:32:19.514 PROFILING : Wait for preloading data took: 3304.813000 ms +08:32:19.577 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:32:19.577 PROFILING : PROFILING : Terrain load +08:32:20.724 PROFILING : Terrain load took: 1147.054000 ms +08:32:23.175 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" +08:32:23.175 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:32:23.175 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:32:25.294 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +08:32:25.294 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:32:25.294 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +08:32:25.294 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +08:32:25.294 MATERIAL (E): Material file not found +08:32:25.294 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +08:32:27.847 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:32:27.847 PROFILING : NotifyBeforeEntitiesInitialized took: 0.028000 ms +08:32:27.847 WORLD : InitEntities 'world' +08:32:27.847 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +08:32:27.847 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +08:32:28.358 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:32:28.358 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:32:28.359 WORLD : WORLD : NotifyEntitiesInitialized +08:32:28.359 TERRAIN : TERRAIN : Initializing road networks... +08:32:28.360 PROFILING : Initializing road networks... took: 1.812000 ms +08:32:28.360 DEFAULT : DEFAULT : WorldVolumesCollection +08:32:28.415 PROFILING : WorldVolumesCollection took: 54.141000 ms +08:32:28.415 INIT : INIT : SoundWorldInit +08:32:28.422 PROFILING : SoundWorldInit took: 7.362000 ms +08:32:28.422 PROFILING : NotifyEntitiesInitialized took: 63.416000 ms +08:32:28.422 PROFILING : CreateEntities took: 12213.648000 ms +08:32:28.422 PROFILING : CreateEntities took: 12213.656000 ms +08:32:28.422 WORLD : WORLD : EOnActivate +08:32:28.451 PROFILING : EOnActivate took: 28.588000 ms +08:32:28.451 PROFILING : Game::LoadEntities took: 12243.502000 ms +08:32:28.539 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false +08:32:29.005 DEFAULT : Entered online game state. +08:32:29.005 PROFILING : Settings changed took: 0.411000 ms +08:32:29.015 WORLD : Frame start +08:32:29.015 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:32:29.023 WORLD : UpdateEntities +08:32:29.023 WORLD : Frame +08:32:29.023 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:32:30.376 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:32:30.379 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:32:30.379 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:32:30.382 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:32:30.383 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:32:30.401 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:32:30.401 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:32:30.402 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:32:30.418 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:32:30.419 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:32:30.419 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:32:30.420 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:32:30.421 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:32:30.421 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:32:30.421 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:32:30.422 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:32:30.422 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:32:30.422 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:32:30.422 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:32:30.422 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:32:30.422 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:32:30.422 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 +08:32:30.422 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:32:30.422 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:32:30.422 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 +08:32:30.422 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:32:30.422 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:32:30.422 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 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.442 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.07,63.5457,7499.69> up=0.995704 +08:32:31.442 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.345002 angularSpeed=0.059733 +08:32:31.442 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:31.442 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.04,63.6117,7501.97> +08:32:31.442 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.04,63.3117,7501.97> terrainY=63.3164 tireTerrainGap=-0.00473785 +08:32:31.442 SCRIPT : ERR GEAR SUPPORT: center=<7012.04,63.6117,7501.97> radius=0.3 bottom=<7012.04,63.3117,7501.97> fraction=0.433053 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00472641 +08:32:31.442 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5942,7497.69> +08:32:31.442 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1442,7497.69> terrainY=64.1567 tireTerrainGap=-0.0125656 +08:32:31.442 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5942,7497.69> radius=0.45 bottom=<7009.88,64.1442,7497.69> fraction=0.397644 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0125198 +08:32:31.442 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2597,7497.75> +08:32:31.442 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8097,7497.75> terrainY=63.8177 tireTerrainGap=-0.00805283 +08:32:31.442 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2597,7497.75> radius=0.45 bottom=<7014.42,63.8097,7497.75> fraction=0.417778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00808716 +08:32:31.442 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:32.242 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:32.242 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.242 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.508 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5355,7499.71> up=0.994317 +08:32:32.508 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.102028 angularSpeed=0.0585238 +08:32:32.508 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:32.508 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.05,63.6213,7501.99> +08:32:32.508 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.05,63.3213,7501.99> terrainY=63.3145 tireTerrainGap=0.00682831 +08:32:32.508 SCRIPT : ERR GEAR SUPPORT: center=<7012.05,63.6213,7501.99> radius=0.3 bottom=<7012.05,63.3213,7501.99> fraction=0.485987 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00691605 +08:32:32.508 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6035,7497.7> +08:32:32.508 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1535,7497.7> terrainY=64.1488 tireTerrainGap=0.00473022 +08:32:32.508 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6035,7497.7> radius=0.45 bottom=<7009.93,64.1535,7497.7> fraction=0.476164 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00476074 +08:32:32.508 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2666,7497.79> +08:32:32.508 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8166,7497.79> terrainY=63.8149 tireTerrainGap=0.00174332 +08:32:32.508 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2666,7497.79> radius=0.45 bottom=<7014.47,63.8166,7497.79> fraction=0.4625 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.00175095 +08:32:32.508 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:32.508 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.309 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.309 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.309 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.576 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.531,7499.75> up=0.994244 +08:32:33.576 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0510799 angularSpeed=0.0476384 +08:32:33.576 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:33.576 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6153,7502.02> +08:32:33.576 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3153,7502.02> terrainY=63.3111 tireTerrainGap=0.00417709 +08:32:33.576 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6153,7502.02> radius=0.3 bottom=<7012.07,63.3153,7502.02> fraction=0.473567 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00418472 +08:32:33.576 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5924,7497.72> +08:32:33.576 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1424,7497.72> terrainY=64.1428 tireTerrainGap=-0.00038147 +08:32:33.576 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5924,7497.72> radius=0.45 bottom=<7009.97,64.1424,7497.72> fraction=0.453169 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000297546 +08:32:33.576 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.258,7497.83> +08:32:33.576 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.808,7497.83> terrainY=63.8124 tireTerrainGap=-0.00437546 +08:32:33.576 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.258,7497.83> radius=0.45 bottom=<7014.51,63.808,7497.83> fraction=0.434444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00442123 +08:32:33.576 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:34.010 WORLD : UpdateEntities +08:32:34.010 WORLD : Frame +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) +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:34.642 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5286,7499.76> up=0.994199 +08:32:34.642 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:32:34.642 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:34.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6119,7502.03> +08:32:34.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3119,7502.03> terrainY=63.3102 tireTerrainGap=0.00168228 +08:32:34.642 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6119,7502.03> radius=0.3 bottom=<7012.08,63.3119,7502.03> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:32:34.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5928,7497.74> +08:32:34.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1428,7497.74> terrainY=64.1412 tireTerrainGap=0.00151825 +08:32:34.642 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5928,7497.74> radius=0.45 bottom=<7009.97,64.1428,7497.74> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +08:32:34.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.84> +08:32:34.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.84> terrainY=63.8118 tireTerrainGap=-0.0024147 +08:32:34.642 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.84> radius=0.45 bottom=<7014.51,63.8094,7497.84> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +08:32:34.642 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.708 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5286,7499.76> up=0.994199 +08:32:35.708 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:32:35.708 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:35.708 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6119,7502.03> +08:32:35.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3119,7502.03> terrainY=63.3102 tireTerrainGap=0.00168228 +08:32:35.709 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6119,7502.03> radius=0.3 bottom=<7012.08,63.3119,7502.03> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:32:35.709 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5928,7497.74> +08:32:35.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1428,7497.74> terrainY=64.1412 tireTerrainGap=0.00151825 +08:32:35.709 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5928,7497.74> radius=0.45 bottom=<7009.97,64.1428,7497.74> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +08:32:35.709 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.84> +08:32:35.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.84> terrainY=63.8118 tireTerrainGap=-0.0024147 +08:32:35.709 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.84> radius=0.45 bottom=<7014.51,63.8094,7497.84> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +08:32:35.709 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:35.976 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.976 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.976 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:32:35.976 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:32:35.977 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:32:35.977 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:32:39.010 WORLD : UpdateEntities +08:32:39.010 WORLD : Frame +08:32:39.010 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 6.5 ms, max: 65.6 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1001182 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:32:44.043 WORLD : UpdateEntities +08:32:44.043 WORLD : Frame +08:32:44.043 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 29.2 ms, max: 38.2 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 1001296 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:32:49.043 WORLD : UpdateEntities +08:32:49.043 WORLD : Frame +08:32:49.043 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001371 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:32:54.043 WORLD : UpdateEntities +08:32:54.043 WORLD : Frame +08:32:54.043 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 30.6 ms, max: 35.6 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1001500 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:32:59.043 WORLD : UpdateEntities +08:32:59.043 WORLD : Frame +08:32:59.043 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.4 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001492 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:04.076 WORLD : UpdateEntities +08:33:04.076 WORLD : Frame +08:33:04.076 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 34.9 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1001452 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:09.076 WORLD : UpdateEntities +08:33:09.076 WORLD : Frame +08:33:09.076 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.4 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 1001493 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:14.076 WORLD : UpdateEntities +08:33:14.076 WORLD : Frame +08:33:14.076 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001501 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:19.109 WORLD : UpdateEntities +08:33:19.109 WORLD : Frame +08:33:19.109 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: 1001522 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:24.109 WORLD : UpdateEntities +08:33:24.109 WORLD : Frame +08:33:24.109 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.6 ms, max: 35.2 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001558 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:29.143 WORLD : UpdateEntities +08:33:29.143 WORLD : Frame +08:33:29.143 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.8 ms, max: 34.8 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 1001460 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:34.176 WORLD : UpdateEntities +08:33:34.176 WORLD : Frame +08:33:34.176 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: 1001558 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +08:33:39.176 WORLD : UpdateEntities +08:33:39.176 WORLD : Frame +08:33:39.176 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 1001527 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) diff --git a/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/error.log b/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/error.log new file mode 100644 index 0000000..b2f74a5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/error.log @@ -0,0 +1,49 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_08-32-13/error.log started at 2026-09-19 08:32:14 (2026-09-19 06:32:14 UTC) + +08:32:14.505 SCRIPT : Compiling Game scripts +08:32:14.505 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:32:14.505 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:32:14.728 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.739 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:32:14.765 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:32:14.856 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:32:14.856 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:32:14.857 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:32:14.857 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:32:14.885 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:32:14.929 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:32:14.941 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:32:14.941 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:32:14.943 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:32:14.978 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.978 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.979 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:32:14.979 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:32:15.036 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:32:16.058 WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:32:16.058 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +08:32:16.058 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:32:16.058 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:32:16.058 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +08:32:19.448 WORLD : Game::LoadEntities +08:32:19.448 WORLD : CreateEntities +08:32:19.448 WORLD : CreateEntities +08:32:19.448 WORLD : Wait for preloading data +08:32:19.448 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:32:19.448 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:32:19.448 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +08:32:23.175 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" +08:32:23.175 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:32:23.175 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:32:25.294 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +08:32:25.294 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:32:25.294 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +08:32:25.294 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +08:32:25.294 MATERIAL (E): Material file not found +08:32:25.294 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +08:32:27.847 WORLD : InitEntities 'world' +08:32:27.847 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +08:32:27.847 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +08:32:28.358 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:32:28.358 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. diff --git a/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/script.log b/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/script.log new file mode 100644 index 0000000..1bff316 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/profile/logs/logs_2026-09-19_08-32-13/script.log @@ -0,0 +1,173 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_08-32-13/script.log started at 2026-09-19 08:32:13 (2026-09-19 06:32:13 UTC) + +08:32:13.655 SCRIPT : SCRIPT : Initializing scripts +08:32:13.655 SCRIPT : SCRIPT : ScriptProjectManager init +08:32:13.698 SCRIPT : SCRIPT : Compiling GameLib scripts +08:32:13.727 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 +08:32:13.727 SCRIPT : SCRIPT : Compiling Game scripts +08:32:14.505 SCRIPT : Compiling Game scripts +08:32:14.505 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:32:14.505 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:32:14.728 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.739 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:32:14.765 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:32:14.856 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:32:14.856 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:32:14.857 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:32:14.857 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:32:14.885 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:32:14.929 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:32:14.941 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:32:14.941 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:32:14.943 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:32:14.978 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.978 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:32:14.979 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:32:14.979 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:32:15.036 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:32:15.140 SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 25833K 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: 2ef250fb +08:32:27.847 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +08:32:28.358 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:32:29.015 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:32:29.023 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:32:30.376 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:32:30.379 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:32:30.379 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:32:30.382 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:32:30.383 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:32:30.401 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:32:30.401 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:32:30.402 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:32:30.418 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:32:30.419 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:32:30.419 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:32:30.420 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:32:30.421 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:32:30.421 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:32:30.421 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:32:30.422 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:32:30.422 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:32:30.422 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:32:30.422 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:32:30.422 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:32:30.422 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:32:30.422 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 +08:32:30.422 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:32:30.422 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:32:30.422 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 +08:32:30.422 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:32:30.422 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:32:30.422 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 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:30.422 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.175 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.442 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.07,63.5457,7499.69> up=0.995704 +08:32:31.442 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.345002 angularSpeed=0.059733 +08:32:31.442 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:31.442 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.04,63.6117,7501.97> +08:32:31.442 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.04,63.3117,7501.97> terrainY=63.3164 tireTerrainGap=-0.00473785 +08:32:31.442 SCRIPT : ERR GEAR SUPPORT: center=<7012.04,63.6117,7501.97> radius=0.3 bottom=<7012.04,63.3117,7501.97> fraction=0.433053 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00472641 +08:32:31.442 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5942,7497.69> +08:32:31.442 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1442,7497.69> terrainY=64.1567 tireTerrainGap=-0.0125656 +08:32:31.442 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5942,7497.69> radius=0.45 bottom=<7009.88,64.1442,7497.69> fraction=0.397644 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0125198 +08:32:31.442 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2597,7497.75> +08:32:31.442 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8097,7497.75> terrainY=63.8177 tireTerrainGap=-0.00805283 +08:32:31.442 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2597,7497.75> radius=0.45 bottom=<7014.42,63.8097,7497.75> fraction=0.417778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00808716 +08:32:31.442 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:31.709 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:32:32.242 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:32.242 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.242 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.508 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5355,7499.71> up=0.994317 +08:32:32.508 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.102028 angularSpeed=0.0585238 +08:32:32.508 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:32.508 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.05,63.6213,7501.99> +08:32:32.508 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.05,63.3213,7501.99> terrainY=63.3145 tireTerrainGap=0.00682831 +08:32:32.508 SCRIPT : ERR GEAR SUPPORT: center=<7012.05,63.6213,7501.99> radius=0.3 bottom=<7012.05,63.3213,7501.99> fraction=0.485987 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00691605 +08:32:32.508 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6035,7497.7> +08:32:32.508 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1535,7497.7> terrainY=64.1488 tireTerrainGap=0.00473022 +08:32:32.508 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6035,7497.7> radius=0.45 bottom=<7009.93,64.1535,7497.7> fraction=0.476164 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00476074 +08:32:32.508 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2666,7497.79> +08:32:32.508 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8166,7497.79> terrainY=63.8149 tireTerrainGap=0.00174332 +08:32:32.508 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2666,7497.79> radius=0.45 bottom=<7014.47,63.8166,7497.79> fraction=0.4625 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.00175095 +08:32:32.508 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:32.508 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:32:32.775 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.309 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.309 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.309 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.576 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.531,7499.75> up=0.994244 +08:32:33.576 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0510799 angularSpeed=0.0476384 +08:32:33.576 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:33.576 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6153,7502.02> +08:32:33.576 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3153,7502.02> terrainY=63.3111 tireTerrainGap=0.00417709 +08:32:33.576 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6153,7502.02> radius=0.3 bottom=<7012.07,63.3153,7502.02> fraction=0.473567 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00418472 +08:32:33.576 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5924,7497.72> +08:32:33.576 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1424,7497.72> terrainY=64.1428 tireTerrainGap=-0.00038147 +08:32:33.576 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5924,7497.72> radius=0.45 bottom=<7009.97,64.1424,7497.72> fraction=0.453169 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000297546 +08:32:33.576 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.258,7497.83> +08:32:33.576 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.808,7497.83> terrainY=63.8124 tireTerrainGap=-0.00437546 +08:32:33.576 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.258,7497.83> radius=0.45 bottom=<7014.51,63.808,7497.83> fraction=0.434444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00442123 +08:32:33.576 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:33.842 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:34.376 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:32:34.642 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5286,7499.76> up=0.994199 +08:32:34.642 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:32:34.642 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:34.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6119,7502.03> +08:32:34.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3119,7502.03> terrainY=63.3102 tireTerrainGap=0.00168228 +08:32:34.642 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6119,7502.03> radius=0.3 bottom=<7012.08,63.3119,7502.03> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:32:34.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5928,7497.74> +08:32:34.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1428,7497.74> terrainY=64.1412 tireTerrainGap=0.00151825 +08:32:34.642 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5928,7497.74> radius=0.45 bottom=<7009.97,64.1428,7497.74> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +08:32:34.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.84> +08:32:34.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.84> terrainY=63.8118 tireTerrainGap=-0.0024147 +08:32:34.642 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.84> radius=0.45 bottom=<7014.51,63.8094,7497.84> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +08:32:34.642 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:34.909 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.442 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.708 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5286,7499.76> up=0.994199 +08:32:35.708 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:32:35.708 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:32:35.708 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6119,7502.03> +08:32:35.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3119,7502.03> terrainY=63.3102 tireTerrainGap=0.00168228 +08:32:35.709 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6119,7502.03> radius=0.3 bottom=<7012.08,63.3119,7502.03> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:32:35.709 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5928,7497.74> +08:32:35.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1428,7497.74> terrainY=64.1412 tireTerrainGap=0.00151825 +08:32:35.709 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5928,7497.74> radius=0.45 bottom=<7009.97,64.1428,7497.74> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +08:32:35.709 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.84> +08:32:35.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.84> terrainY=63.8118 tireTerrainGap=-0.0024147 +08:32:35.709 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.84> radius=0.45 bottom=<7014.51,63.8094,7497.84> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +08:32:35.709 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:32:35.976 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.976 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:32:35.976 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:32:35.976 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:32:35.977 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:32:35.977 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 diff --git a/docs/evidence/dedicated-2026-09-19-083213/profile/profile/.save/settings/ReforgerEngineSettings.conf b/docs/evidence/dedicated-2026-09-19-083213/profile/profile/.save/settings/ReforgerEngineSettings.conf new file mode 100644 index 0000000..9f14ff0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/profile/profile/.save/settings/ReforgerEngineSettings.conf @@ -0,0 +1,96 @@ +EngineUserSettings { + GameProjectUserSettings GameProjectUserSettings { + } + GraphicsQualitySettings GraphicsQualitySettings { + } + GrassMaterialSettings GrassMaterialSettings { + } + InputDeviceUserSettings InputDeviceUserSettings { + GamepadProfile InputProfileGamepad "{6A66680D49B27FD4}" { + LeftThumbHorizontal InputProfileKey "{6A66680D49B27FD3}" { + Transition CurveCubicSplineFloat "{6A66680D49B27FD2}" { + } + } + LeftThumbVertical InputProfileKey "{6A66680D49B27FD1}" { + Transition CurveCubicSplineFloat "{6A66680D49B3A9D2}" { + } + } + RightThumbHorizontal InputProfileKey "{6A66680D49B3A9D3}" { + Transition CurveCubicSplineFloat "{6A66680D49B3DB15}" { + } + } + RightThumbVertical InputProfileKey "{6A66680D49B3274B}" { + Transition CurveCubicSplineFloat "{6A66680D49ACB6DD}" { + } + } + LeftTrigger InputProfileKey "{6A66680D49AC34C2}" { + Transition CurveCubicSplineFloat "{6A66680D49AC2D4F}" { + } + } + RightTrigger InputProfileKey "{6A66680D49AC2DB0}" { + Transition CurveCubicSplineFloat "{6A66680D49AC696F}" { + } + } + } + JoystickProfile InputProfileJoystick "{6A66680D49AD8C01}" { + Axis00 InputProfileKey "{6A66680D49ADDFE7}" { + Transition CurveCubicSplineFloat "{6A66680D49ADDFE6}" { + } + } + Axis01 InputProfileKey "{6A66680D49AD0E94}" { + Transition CurveCubicSplineFloat "{6A66680D49AD6C11}" { + } + } + Axis02 InputProfileKey "{6A66680D49AEB567}" { + Transition CurveCubicSplineFloat "{6A66680D49AE8459}" { + } + } + Axis03 InputProfileKey "{6A66680D49AED11D}" { + Transition CurveCubicSplineFloat "{6A66680D49AE15EA}" { + } + } + Axis04 InputProfileKey "{6A66680D49AE15E9}" { + Transition CurveCubicSplineFloat "{6A66680D49AE4DC2}" { + } + } + Axis05 InputProfileKey "{6A66680D49AF9DFD}" { + Transition CurveCubicSplineFloat "{6A66680D49AFC7C3}" { + } + } + Axis06 InputProfileKey "{6A66680D49AF1B25}" { + Transition CurveCubicSplineFloat "{6A66680D49AF6CCB}" { + } + } + Axis07 InputProfileKey "{6A66680D49AF4E2B}" { + Transition CurveCubicSplineFloat "{6A66680D49A8B72B}" { + } + } + Axis08 InputProfileKey "{6A66680D49A8AB2F}" { + Transition CurveCubicSplineFloat "{6A66680D49A8AB2E}" { + } + } + Axis09 InputProfileKey "{6A66680D49A88A2C}" { + Transition CurveCubicSplineFloat "{6A66680D49A80A0F}" { + } + } + } + } + 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-083213/profile/profile/.save/settings/ReforgerGameSettings.conf b/docs/evidence/dedicated-2026-09-19-083213/profile/profile/.save/settings/ReforgerGameSettings.conf new file mode 100644 index 0000000..c7eec71 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/result.json b/docs/evidence/dedicated-2026-09-19-083213/result.json new file mode 100644 index 0000000..1715ffb --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/result.json @@ -0,0 +1,116 @@ +{ + "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-native-build/attempt-02-header/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-native-build/attempt-02-header", + "/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", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "2528466DE220D91C", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-server", + "{AD62322D5213C440}Missions/ERR_Everon_Base.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-addonsDir", + "/tmp/source/addons", + "-addons", + "2528466DE220D91C", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-server", + "{AD62322D5213C440}Missions/ERR_Everon_Base.conf" + ], + "seconds": 90, + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": true, + "realPlayers": 0, + "multiplayerProven": false, + "supervisorPid": 2151422, + "startedUTC": "2026-09-19T06:32:13Z", + "timeout": true, + "exit": -15, + "finishedUTC": "2026-09-19T06:33:43Z" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/review.json b/docs/evidence/dedicated-2026-09-19-083213/review.json new file mode 100644 index 0000000..6684e0b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/review.json @@ -0,0 +1,23 @@ +{ + "scriptErrors": [], + "nativeErrors": [ + "08:32:16.058 RESOURCES (E): Wrong GUID/name for resource @\"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\" in property \"AssignedMaterial\"", + "08:32:19.448 RESOURCES (E): Wrong GUID/name for resource @\"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\" in property \"Object\"", + "08:32:25.294 MATERIAL (E): Material file not found", + "08:32:25.294 MATERIAL (E): Cannot load material @\"system/wbdata/PreviewWindow/TransparentMat.emat\", creating default one (class MatPBRBasic)" + ], + "evidence": [ + "08:32:13.672 BACKEND : Backend Services are disabled.", + "08:32:15.175 ENGINE : Game successfully created.", + "08:32:15.458 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'.", + "08:32:16.207 WORLD : WORLD : Initializing world systems @\"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf\"", + "08:32:28.539 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false", + "08:32:35.977 SCRIPT : Rereintroduced [mission]: phase 0 -> 1" + ], + "limits": [ + "No real players or authentication; no multiplayer/performance acceptance", + "90-second supervisor termination, not graceful mission teardown", + "Native installed-asset resource errors preserved; no all-clean claim", + "No direct RplSession.Mode script instrumentation in this unchanged-source run" + ] +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source-manifest-after.json b/docs/evidence/dedicated-2026-09-19-083213/source-manifest-after.json new file mode 100644 index 0000000..17402f1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source-manifest-after.json @@ -0,0 +1,279 @@ +{ + ".gitattributes": "86cd7c797b8cac2699f5959add72303d5474f34fb0d141c36e6d8d095f7bc718", + ".gitignore": "1647a8de89a13712bdb3678396c3d09b268e90e99b17bd56a1462eef7efd00d1", + "README.md": "557ecb725cb83911cba20c285624bc2f7cd527932407f87844f824e12821524d", + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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/ai/resourceDatabase.rdb": "129c2d601531447ffd1864982af3f9fec03ed64db23623d44e29115c0c1998c2", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/chat/resourceDatabase.rdb": "d9a737a8d09f9fced6b1e7fe108e477c0fc9877ad044f3c5be0aaa7c60b0056e", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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/core/resourceDatabase.rdb": "5765206693e176009ad2d37e0d46141ff57fec2348ea6331ed9511433eb001cb", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "addons/map/resourceDatabase.rdb": "fe2d3eea469f3a69dcdb8567a7bb8119dcc03f940b423ad0babfc3b84e5cb0da", + "docs/acceptance.json": "283f08dc1658d214d3551d8b22f3a1d179fbb95f9d85cfbe63015adffc3b365d", + "docs/addons.json": "be6097ca5fb6ccb8c17bf4c05849e3e75225473162cdffef18a1cad13d056186", + "docs/admin-discovery-setting.md": "a140f09cd1f27635824a9fa27e88e99259fc0030ff3228dd1376e2e949edbc1c", + "docs/architecture.md": "6d7b52d5456b8fcd396421a7d8ed04be01c9111dabf38fa3e42b5db5fe4dce72", + "docs/base-gameplay-gaps.md": "8fb9ce4bf3d36507fdcd03af9681657c473bdf1f1d188380e7e4a83d47b10625", + "docs/base-replacement.md": "e99b648932b784e2993d086d6f56176fda5d853f53a4363cbf4754774cd8afec", + "docs/casualty-ground-source-sha256.json": "90ffa7d0c61e3823922ca9d4773e3d12fd5e9a1760a35c3b29fd12a53642f83a", + "docs/casualty-ground-support.md": "bf5bdf19f9dfa0fb83dfdb9a9933e5cf6a63be3918f74953759a639f85f121e4", + "docs/casualty-incapacitation.md": "2811fa294de0348fbdf8e78b0c66bc31a59dd8f1e43fe16af8da87cb7e789820", + "docs/casualty-loading.md": "9970b46ae4b9d0247e6bfad8378bba33c237f16cb49a4f53da49706291872b18", + "docs/casualty-remove-source-sha256.json": "4799a5843315fe5b5b2e933e8068a8b4bae6d924a49438eccb7f68ffc8e12be9", + "docs/configuration.md": "654657c3c6a515d101e4f43dba74a2146358a8ead56aa5444cac4aec48177bf5", + "docs/current-status.md": "b1003d1b7c0167304b694b50e31b851cdf763f986885c593a3426f369ae2dfa9", + "docs/dependency-audit.json": "d5e6cbcdc59c0a25e5748c590d6a195da9c97e8296119e07185f4c360bdfc4ae", + "docs/environment-restart-fixture.md": "1c1bd3872a67c5a59c12c1293d075d52fe0b563fcd5e9e10a1ce1850c7efcea9", + "docs/environment.md": "eff60684482ca8332e6ac4909850b6acd1048a5518ac70ae121dd16afb1a4409", + "docs/extraction.md": "215c96cbc004b3817a70ee40f30b181a72e78123e69e16a3585ed4d8d566837d", + "docs/faction-catalog-source-hashes.json": "46060bf2bfe6c39517e3140acb004f9b129c26695a7ee890b4aae571b3f0da76", + "docs/finite-mortar-operations.md": "e3d230810bd42a02afc798639ea36f08fe0dcc45d73d14457cf37e7791d499f3", + "docs/ground-transport.md": "4ef0b23e1e752b807344100948e7d0f880448158292f96309dcec5de9583a1a0", + "docs/guard-cancellation-fix.md": "41f8bd169de714df4df4a61189d47a37f9be2f1b1554edc99c29d8a1fa4aaf19", + "docs/guard-cancellation-source-hashes.json": "a1bf169c021931cdcba835d52e420df44e5dd2ef351257f0be10f63c8727afd4", + "docs/guard-source-hashes.json": "874845def1458901d61adeb090a464bbee7c7b18816406ae3780ff48fe855266", + "docs/initial-extraction-placement-source-sha256.json": "a44a32cedc54a70f635bf5840e7b29d35850a2212fcf64b1fd36ca096f10fffa", + "docs/initial-extraction-placement.md": "643b50d231dd9ceb49b81fd8f061cd114a9618fd1ad5a6f88724c0199a5a304c", + "docs/initial-guard-readiness.md": "5f2b45f3744f1f0316f198225a34e25d93eb4795bb05d6cfded8de1f1a116c18", + "docs/inventory-identity.md": "02092960cf937b175c5a190b426b84e0383104fa71f324c8b3a0ceb4fbe01164", + "docs/local-singleplayer-admission.md": "79943060c67330bd0b386733306653b59b1cb92c0924ff3bb0ffd3b582bec70a", + "docs/medical-kit-teardown-ownership.md": "2116a4062425f6fba029142ea0239264d313ec52f69ec7f88ee7b250a90814bf", + "docs/migration-provenance.json": "3f0ab1e9d1314265a7cdea3535a9e81af441c1b7a5c9c925e84aa824a1730663", + "docs/migration.md": "42514af2fbef0663d05f3353a26f3b2fcd4f7359634652d23fda53a8e7bfcd0f", + "docs/mission-faction-catalogs.md": "2ce3e49404d103a4c372ab0386de3bcf831bee87d95b1092372345a3d32ef8d2", + "docs/mission-time.md": "29d9a18c7acef0587764becbd04c2c63684644a05c7b3b2fe77defe1881ae7a0", + "docs/mortar-transactions-source-sha256.json": "dabad1cbc6eb3dd6f66b3e9ece574edcabff94adceeb2494b1adb2147608dbc0", + "docs/native-casualty-remove.md": "d55f54fba75e6cd1b9c30b489db17d58aa708afed792d1eafcf33d6d43c55e76", + "docs/native-errors.md": "f0cbc674803f5254db0c823bce2df437cad121756e19f6c658087d5d2fddb349", + "docs/native-followup-snapshot.json": "6b686ee641830edbc223cfcee4d6a198fcfa36ce8531bb16855fa9cbe9f5cbd2", + "docs/native-guard-cancellation.md": "880b545b8451a86f16ef47e0a378d081c8fecb1175bf9a8a122bf853ff9b816c", + "docs/native-initial-snapshot.json": "1ba571aa6da7c72d3db3eaaac54f5399820603ac33d7b21b87946eee3aa4eaf3", + "docs/native-medical-fixture.md": "3c915a74afbcac1dfa45f0c1e9d8d4801f33704cac9ce1b66355121805ecfbb1", + "docs/native-mortar-firing.md": "5fd4a5a4059ea6f8a3fa353b16c8f507316689daa60a883387c20114c4c16892", + "docs/objective-widget-lifecycle.md": "3ec0ee8c74b2a3117356477a16125a077dfbf010050e53280a00769b710958a0", + "docs/ordinary-diagnostic-splash.md": "6e07a87a03df81dd5c9d6c0f9602b26e08ec7fd7cf941b91f2b8007bd9d33e6a", + "docs/ordinary-game-startup.md": "6a95a55aa5fbccbe9a54fd7c695929d392f30bf2ce0c9f509304cfc4b627e14e", + "docs/ordinary-identity-diagnostics.md": "6d5017ff1bf27a276208cc42d567ab2c9f0e8936bf7dca3156c649f67eca359b", + "docs/ordinary-launch-callback-fix.md": "b74b8d0d011f25c367ea07b37e1a5ef488a2b378542ddca63ff9e981e649b874", + "docs/ordinary-splash-source-hashes.json": "b2e277e3487c2b790bce741527555bb74f6b9820b9e5626950ab709533d9fa97", + "docs/original-feature-coverage.json": "27cc7d2934abb3d307a4cfc0fb1f10ac53611bef64dcca99aa939f68c842e98a", + "docs/original-feature-coverage.md": "2807936a75db548342e4f89c01795395038270a6793aafe15c6069c82537c30a", + "docs/original-resource-inventory.json": "bc52a981c42f933134e637a027d08a0924abb19784782731590b7ef0b0e2e73f", + "docs/performance-comparison.md": "8065fae91ef0ef572b06f9aba079bd9f6ab96b25fa8c63e7a4a30b34f77765a0", + "docs/player-lifecycle.md": "903302c21da86668d6a3ff78a11d5eb2a5c36c30062f65a2039df717c195a140", + "docs/prisoner-loadout.md": "0b27f5fce4af457bea7133e461dbc37d8fa73fe126c8c3de90d723b358af389a", + "docs/radio-defence.md": "845078af4648e21781357b263916ce351e38489e4f49ebf17fb0bc75d7a859ff", + "docs/radio-document-loss.md": "44ce397e471b2fa5d8b773379f475e2c4cb93b33b936a76919e64e15251c2b9d", + "docs/radio-feedback.md": "3aaaecb318e2f737321bd08f9deb9323af153f2ae9ed196b55104c0616dd2be8", + "docs/recovery.md": "a91e170b0ea164f50db64acc1f19b78a6dce9392736f194a9192e85c68a71a88", + "docs/release-qualification.md": "7bdf42f51fe3a4c1d6187d0e6f5248ac9a68ce16873281909bd96e1cea6c406b", + "docs/runtime-testing.md": "2db2fc790785633e701e503e087a8a9de8633a11ed8f1b4f9f22972506005524", + "docs/site-authoring.md": "7a2e66e75ca3fdab43bd730f16e864c31909ab42fe060b00715caa13b8352ce7", + "docs/site-patrols.md": "5956f70a5ebea4167819a43c2a15f8b6d6460bc724b000f989d5ad5265d48d56", + "docs/validation.md": "48206348ef58afe52daf5dc8dca4aa65beaf00086aabfc995c808b5b0e8233fa", + "docs/vanilla-resources.json": "a18dbb7683641c439418091530219fd3d4de65b14e8a139577411c2a020a9903", + "tests/helicopter_availability_regression.py": "b8eabe0646467d6b55b7bc08c75121185410d3460c2c951f70737a5decbbfefe", + "tests/hq_network_regression.py": "3b077e1c527029d60432cbe2e0373c3a4a55ed4e80d6be59e639de8bc9411188", + "tests/mortar_salvo_regression.py": "6624f57ac28aabadd3ae2ba96b802910ffe739786d9aca0ad1caea68ad08eb5b", + "tests/policy_harness.py": "e861c30037b3e456f0c8ef1c02e9fe1417b601ffb15d2037974715008865e4be", + "tests/test_admin_setting_policy.py": "8d8ce49f4079d930c06bf23be410eb610e30082e3177a9f88bd6a0dfbf54189d", + "tests/test_casualty_ground_policy.py": "6b6fb5dccfef32eb46f7e5fee11d28acd3068c25837d2f1474491fd139be9316", + "tests/test_casualty_incapacitation.py": "fdeee4ae5b0e383c592ecbcd132b108ed6e92cb0e1f4767da02f95bfa33b7a4a", + "tests/test_casualty_loading_policy.py": "3a85d86dd1b19aa616fafb5d3a38f5374d5bb14d176844210150ef95df62033a", + "tests/test_casualty_remove_probe.py": "61578d8ca863d5e5be32dab2661fdd410e8441eaf1a9ae3b5123906eb3d57a68", + "tests/test_casualty_reservation_death.py": "dd5abb0ca2e7ec289f6933c406517515475d34ffeea95d732c329b42080773b7", + "tests/test_diagnostic_no_splash.py": "a9f54ced5864953c8031208d519c2dec9d604a70ad65bc738b51c6656a8aab22", + "tests/test_environment_policy.py": "4f844728d47ab3ad66c8a06f37833e0325f00bd04c0803d7dcf0eed14d8935c3", + "tests/test_environment_restart_runner.py": "05bc09bc45db70ba4a635b65b0a96aa38437ba50c98640b47ed8d0683c3a5f71", + "tests/test_extraction_placement_policy.py": "4cef86ff87338bc2e0bf66683c78050f3ba49d940d0c221a89333f4cb61a2442", + "tests/test_faction_catalog_scope.py": "c8fab92575f2621f47ed8685243338aa9ea717bb809c2ef9e8e0884af9df263b", + "tests/test_guard_cancellation_policy.py": "4a0671c62a5d875c0839d7cd9bdb0703cc28172ae6a3b483e041ec299b02efb1", + "tests/test_headless_game_runner.py": "29f045b65dbcb53f06359daa1ed7e981351517f9b08d0287da828eb1f8b4212a", + "tests/test_initial_guard_policy.py": "11354597457a240ec0427481ec0626cb952fbf06995a2955c24e81a5054edb5f", + "tests/test_inventory_enumeration_policy.py": "1a13ab9d7fdce46589a30ba005d65bada02a5a997f3fdb4dff025aec5514f802", + "tests/test_local_admission.py": "8ef122042a6c0c2258b1269e78606443546760ffdba6177c4f68f73769006e57", + "tests/test_mission_rules.py": "1561f50ea52a38227503ea3b5b2394a9303f82d9cea00268fbbe8fe83deb4b5b", + "tests/test_mortar_transactions.py": "3a17d444c1083336b52cb329fabaa1b9de7105cbe048e12b2d430600cc5bbcd1", + "tests/test_native_mortar_probe.py": "327f4c5ac1be24397c6c88c6b77d8889ae84d3b66c26caaeb400c1b2f373de5c", + "tests/test_performance_comparison.py": "5f932de9e9898acdd379f26c777a35c884269522dbf8c41991a7a25bf61c369a", + "tests/test_player_admission_policy.py": "9298c7f5f4b1da466ed044326e87f1b3ed6c7dc6fc65e8915ec08086fbc501e3", + "tests/test_prison_placement_policy.py": "269d8875e4a634bb0049acea644795ce6e58f335363d8e86ae1dae934d2ae28e", + "tests/test_radio_defence_policy.py": "9fd3c348d69c8c4e61c1135bb7e5df1b2b0ef07a2a5ad4faff1611d7b8e98097", + "tests/test_radio_feedback_policy.py": "d91c39d8291a16cfa5bb5fc5c7365a7421a7ce9f855a0b0250b76c2cb7cd1369", + "tests/test_recovery_policy.py": "e50879d0e2728f8ede3b67015d05bad5e34590dfdf315575b799adab1e23e186", + "tests/test_release_check.py": "8b6e755ed922ad129ba01c228989610a31f3a79841dc7cdddd4ddbd0e510971b", + "tests/test_settings_migration.py": "59fe9cd5f4564a6747a9a00fa422453830c6f94f6f1ba785d0592ef6feefe158", + "tests/test_site_discovery_policy.py": "79ccc06b74c05210428d602b4e22de1579523b163d5ab9ed2d52a29bed484896", + "tests/test_time_policy.py": "32c468c0a8852b7dfb873a93da80295434530131629eaca365a9c4aa9398c63a", + "tools/archive_native.py": "a302bd080275b72fbc47fa8108a98fb2689a377cbeb3cfe6e73596726bdab0bb", + "tools/check.py": "7460a22cf17fc9562fce73862c1b0791c830f2a8f25878626457618801599702", + "tools/compare_performance.py": "568acfee2525b8924f3e7a39784e8641f76d63bb3703dcce8251ab9ac9bb1854", + "tools/desktop/kwin-right-monitor.js": "8f0cf9ad290edf02e5f623cf1b0e36e2b266153ff81a022233c4cf67818b9499", + "tools/headless_game.py": "18ea1259e7f35121a7628edddecf5683ad49a1199f90f45ecdd7adbd120ca589", + "tools/headless_workbench.py": "7599cca63d7cad61201d7597ccb6776e3f8c681d1d7566b8d8261b35e3d8de69", + "tools/import_settings.py": "d9c250b52b6d29be3a80c3404f048b65a0b9b99e93b5213d5ce2be7d90a37324", + "tools/native_command.py": "4828826aa70b5ac31ab77157e658a8a3998de2829cdf782b8eee5b8c566d0385", + "tools/native_provenance.py": "d4777f1f6ffed6993f7009ee2af41b100e8e0138d60ebfdcc5404ff2128f8e2a", + "tools/native_report.py": "bb75ef5fe551f45776d441f15a49ccad4daf19abca505187f9b2d30102538658", + "tools/reference_guard.py": "545b67111927d73bf2020f291528ea6f2f687a994b3e37bf567f239c32c8cd78", + "tools/release_check.py": "65df1bff33638a583905ba5f6c583a095b9f7e38186b6f29d70b72a61525589e", + "tools/source_manifest.py": "c1a985348bad16f3b5b69ef7e545b6341eca298d8ae08111b8340b31535cc199" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source-manifest.json b/docs/evidence/dedicated-2026-09-19-083213/source-manifest.json new file mode 100644 index 0000000..17402f1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source-manifest.json @@ -0,0 +1,279 @@ +{ + ".gitattributes": "86cd7c797b8cac2699f5959add72303d5474f34fb0d141c36e6d8d095f7bc718", + ".gitignore": "1647a8de89a13712bdb3678396c3d09b268e90e99b17bd56a1462eef7efd00d1", + "README.md": "557ecb725cb83911cba20c285624bc2f7cd527932407f87844f824e12821524d", + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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/ai/resourceDatabase.rdb": "129c2d601531447ffd1864982af3f9fec03ed64db23623d44e29115c0c1998c2", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/chat/resourceDatabase.rdb": "d9a737a8d09f9fced6b1e7fe108e477c0fc9877ad044f3c5be0aaa7c60b0056e", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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/core/resourceDatabase.rdb": "5765206693e176009ad2d37e0d46141ff57fec2348ea6331ed9511433eb001cb", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "addons/map/resourceDatabase.rdb": "fe2d3eea469f3a69dcdb8567a7bb8119dcc03f940b423ad0babfc3b84e5cb0da", + "docs/acceptance.json": "283f08dc1658d214d3551d8b22f3a1d179fbb95f9d85cfbe63015adffc3b365d", + "docs/addons.json": "be6097ca5fb6ccb8c17bf4c05849e3e75225473162cdffef18a1cad13d056186", + "docs/admin-discovery-setting.md": "a140f09cd1f27635824a9fa27e88e99259fc0030ff3228dd1376e2e949edbc1c", + "docs/architecture.md": "6d7b52d5456b8fcd396421a7d8ed04be01c9111dabf38fa3e42b5db5fe4dce72", + "docs/base-gameplay-gaps.md": "8fb9ce4bf3d36507fdcd03af9681657c473bdf1f1d188380e7e4a83d47b10625", + "docs/base-replacement.md": "e99b648932b784e2993d086d6f56176fda5d853f53a4363cbf4754774cd8afec", + "docs/casualty-ground-source-sha256.json": "90ffa7d0c61e3823922ca9d4773e3d12fd5e9a1760a35c3b29fd12a53642f83a", + "docs/casualty-ground-support.md": "bf5bdf19f9dfa0fb83dfdb9a9933e5cf6a63be3918f74953759a639f85f121e4", + "docs/casualty-incapacitation.md": "2811fa294de0348fbdf8e78b0c66bc31a59dd8f1e43fe16af8da87cb7e789820", + "docs/casualty-loading.md": "9970b46ae4b9d0247e6bfad8378bba33c237f16cb49a4f53da49706291872b18", + "docs/casualty-remove-source-sha256.json": "4799a5843315fe5b5b2e933e8068a8b4bae6d924a49438eccb7f68ffc8e12be9", + "docs/configuration.md": "654657c3c6a515d101e4f43dba74a2146358a8ead56aa5444cac4aec48177bf5", + "docs/current-status.md": "b1003d1b7c0167304b694b50e31b851cdf763f986885c593a3426f369ae2dfa9", + "docs/dependency-audit.json": "d5e6cbcdc59c0a25e5748c590d6a195da9c97e8296119e07185f4c360bdfc4ae", + "docs/environment-restart-fixture.md": "1c1bd3872a67c5a59c12c1293d075d52fe0b563fcd5e9e10a1ce1850c7efcea9", + "docs/environment.md": "eff60684482ca8332e6ac4909850b6acd1048a5518ac70ae121dd16afb1a4409", + "docs/extraction.md": "215c96cbc004b3817a70ee40f30b181a72e78123e69e16a3585ed4d8d566837d", + "docs/faction-catalog-source-hashes.json": "46060bf2bfe6c39517e3140acb004f9b129c26695a7ee890b4aae571b3f0da76", + "docs/finite-mortar-operations.md": "e3d230810bd42a02afc798639ea36f08fe0dcc45d73d14457cf37e7791d499f3", + "docs/ground-transport.md": "4ef0b23e1e752b807344100948e7d0f880448158292f96309dcec5de9583a1a0", + "docs/guard-cancellation-fix.md": "41f8bd169de714df4df4a61189d47a37f9be2f1b1554edc99c29d8a1fa4aaf19", + "docs/guard-cancellation-source-hashes.json": "a1bf169c021931cdcba835d52e420df44e5dd2ef351257f0be10f63c8727afd4", + "docs/guard-source-hashes.json": "874845def1458901d61adeb090a464bbee7c7b18816406ae3780ff48fe855266", + "docs/initial-extraction-placement-source-sha256.json": "a44a32cedc54a70f635bf5840e7b29d35850a2212fcf64b1fd36ca096f10fffa", + "docs/initial-extraction-placement.md": "643b50d231dd9ceb49b81fd8f061cd114a9618fd1ad5a6f88724c0199a5a304c", + "docs/initial-guard-readiness.md": "5f2b45f3744f1f0316f198225a34e25d93eb4795bb05d6cfded8de1f1a116c18", + "docs/inventory-identity.md": "02092960cf937b175c5a190b426b84e0383104fa71f324c8b3a0ceb4fbe01164", + "docs/local-singleplayer-admission.md": "79943060c67330bd0b386733306653b59b1cb92c0924ff3bb0ffd3b582bec70a", + "docs/medical-kit-teardown-ownership.md": "2116a4062425f6fba029142ea0239264d313ec52f69ec7f88ee7b250a90814bf", + "docs/migration-provenance.json": "3f0ab1e9d1314265a7cdea3535a9e81af441c1b7a5c9c925e84aa824a1730663", + "docs/migration.md": "42514af2fbef0663d05f3353a26f3b2fcd4f7359634652d23fda53a8e7bfcd0f", + "docs/mission-faction-catalogs.md": "2ce3e49404d103a4c372ab0386de3bcf831bee87d95b1092372345a3d32ef8d2", + "docs/mission-time.md": "29d9a18c7acef0587764becbd04c2c63684644a05c7b3b2fe77defe1881ae7a0", + "docs/mortar-transactions-source-sha256.json": "dabad1cbc6eb3dd6f66b3e9ece574edcabff94adceeb2494b1adb2147608dbc0", + "docs/native-casualty-remove.md": "d55f54fba75e6cd1b9c30b489db17d58aa708afed792d1eafcf33d6d43c55e76", + "docs/native-errors.md": "f0cbc674803f5254db0c823bce2df437cad121756e19f6c658087d5d2fddb349", + "docs/native-followup-snapshot.json": "6b686ee641830edbc223cfcee4d6a198fcfa36ce8531bb16855fa9cbe9f5cbd2", + "docs/native-guard-cancellation.md": "880b545b8451a86f16ef47e0a378d081c8fecb1175bf9a8a122bf853ff9b816c", + "docs/native-initial-snapshot.json": "1ba571aa6da7c72d3db3eaaac54f5399820603ac33d7b21b87946eee3aa4eaf3", + "docs/native-medical-fixture.md": "3c915a74afbcac1dfa45f0c1e9d8d4801f33704cac9ce1b66355121805ecfbb1", + "docs/native-mortar-firing.md": "5fd4a5a4059ea6f8a3fa353b16c8f507316689daa60a883387c20114c4c16892", + "docs/objective-widget-lifecycle.md": "3ec0ee8c74b2a3117356477a16125a077dfbf010050e53280a00769b710958a0", + "docs/ordinary-diagnostic-splash.md": "6e07a87a03df81dd5c9d6c0f9602b26e08ec7fd7cf941b91f2b8007bd9d33e6a", + "docs/ordinary-game-startup.md": "6a95a55aa5fbccbe9a54fd7c695929d392f30bf2ce0c9f509304cfc4b627e14e", + "docs/ordinary-identity-diagnostics.md": "6d5017ff1bf27a276208cc42d567ab2c9f0e8936bf7dca3156c649f67eca359b", + "docs/ordinary-launch-callback-fix.md": "b74b8d0d011f25c367ea07b37e1a5ef488a2b378542ddca63ff9e981e649b874", + "docs/ordinary-splash-source-hashes.json": "b2e277e3487c2b790bce741527555bb74f6b9820b9e5626950ab709533d9fa97", + "docs/original-feature-coverage.json": "27cc7d2934abb3d307a4cfc0fb1f10ac53611bef64dcca99aa939f68c842e98a", + "docs/original-feature-coverage.md": "2807936a75db548342e4f89c01795395038270a6793aafe15c6069c82537c30a", + "docs/original-resource-inventory.json": "bc52a981c42f933134e637a027d08a0924abb19784782731590b7ef0b0e2e73f", + "docs/performance-comparison.md": "8065fae91ef0ef572b06f9aba079bd9f6ab96b25fa8c63e7a4a30b34f77765a0", + "docs/player-lifecycle.md": "903302c21da86668d6a3ff78a11d5eb2a5c36c30062f65a2039df717c195a140", + "docs/prisoner-loadout.md": "0b27f5fce4af457bea7133e461dbc37d8fa73fe126c8c3de90d723b358af389a", + "docs/radio-defence.md": "845078af4648e21781357b263916ce351e38489e4f49ebf17fb0bc75d7a859ff", + "docs/radio-document-loss.md": "44ce397e471b2fa5d8b773379f475e2c4cb93b33b936a76919e64e15251c2b9d", + "docs/radio-feedback.md": "3aaaecb318e2f737321bd08f9deb9323af153f2ae9ed196b55104c0616dd2be8", + "docs/recovery.md": "a91e170b0ea164f50db64acc1f19b78a6dce9392736f194a9192e85c68a71a88", + "docs/release-qualification.md": "7bdf42f51fe3a4c1d6187d0e6f5248ac9a68ce16873281909bd96e1cea6c406b", + "docs/runtime-testing.md": "2db2fc790785633e701e503e087a8a9de8633a11ed8f1b4f9f22972506005524", + "docs/site-authoring.md": "7a2e66e75ca3fdab43bd730f16e864c31909ab42fe060b00715caa13b8352ce7", + "docs/site-patrols.md": "5956f70a5ebea4167819a43c2a15f8b6d6460bc724b000f989d5ad5265d48d56", + "docs/validation.md": "48206348ef58afe52daf5dc8dca4aa65beaf00086aabfc995c808b5b0e8233fa", + "docs/vanilla-resources.json": "a18dbb7683641c439418091530219fd3d4de65b14e8a139577411c2a020a9903", + "tests/helicopter_availability_regression.py": "b8eabe0646467d6b55b7bc08c75121185410d3460c2c951f70737a5decbbfefe", + "tests/hq_network_regression.py": "3b077e1c527029d60432cbe2e0373c3a4a55ed4e80d6be59e639de8bc9411188", + "tests/mortar_salvo_regression.py": "6624f57ac28aabadd3ae2ba96b802910ffe739786d9aca0ad1caea68ad08eb5b", + "tests/policy_harness.py": "e861c30037b3e456f0c8ef1c02e9fe1417b601ffb15d2037974715008865e4be", + "tests/test_admin_setting_policy.py": "8d8ce49f4079d930c06bf23be410eb610e30082e3177a9f88bd6a0dfbf54189d", + "tests/test_casualty_ground_policy.py": "6b6fb5dccfef32eb46f7e5fee11d28acd3068c25837d2f1474491fd139be9316", + "tests/test_casualty_incapacitation.py": "fdeee4ae5b0e383c592ecbcd132b108ed6e92cb0e1f4767da02f95bfa33b7a4a", + "tests/test_casualty_loading_policy.py": "3a85d86dd1b19aa616fafb5d3a38f5374d5bb14d176844210150ef95df62033a", + "tests/test_casualty_remove_probe.py": "61578d8ca863d5e5be32dab2661fdd410e8441eaf1a9ae3b5123906eb3d57a68", + "tests/test_casualty_reservation_death.py": "dd5abb0ca2e7ec289f6933c406517515475d34ffeea95d732c329b42080773b7", + "tests/test_diagnostic_no_splash.py": "a9f54ced5864953c8031208d519c2dec9d604a70ad65bc738b51c6656a8aab22", + "tests/test_environment_policy.py": "4f844728d47ab3ad66c8a06f37833e0325f00bd04c0803d7dcf0eed14d8935c3", + "tests/test_environment_restart_runner.py": "05bc09bc45db70ba4a635b65b0a96aa38437ba50c98640b47ed8d0683c3a5f71", + "tests/test_extraction_placement_policy.py": "4cef86ff87338bc2e0bf66683c78050f3ba49d940d0c221a89333f4cb61a2442", + "tests/test_faction_catalog_scope.py": "c8fab92575f2621f47ed8685243338aa9ea717bb809c2ef9e8e0884af9df263b", + "tests/test_guard_cancellation_policy.py": "4a0671c62a5d875c0839d7cd9bdb0703cc28172ae6a3b483e041ec299b02efb1", + "tests/test_headless_game_runner.py": "29f045b65dbcb53f06359daa1ed7e981351517f9b08d0287da828eb1f8b4212a", + "tests/test_initial_guard_policy.py": "11354597457a240ec0427481ec0626cb952fbf06995a2955c24e81a5054edb5f", + "tests/test_inventory_enumeration_policy.py": "1a13ab9d7fdce46589a30ba005d65bada02a5a997f3fdb4dff025aec5514f802", + "tests/test_local_admission.py": "8ef122042a6c0c2258b1269e78606443546760ffdba6177c4f68f73769006e57", + "tests/test_mission_rules.py": "1561f50ea52a38227503ea3b5b2394a9303f82d9cea00268fbbe8fe83deb4b5b", + "tests/test_mortar_transactions.py": "3a17d444c1083336b52cb329fabaa1b9de7105cbe048e12b2d430600cc5bbcd1", + "tests/test_native_mortar_probe.py": "327f4c5ac1be24397c6c88c6b77d8889ae84d3b66c26caaeb400c1b2f373de5c", + "tests/test_performance_comparison.py": "5f932de9e9898acdd379f26c777a35c884269522dbf8c41991a7a25bf61c369a", + "tests/test_player_admission_policy.py": "9298c7f5f4b1da466ed044326e87f1b3ed6c7dc6fc65e8915ec08086fbc501e3", + "tests/test_prison_placement_policy.py": "269d8875e4a634bb0049acea644795ce6e58f335363d8e86ae1dae934d2ae28e", + "tests/test_radio_defence_policy.py": "9fd3c348d69c8c4e61c1135bb7e5df1b2b0ef07a2a5ad4faff1611d7b8e98097", + "tests/test_radio_feedback_policy.py": "d91c39d8291a16cfa5bb5fc5c7365a7421a7ce9f855a0b0250b76c2cb7cd1369", + "tests/test_recovery_policy.py": "e50879d0e2728f8ede3b67015d05bad5e34590dfdf315575b799adab1e23e186", + "tests/test_release_check.py": "8b6e755ed922ad129ba01c228989610a31f3a79841dc7cdddd4ddbd0e510971b", + "tests/test_settings_migration.py": "59fe9cd5f4564a6747a9a00fa422453830c6f94f6f1ba785d0592ef6feefe158", + "tests/test_site_discovery_policy.py": "79ccc06b74c05210428d602b4e22de1579523b163d5ab9ed2d52a29bed484896", + "tests/test_time_policy.py": "32c468c0a8852b7dfb873a93da80295434530131629eaca365a9c4aa9398c63a", + "tools/archive_native.py": "a302bd080275b72fbc47fa8108a98fb2689a377cbeb3cfe6e73596726bdab0bb", + "tools/check.py": "7460a22cf17fc9562fce73862c1b0791c830f2a8f25878626457618801599702", + "tools/compare_performance.py": "568acfee2525b8924f3e7a39784e8641f76d63bb3703dcce8251ab9ac9bb1854", + "tools/desktop/kwin-right-monitor.js": "8f0cf9ad290edf02e5f623cf1b0e36e2b266153ff81a022233c4cf67818b9499", + "tools/headless_game.py": "18ea1259e7f35121a7628edddecf5683ad49a1199f90f45ecdd7adbd120ca589", + "tools/headless_workbench.py": "7599cca63d7cad61201d7597ccb6776e3f8c681d1d7566b8d8261b35e3d8de69", + "tools/import_settings.py": "d9c250b52b6d29be3a80c3404f048b65a0b9b99e93b5213d5ce2be7d90a37324", + "tools/native_command.py": "4828826aa70b5ac31ab77157e658a8a3998de2829cdf782b8eee5b8c566d0385", + "tools/native_provenance.py": "d4777f1f6ffed6993f7009ee2af41b100e8e0138d60ebfdcc5404ff2128f8e2a", + "tools/native_report.py": "bb75ef5fe551f45776d441f15a49ccad4daf19abca505187f9b2d30102538658", + "tools/reference_guard.py": "545b67111927d73bf2020f291528ea6f2f687a994b3e37bf567f239c32c8cd78", + "tools/release_check.py": "65df1bff33638a583905ba5f6c583a095b9f7e38186b6f29d70b72a61525589e", + "tools/source_manifest.py": "c1a985348bad16f3b5b69ef7e545b6341eca298d8ae08111b8340b31535cc199" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/.gitattributes b/docs/evidence/dedicated-2026-09-19-083213/source/.gitattributes new file mode 100644 index 0000000..2992f07 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/.gitattributes @@ -0,0 +1,2 @@ +# Preserve native evidence bytes, including engine CRLF line endings. +docs/evidence/** -text -whitespace diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/.gitignore b/docs/evidence/dedicated-2026-09-19-083213/source/.gitignore new file mode 100644 index 0000000..c29b752 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/.gitignore @@ -0,0 +1,7 @@ +resourceDatabase.rdb* +*.pak +*.log +__pycache__/ +.build/ +.local/ +profiles/ diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/README.md b/docs/evidence/dedicated-2026-09-19-083213/source/README.md new file mode 100644 index 0000000..85a518c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/README.md @@ -0,0 +1,32 @@ +# Escapists Rereintroduced + +An independently authored replacement for the abandoned Escapists base mission, initially targeting vanilla Everon and up to twelve players. This is a separate repository and **not a completed or release-ready replacement**. The base rewrite is the primary deliverable; companion migration supports it. + +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 verified checkpoints and the prioritized remaining work. Ordinary-game startup and ground-to-helicopter casualty loading have retained native failures; manual gameplay, real multiplayer, complete physical HQ support, measured FPS improvement and release qualification remain unfinished. The [original responsibility inventory](docs/original-feature-coverage.md) is a scope map, not proof that every original behavior has been replaced. + +## Projects and scenarios + +Five Workbench projects live in `addons/core`, `addons/ai`, `addons/intel`, `addons/chat` and `addons/map`: + +- Open `addons/core/addon.gproj` for the independent base scenario, `{AD62322D5213C440}Missions/ERR_Everon_Base.conf`. +- Open `addons/chat/addon.gproj` for full companion integration, `{C1E20667DCE324ED}Missions/ERR_Everon.conf`. + +Both use the newly authored Everon child world. The only external addon dependency is vanilla Arma Reforger. All required successor resources are inside this repository. Vanilla assets are referenced, not redistributed; original restricted Escapists code, compositions, UI and audio are not included. + +See [player lifecycle](docs/player-lifecycle.md), [manual gameplay gaps](docs/base-gameplay-gaps.md), [release qualification](docs/release-qualification.md), [performance comparison tooling](docs/performance-comparison.md), [configuration and commands](docs/configuration.md), [site authoring](docs/site-authoring.md), [architecture](docs/architecture.md) and [migration priorities](docs/base-replacement.md). + +## Validation + +Run source/resource isolation and production-policy regressions with Python 3 and a C++17 compiler: + +```sh +python3 tools/check.py +``` + +For bounded hidden, muted local native tests, see [runtime testing](docs/runtime-testing.md). Recorded Workbench checkpoints include Core-only and companion-loaded escape/restart, finite stock and document-loss recovery, twelve physical prisoner/seat fixtures, real medical treatment, local result/objective widgets, patrol movement and HQ preemption/resumption. Clean environment/restart evidence exists after narrowing the vanilla vehicle catalogs; it does not qualify subsequent source changes. + +These scripted local fixtures manipulate positions and selected native states. They do not establish ordinary-game startup, manual escape/piloting, real remote reconnects, twelve connected players or improved FPS. [Current status](docs/current-status.md) separates those gaps from demonstrated development behavior. [Validation evidence](docs/validation.md) preserves exact source checkpoints and failed iterations; `docs/acceptance.json` keeps unverified release requirements pending. + +No release package has been published. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Prefabs/ERR/MortarCrew.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Prefabs/ERR/MortarCrew.et new file mode 100644 index 0000000..1159fe9 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Prefabs/ERR/MortarCrew.et.meta new file mode 100644 index 0000000..adaeb61 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c new file mode 100644 index 0000000..0b83c67 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQ.c @@ -0,0 +1,339 @@ +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; + + bool Eligible(ERR_GameMode mode) + { + if (ReservedForSupport || !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 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); } + 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(); } + void ReserveGroup(SCR_AIGroup group) + { + foreach (ERR_HQUnit unit : m_Units) + { + if (unit.Group != group) continue; + unit.Release(); + unit.ReservedForSupport = true; + } + } + 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(); + } + + 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) Accept(unit.PendingReport, now); + if (delivered != 0) { unit.Uplink = null; unit.PendingReport = 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_Mortars.Tick(now); + m_Journal.Flush(); + } + + override void 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-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQJournal.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQObservation.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_HQReport.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c new file mode 100644 index 0000000..bf9a3f8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c @@ -0,0 +1,461 @@ +// 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; + protected ref ERR_MortarReadiness m_Readiness; + protected ref ERR_MortarSupplyTransfer m_Transfer; + protected ref array m_AttemptedShells = {}; + protected bool m_Stopped; + vector Position; + vector Impact; + vector AimOffset; + int AimedShot = -1; + float FlightTime; + float AimedAt = -1; + 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 ""; + } + + void BeginRequest(ERR_HQReport report, float now) + { + 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))); + } + + 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; + 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; + } + + 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; + RadioOrder = null; + PendingRadioReport = null; + PendingSupplyReport = null; + if (m_Transfer) m_Transfer.Invalidate(); + Report = null; + AimedAt = -1; + 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)); + if (Activity.GetActionState() == EAIActionState.FAILED) Cancel("native artillery activity FAILED"); + else if (Activity.GetActionState() == 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); + 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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c new file mode 100644 index 0000000..53d5c2c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c @@ -0,0 +1,231 @@ +// 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; + 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))); + ResourceName ammo; + GetVariableIn(PORT_AMMO_PREFAB, ammo); + if (ammo != ERR_MortarBattery.SHELL) { system.Withhold(battery, "unsupported ammunition prefab", ammo); return ENodeResult.FAIL; } + Resource resource = Resource.Load(ammo); + if (!resource || !resource.IsValid() || !resource.GetResource()) { system.Withhold(battery, "shell resource load failed", ammo); return ENodeResult.FAIL; } + IEntitySource source = resource.GetResource().ToEntitySource(); + if (!source) { system.Withhold(battery, "shell resource has no entity source", ammo); return ENodeResult.FAIL; } + 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 ENodeResult.FAIL; } + if (!system.OutsideSettlements(impact)) { system.Withhold(battery, "aim target inside settlement exclusion", system.SettlementReason); return ENodeResult.FAIL; } + impact += salvoOffset; + impact[1] = SCR_TerrainHelper.GetTerrainY(impact); + float distance = vector.DistanceXZ(gun.GetOrigin(), impact); + float altitude = impact[1] - gun.GetOrigin()[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 ENodeResult.FAIL; } + 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 ENodeResult.FAIL; } + 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 ENodeResult.FAIL; } + if (!system.Safe(battery, impact, flight + 2)) { system.Withhold(battery, "aim impact safety rejected", system.SafetyReason); return ENodeResult.FAIL; } + battery.Impact = impact; + battery.AimOffset = salvoOffset; + battery.AimedShot = battery.OrderShots; + battery.FlightTime = flight; + battery.AimedAt = now; + battery.LastFailure = ""; + battery.Trace("AIM SOLUTION", "ready", string.Format("predicted impact=%1 flight=%2s charge index=%3 aim height offset=%4m latest source=M%5", impact, flight, charge, offset, report.MessageId)); + vector aim = impact + Vector(0, offset, 0); + SetVariableOut(PORT_AIM_POS, aim); + SetVariableOut(PORT_INIT_SPEED_ID, charge); + return ENodeResult.SUCCESS; + } +} + +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) + { + ERR_MortarSupplyState supply = battery.SupplyState(GetGame().GetWorld().GetWorldTime()); + if (supply == ERR_MortarSupplyState.PENDING) return ENodeResult.RUNNING; + if (supply == ERR_MortarSupplyState.FAILED) + { + ERR_MortarSystem system = ERR_MortarSystem.Get(); + if (system) system.Withhold(battery, "next native load lacks confirmed physical gunner ammunition"); + 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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c new file mode 100644 index 0000000..3e5ed42 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c @@ -0,0 +1,177 @@ +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; + 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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c new file mode 100644 index 0000000..5f6a38e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c @@ -0,0 +1,244 @@ +// 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; + 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); + mode.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"; } + 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"; + } + 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.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 > 10000) return Withhold(battery, "fresh aim solution required"); + ERR_HQReport report = Latest(battery, now); + if (!report) return Withhold(battery, ContactFailure(battery)); + 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); + } + + void Tick(float now) + { + if (m_Stopped || !Replication.IsServer()) return; + foreach (ERR_MortarBattery battery : m_Batteries) + { + if (battery.Rejected && !battery.Released) + { + battery.Cancel("native aim or firing authorization rejected"); + battery.NextOrder = now + 10000; + } + battery.Rejected = false; + battery.Update(now); + AdvanceOrder(battery, 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) + { + 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; + selected.BeginRequest(target, now); + 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-083213/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c new file mode 100644 index 0000000..a212c6c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c @@ -0,0 +1,241 @@ +#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(); + } + } +} + +// 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 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"; + } + static ERR_NativeMortarFiringProbe Active() { return s_Active; } + void ERR_NativeMortarFiringProbe(ERR_GameMode mode) + { + m_Mode = mode; + 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 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.CommandOpen || !m_Battery.Released || m_Battery.SourceId != m_Source || m_Battery.AimedAt < 0 || now - m_Battery.AimedAt > 10000 || m_Battery.FlightTime <= 0) + { m_BadProjectile = true; m_BadReason = "projectile lacks this delivered order and fresh native aim/commit"; } + 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_SawUplink = true; m_Deadline = now + 90000; m_Step = 1; return 0; + } + 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; + // 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 (now < m_StopUntil) return 0; + if (!Check(m_Battery.TotalShots == 1 && m_Events == 1 && m_Battery.OrderId == m_Order && remaining.Count() == m_StoppedShells && !m_Battery.CommandOpen && !m_Battery.Activity && !m_Battery.RadioOrder, "stopped service 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; + 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-083213/source/addons/ai/Scripts/Game/ERR/ERR_NativePatrolHQProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/Scripts/Game/ERR/ERR_SupportScenario.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/ai/addon.gproj b/docs/evidence/dedicated-2026-09-19-083213/source/addons/ai/addon.gproj new file mode 100644 index 0000000..ec3100b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/chat/Missions/ERR_Everon.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Missions/ERR_Everon.conf new file mode 100644 index 0000000..d63df9d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/chat/Missions/ERR_Everon.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Missions/ERR_Everon.conf.meta new file mode 100644 index 0000000..4d75705 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/chat/Scripts/Game/ERR/ERR_AdminCommands.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeMortarProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c new file mode 100644 index 0000000..cdc4f03 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c @@ -0,0 +1,434 @@ +// 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 ref ERR_NativeMortarFiringProbe m_ERRMortarFire; + protected float m_ERRNextProbeLog; + protected ref ERR_NativeRadioProbe m_ERRRadioProbe; + 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_ERRTestMortarFire = outcome == "mortar-fire"; + m_ERRTestPatrolHQ = outcome == "patrol-hq"; + m_ERRTestPlayerDeath = outcome == "player-death" || m_ERRTestRadioNetwork || m_ERRTestHQResponse || m_ERRTestMortar; + m_ERRSmokeDeadline = GetWorld().GetWorldTime() + 150000; + 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_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_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 to first mortar projectile and explicit stop; 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 == 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_ERRTestPatrolHQ) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRHQPatrolMovement = new ERR_NativePatrolProbe(this); + m_ERRSmokeStep = 130; + 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) + { + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + 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); + 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) + { + ERR_HQ hq = ERR_HQ.Cast(Command()); + if (!hq || !hq.ERR_ProbeSquadsReady()) return; + ERR_MovePlayer(hq.ERR_ProbeResponseOrigin()); + m_ERRSmokeStep = 111; + m_ERRSmokeWait = now + 1000; + } + else if (m_ERRSmokeStep == 111) + { + ERR_HQ hq = ERR_HQ.Cast(Command()); + if (now >= m_ERRNextProbeLog) + { + Print("ERR HQ PROBE: " + hq.ERR_ProbePerception()); + m_ERRNextProbeLog = now + 10000; + } + if (!hq.ERR_ProbeDeliveredResponse()) return; + if (!ERR_Check(true, "native visual contact reaches HQ and orders a different existing squad")) return; + if (!ERR_Check(hq.ERR_ProbeUniqueAssignments(), "HQ uses distinct waypoints within the existing force and order limits")) 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-083213/source/addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/chat/addon.gproj b/docs/evidence/dedicated-2026-09-19-083213/source/addons/chat/addon.gproj new file mode 100644 index 0000000..d2e277c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/EveronSites.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/EveronSites.conf new file mode 100644 index 0000000..e15dc4b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/EveronSites.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/EveronSites.conf.meta new file mode 100644 index 0000000..98c7363 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf new file mode 100644 index 0000000..bb80989 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/Factions/MissionVehicles.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Configs/ERR/Factions/US.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/US.conf new file mode 100644 index 0000000..8d454a0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/Factions/US.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Configs/ERR/Factions/USSR.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/Factions/USSR.conf new file mode 100644 index 0000000..53e7886 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/Factions/USSR.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Configs/ERR/GameOverScreens.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/GameOverScreens.conf new file mode 100644 index 0000000..a7eafe8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/GameOverScreens.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/GameOverScreens.conf.meta new file mode 100644 index 0000000..8f032b0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/VanillaFactions.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/VanillaFactions.conf new file mode 100644 index 0000000..ca1abae --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Configs/ERR/VanillaFactions.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Configs/ERR/VanillaFactions.conf.meta new file mode 100644 index 0000000..47f3162 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Missions/ERR_Everon_Base.conf b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Missions/ERR_Everon_Base.conf new file mode 100644 index 0000000..b44da89 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Missions/ERR_Everon_Base.conf.meta b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Prefabs/ERR/Extraction.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Extraction.et new file mode 100644 index 0000000..2ad6dc1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Extraction.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Extraction.et.meta new file mode 100644 index 0000000..742075d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/FactionManager.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FactionManager.et new file mode 100644 index 0000000..b2c8f02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/FactionManager.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FactionManager.et.meta new file mode 100644 index 0000000..170d8da --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/FieldCover.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FieldCover.et new file mode 100644 index 0000000..ec18f1f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/FieldCover.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/FieldCover.et.meta new file mode 100644 index 0000000..c8c4e70 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/GameMode.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/GameMode.et new file mode 100644 index 0000000..41a9d62 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/GameMode.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/GameMode.et.meta new file mode 100644 index 0000000..f8dfb87 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/ObjectiveDocument.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/ObjectiveDocument.et new file mode 100644 index 0000000..850c6c1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/ObjectiveDocument.et.meta new file mode 100644 index 0000000..68f2b8a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Patrol.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Patrol.et new file mode 100644 index 0000000..7295625 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Patrol.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Patrol.et.meta new file mode 100644 index 0000000..6eef9b5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Prison.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prison.et new file mode 100644 index 0000000..d51ec79 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prison.et @@ -0,0 +1,90 @@ +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 + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prison.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prison.et.meta new file mode 100644 index 0000000..3341905 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/PrisonDoor.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonDoor.et new file mode 100644 index 0000000..2725dd5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonDoor.et.meta new file mode 100644 index 0000000..018cdc5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/PrisonWall.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonWall.et new file mode 100644 index 0000000..90d2735 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/PrisonWall.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/PrisonWall.et.meta new file mode 100644 index 0000000..a0183ef --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Prisoner.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prisoner.et new file mode 100644 index 0000000..8b8d49f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Prisoner.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Prisoner.et.meta new file mode 100644 index 0000000..edf4d1e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Radio.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Radio.et new file mode 100644 index 0000000..8fd6e6b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/Radio.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/Radio.et.meta new file mode 100644 index 0000000..9b57d02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/SpectatorCamera.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SpectatorCamera.et new file mode 100644 index 0000000..db6fbed --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SpectatorCamera.et.meta new file mode 100644 index 0000000..c192bbd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/SupplyCache.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplyCache.et new file mode 100644 index 0000000..de68b39 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/SupplyCache.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplyCache.et.meta new file mode 100644 index 0000000..3ecec02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/SupplySite.et b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplySite.et new file mode 100644 index 0000000..118178f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Prefabs/ERR/SupplySite.et.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Prefabs/ERR/SupplySite.et.meta new file mode 100644 index 0000000..f511bfd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Actions.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Actions.c new file mode 100644 index 0000000..4145197 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Actions.c @@ -0,0 +1,39 @@ +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); + } + 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 +{ + override bool CanBePerformedScript(IEntity user) + { + ERR_GameMode mode = ERR_GameMode.Get(); + return mode && mode.Phase() > ERR_Phase.PRISON && 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)); + return mode && mode.Phase() == ERR_Phase.RADIO_SEARCH && location && location.Knowledge() == 2 && ERR_Actors.CanFight(user); + } + 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-083213/source/addons/core/Scripts/Game/ERR/ERR_Actors.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_AdminService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c new file mode 100644 index 0000000..41dc387 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c @@ -0,0 +1,305 @@ +// 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 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; } + // 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); + 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); + 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(); + while (!m_Pending.IsEmpty()) Resolve(m_Pending[m_Pending.Count() - 1], false); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c new file mode 100644 index 0000000..f5b424b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c @@ -0,0 +1,51 @@ +// 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 SCR_MapMarkerBase 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; + if (!m_ERRMarker) + { + m_ERRMarker = new SCR_MapMarkerBase(); + m_ERRMarker.SetType(SCR_EMapMarkerType.PLACED_CUSTOM); + vector p = Position(); + m_ERRMarker.SetWorldPos(Math.Round(p[0]), Math.Round(p[2])); + m_ERRMarker.SetMarkerConfigID(0); + manager.InsertStaticMarker(m_ERRMarker, true); + } + string label = "Unknown location"; + 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(); + } + m_ERRMarker.SetCustomText(label); + 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 (manager && m_ERRMarker) manager.RemoveStaticMarker(m_ERRMarker); + m_ERRMarker = null; + super.OnDelete(owner); + } +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c new file mode 100644 index 0000000..bcafaaa --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c @@ -0,0 +1,62 @@ +// 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) + { + 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-083213/source/addons/core/Scripts/Game/ERR/ERR_DocumentComponent.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_ExtractionService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c new file mode 100644 index 0000000..05b813b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_GameMode.c @@ -0,0 +1,419 @@ +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; + [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; } + 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() || !ERR_Actors.Player(player) || !ERR_Actors.CanFight(player)) 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_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-083213/source/addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Inventory.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Location.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_MissionRules.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c new file mode 100644 index 0000000..770240b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c @@ -0,0 +1,738 @@ +// 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_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 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(); + 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() + { + 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_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 == "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 (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 == 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_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; + 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(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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeContractsProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeDefinitionProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeExtractionProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeMedicalProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeObjectiveProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativePatrolProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeRecoveryProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeResultProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeSiteSurvey.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c new file mode 100644 index 0000000..80f8607 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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(); + } + SCR_EntityCatalogManagerComponent catalog = SCR_EntityCatalogManagerComponent.GetInstance(); + 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, catalog != null); + 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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeTimeProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportProbe.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_NativeTransportSurvey.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_ObjectiveText.c new file mode 100644 index 0000000..00d2df8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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. Living prisoners aboard escape, including unconscious passengers. 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 the station and tune its radio to start the transmission."; + return "Choose either marked supply cache. Each has equipment and enough radio documents to identify the station. If one cache is lost, use the other. If every document is lost, a close approach with a clear view can identify the station itself. Nearby medical and guard sites can 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-083213/source/addons/core/Scripts/Game/ERR/ERR_Objectives.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Observer.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Observer.c new file mode 100644 index 0000000..0b27c66 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_Observer.c @@ -0,0 +1,225 @@ +enum ERR_ObserverReason +{ + NONE, + SPENT_LIFE, + LATE_EXTRACTION, + SPAWN_UNAVAILABLE +} + +// 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 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 (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(); + if (!m_ERRObserverReady) + { + SCR_HintManagerComponent hints = SCR_HintManagerComponent.GetInstance(); + if (hints) hints.ShowCustom("You are spectating the surviving prisoners until the next round.", "Spectating", 12); + m_ERRObserverReady = true; + } + } + 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-083213/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c new file mode 100644 index 0000000..fae422c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c @@ -0,0 +1,130 @@ +// 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); + } + +} + +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() + { + 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); + } +} + +#endif diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerAdminCommands.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerGuide.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_RecoveryService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Resources.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Settings.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_SiteService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnFinalization.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c new file mode 100644 index 0000000..5c62327 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c @@ -0,0 +1,375 @@ +[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; + } + 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; } + 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); + 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) + { + if (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-083213/source/addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_Supplies.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/Game/ERR/ERR_TimeService.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/Worlds/ERR_Everon.ent b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Worlds/ERR_Everon.ent new file mode 100644 index 0000000..8561fb7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Worlds/ERR_Everon.ent.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/Worlds/ERR_Everon.ent.meta new file mode 100644 index 0000000..417bfa5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/core/Worlds/ERR_Everon_Layers/default.layer b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/core/addon.gproj b/docs/evidence/dedicated-2026-09-19-083213/source/addons/core/addon.gproj new file mode 100644 index 0000000..54287e7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c new file mode 100644 index 0000000..6e4fccd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/intel/Scripts/Game/ERR/ERR_IntelService.c @@ -0,0 +1,76 @@ +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); + } + } + + + 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-083213/source/addons/intel/addon.gproj b/docs/evidence/dedicated-2026-09-19-083213/source/addons/intel/addon.gproj new file mode 100644 index 0000000..5b29a17 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/map/Materials/ERRM_MapRenderTarget.emat b/docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Materials/ERRM_MapRenderTarget.emat new file mode 100644 index 0000000..d70697c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta b/docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Materials/ERRM_MapRenderTarget.emat.meta new file mode 100644 index 0000000..e99a6d5 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c b/docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c new file mode 100644 index 0000000..5c01b0d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c @@ -0,0 +1,200 @@ +[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 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) + { + CompleteMapModeSwitch(); + return; + } + + m_ESMMapEntity.OpenMap(mapConfig); + m_bESMOwnsMapRenderer = true; + RestoreCharacterCamera(); + + GetGame().GetCallqueue().CallLater(CenterMapOnHolder, MAP_SETUP_DELAY_MS, false); + GetGame().GetCallqueue().CallLater(FinishMapCapture, MAP_CAPTURE_DELAY_MS, false); + } + + protected void CenterMapOnHolder() + { + if (!m_bESMOwnsMapRenderer || !m_ESMMapEntity || !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; + + // Freeze the last rendered frame before closing the auxiliary map. + // Leaving the widget enabled would redraw the closed map as an empty + // texture and make the physical map appear to vanish. + if (m_ESMRenderTarget) + m_ESMRenderTarget.SetEnabled(false); + + if (m_ESMMapEntity && m_ESMMapEntity.IsOpen()) + m_ESMMapEntity.CloseMap(); + + m_bESMOwnsMapRenderer = false; + RestoreCharacterCamera(); + CompleteMapModeSwitch(); + } + + 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; + GetGame().GetCallqueue().Remove(TryCaptureMapSurface); + GetGame().GetCallqueue().Remove(CenterMapOnHolder); + GetGame().GetCallqueue().Remove(FinishMapCapture); + + if (m_bESMOwnsMapRenderer && m_ESMMapEntity && m_ESMMapEntity.IsOpen()) + m_ESMMapEntity.CloseMap(); + + m_bESMOwnsMapRenderer = false; + m_ESMCharacterOwner = null; + RestoreCharacterCamera(); + } + + protected void RestoreCharacterCamera() + { + if (!GetGame()) 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-083213/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout b/docs/evidence/dedicated-2026-09-19-083213/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout new file mode 100644 index 0000000..bcefcb9 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta b/docs/evidence/dedicated-2026-09-19-083213/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-083213/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-083213/source/addons/map/addon.gproj b/docs/evidence/dedicated-2026-09-19-083213/source/addons/map/addon.gproj new file mode 100644 index 0000000..5d0a4d2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/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-083213/source/docs/acceptance.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/acceptance.json new file mode 100644 index 0000000..5e69160 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/acceptance.json @@ -0,0 +1,533 @@ +{ + "target": "Everon, vanilla factions, 12 players", + "cases": { + "independent_native_build": { + "status": "pending", + "evidence": [] + }, + "prison_geometry_and_spawn": { + "status": "pending", + "evidence": [] + }, + "escape_loop": { + "status": "pending", + "evidence": [] + }, + "join_late": { + "status": "pending", + "evidence": [] + }, + "reconnect_identity": { + "status": "pending", + "evidence": [] + }, + "death_unconsciousness_revive": { + "status": "pending", + "evidence": [] + }, + "respawn_and_spectators": { + "status": "pending", + "evidence": [] + }, + "partial_escape": { + "status": "pending", + "evidence": [] + }, + "defeat_restart": { + "status": "pending", + "evidence": [] + }, + "interrupted_reports": { + "status": "pending", + "evidence": [] + }, + "stale_contacts": { + "status": "pending", + "evidence": [] + }, + "support_losses": { + "status": "pending", + "evidence": [] + }, + "ammunition_depletion": { + "status": "pending", + "evidence": [] + }, + "cleanup_no_duplicate_orders_or_spawns": { + "status": "pending", + "evidence": [] + }, + "twelve_players": { + "status": "pending", + "evidence": [] + }, + "equivalent_workload_fps_improvement": { + "status": "pending", + "evidence": [] + }, + "own_identity_release_package": { + "status": "pending", + "evidence": [] + } + }, + "development_checks": { + "scripted_local_escape_and_restart": { + "status": "passed", + "scope": "Two scripted offline Workbench rounds; 40 assertions; excludes manual play and multiplayer", + "evidence": [ + "docs/evidence/native-2026-09-19-003520/report.json", + "docs/evidence/native-2026-09-19-003520/console.log.txt", + "docs/evidence/native-2026-09-19-003520/source-sha256.json" + ] + }, + "clean_native_runtime": { + "status": "pending", + "scope": "The 065351 source snapshot passed two environment/restart rounds with zero native errors. Subsequent production changes require another current-source full-loop run before this release gate can pass. Historical evidence remains recorded in scripted_environment_restart.", + "evidence": [ + "docs/evidence/native-2026-09-19-065351/report.json", + "docs/evidence/native-2026-09-19-065351/console.log.txt", + "docs/evidence/native-2026-09-19-065351/source-sha256.json" + ] + }, + "scripted_helicopter_loss_and_restart": { + "status": "passed", + "scope": "Two complete local Workbench rounds; 45 passing assertions including partial third-round startup; does not cover all-player death or multiplayer", + "evidence": [ + "docs/evidence/native-2026-09-19-003902/report.json", + "docs/evidence/native-2026-09-19-003902/console.log.txt", + "docs/evidence/native-2026-09-19-003902/source-sha256.json" + ] + }, + "scripted_death_spectator_restart": { + "status": "passed", + "scope": "Two local Workbench rounds on headless Gamescope; 20 assertions; identity roster, actual character death, local camera activation, all-dead defeat and restart. Does not verify real network reconnect or remote spectator streaming.", + "evidence": [ + "docs/evidence/native-2026-09-19-011025/report.json", + "docs/evidence/native-2026-09-19-011025/console.log.txt", + "docs/evidence/native-2026-09-19-011025/source-sha256.json" + ] + }, + "scripted_physical_radios": { + "status": "passed", + "scope": "Two headless Workbench rounds; 30 assertions including roster/death checks. Three six-person squads with real manpacks, uplink/downlink delivery and interrupted receiving-radio loss. Does not yet prove observed-contact-driven strategic assignments.", + "evidence": [ + "docs/evidence/native-2026-09-19-011738/report.json", + "docs/evidence/native-2026-09-19-011738/console.log.txt", + "docs/evidence/native-2026-09-19-011738/source-sha256.json" + ] + }, + "scripted_native_hq_response": { + "status": "passed", + "scope": "Two headless Workbench rounds; 24 assertions. Real vanilla visual perception, radio report delivery, HQ downlink and distinct native search waypoints for other existing squads. Inherited catalog teardown and vehicle errors still fail the overall runtime report.", + "evidence": [ + "docs/evidence/native-2026-09-19-012234/report.json", + "docs/evidence/native-2026-09-19-012234/console.log.txt", + "docs/evidence/native-2026-09-19-012234/rereintroduced-hq.log.txt", + "docs/evidence/native-2026-09-19-012234/source-sha256.json" + ] + }, + "scripted_silent_escape_regression": { + "status": "passed", + "scope": "Two headless muted Workbench rounds, 52 assertions, no script/runtime exceptions; current roster and physical-radio patrol composition. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-013224/report.json", + "docs/evidence/native-2026-09-19-013224/runner.json.txt", + "docs/evidence/native-2026-09-19-013224/source-sha256.json" + ] + }, + "scripted_mortar_inventory_losses": { + "status": "passed", + "scope": "Two headless muted local Workbench rounds; 30 assertions. One authored gun, four physical crew, manpack, 27 inventory shells; removed ammunition and destroyed assets stay depleted/lost. Actual mortar firing remains unverified. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-014052/report.json", + "docs/evidence/native-2026-09-19-014052/source-sha256.json" + ] + }, + "scripted_core_only_escape": { + "status": "passed", + "scope": "Two muted headless Core-only Workbench rounds, 26 assertions. Loaded addons are engine core, vanilla ArmaReforger and ERR_Core. No successor AI/Intel/Chat/Map loaded. Physical clues, radio defence, helicopter occupancy, victory and restart pass. Native vehicle schema and catalog teardown errors remain; manual and multiplayer acceptance pending.", + "evidence": [ + "docs/evidence/native-2026-09-19-015043/report.json", + "docs/evidence/native-2026-09-19-015043/runner.json.txt", + "docs/evidence/native-2026-09-19-015043/source-sha256.json" + ] + }, + "scripted_core_native_objectives": { + "status": "passed", + "scope": "Two Core-only muted headless Workbench rounds, 38 assertions, no script or VM exceptions. Native phase tasks, completion, discovery-responsive instructions, defence countdown/reset, escape and restart. Seven inherited vehicle schema errors remain; UI usability and network replication remain unverified.", + "evidence": [ + "docs/evidence/native-2026-09-19-015605/report.json", + "docs/evidence/native-2026-09-19-015605/runner.json.txt", + "docs/evidence/native-2026-09-19-015605/source-sha256.json" + ] + }, + "scripted_companions_after_core_split": { + "status": "passed", + "scope": "One muted headless full-integration Workbench round, 26 assertions, no script or VM exceptions. Existing companions still complete the escape after Core takes ownership of recovery, markers and native tasks. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-015947/report.json", + "docs/evidence/native-2026-09-19-015947/runner.json.txt", + "docs/evidence/native-2026-09-19-015947/source-sha256.json" + ] + }, + "scripted_death_after_core_objectives": { + "status": "passed", + "scope": "One full-integration muted headless Workbench round, 10 assertions, no script/VM exceptions. Real death, one-life identity rules, spectator activation and all-dead defeat still work after adding native Core objectives. Seven inherited vehicle errors remain; this does not verify rendered task UI or network clients.", + "evidence": [ + "docs/evidence/native-2026-09-19-020149/report.json", + "docs/evidence/native-2026-09-19-020149/source-sha256.json" + ] + }, + "scripted_authored_sites_and_finite_stock": { + "status": "passed", + "scope": "Two Core-only muted headless Workbench rounds, 62 assertions and no script/VM exceptions. Four configured sites, 52 authored stock entities, invalid-definition rejection, clear crate footprints, physical storage-to-player clue transfer, no refill or replacement after cache loss, radio progression, extraction and restart. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-022704/report.json", + "docs/evidence/native-2026-09-19-022704/console.log.txt", + "docs/evidence/native-2026-09-19-022704/source-sha256.json" + ] + }, + "scripted_sites_companion_escape": { + "status": "passed", + "scope": "Two full-integration muted headless Workbench rounds; 52 assertions. Configured sites, physical cache-document transfers and the escape loop work with all companions. The inherited pair of catalog teardown errors and seven vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-023120/report.json", + "docs/evidence/native-2026-09-19-023120/source-sha256.json" + ] + }, + "scripted_site_guard_radios": { + "status": "passed", + "scope": "One muted headless full-integration Workbench round, 15 assertions, no script/VM exceptions. All four authored six-person guard squads have physical manpacks; production uplink/downlink works and removal of the receiving radio interrupts delivery. Death, local spectator and defeat also pass. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-023514/report.json", + "docs/evidence/native-2026-09-19-023514/source-sha256.json" + ] + }, + "scripted_base_catalog_and_commands": { + "status": "passed", + "scope": "Two Core-only muted headless Workbench rounds, 92 assertions and no script/VM exceptions. Injected prisoner/guard factions, invalid catalog rejection, server service authorization/parser checks, settings persistence and normal escape/restart pass. These service calls do not establish remote RPC ownership or UI acceptance. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-025539/report.json", + "docs/evidence/native-2026-09-19-025539/source-sha256.json" + ] + }, + "scripted_invalid_startup": { + "status": "passed", + "scope": "One Core-only muted headless fault-injection run, four assertions. A deliberately invalid in-memory faction configuration prevents all site/player/stock spawning, stops services, retains the admin-readable diagnosis and rejects progression into gameplay. The expected startup ERROR is deliberately retained alongside seven inherited vehicle schema errors; this is negative-path evidence, not a clean runtime pass.", + "evidence": [ + "docs/evidence/native-2026-09-19-030156-expected-startup-failure/report.json", + "docs/evidence/native-2026-09-19-030156-expected-startup-failure/source-sha256.json" + ] + }, + "scripted_unconscious_radio_survivor": { + "status": "passed", + "scope": "Two Core-only muted headless escape/restart rounds, 102 assertions, no script/VM exceptions. Actual native character unconsciousness lasts 35 seconds, preserves survivor/identity/body/camera, prevents radio progress and does not cause defeat. Restored consciousness restarts defence without another life. Controller transitions are scripted; medical treatment, bleedout and remote revive remain unverified. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-030347/report.json", + "docs/evidence/native-2026-09-19-030347/source-sha256.json" + ] + }, + "scripted_companion_base_command_contracts": { + "status": "passed", + "scope": "Two full-integration muted headless Workbench rounds, 96 assertions, no script/VM exceptions. Core catalog/admin checks, existing HQ and Intel aliases, guarded journal access, complete escape and restart pass with all companions loaded. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-030903/report.json", + "docs/evidence/native-2026-09-19-030903/source-sha256.json" + ] + }, + "scripted_death_after_base_admin": { + "status": "passed", + "scope": "One full-integration muted headless Workbench round, 32 assertions and no script/VM exceptions. Catalog and command checks plus native death, spent-life retention, local spectator activation and all-dead defeat pass after Core owns controller command initialization. Seven inherited vehicle schema errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-031256/report.json", + "docs/evidence/native-2026-09-19-031256/source-sha256.json" + ] + }, + "scripted_alternate_cache_initial_escape": { + "status": "passed", + "scope": "One Core-only muted headless Workbench round; 65 assertions and no script/VM exceptions. Seven sites and 117 stock items prepare. The southern crate is deleted before taking documents; western documents independently permit radio defence and extraction. Optional discovery rejects unconscious and distant players and emits one transition event. Seven inherited vehicle schema errors remain. Subsequent tests correct cover orientation and add obstruction/collision checks; no manual or multiplayer acceptance.", + "evidence": [ + "docs/evidence/native-2026-09-19-033110/report.json", + "docs/evidence/native-2026-09-19-033110/source-sha256.json" + ] + }, + "scripted_alternate_cache_restart_and_visibility": { + "status": "passed", + "scope": "Two Core-only muted headless Workbench cache-loss escape/restart rounds; 148 passing assertions. Seven sites, 117 stock items, independent western radio clues after primary crate deletion, no refills/replacement, upright colliding outpost cover, blocked/clear nearby discovery, one discovery event and unconscious radio interruption. Two inherited catalog-manager script errors and seven vehicle schema errors fail the overall native report. No manual, medical-treatment, multiplayer or FPS acceptance.", + "evidence": [ + "docs/evidence/native-2026-09-19-033719/report.json", + "docs/evidence/native-2026-09-19-033719/console.log.txt", + "docs/evidence/native-2026-09-19-033719/source-sha256.json" + ] + }, + "scripted_expanded_route_companion_escape": { + "status": "passed", + "scope": "One full-companion muted headless Workbench escape round, 48 assertions, no script/VM exceptions. The seven-site mission prepares its finite stock with HQ/Intel/Chat/Map loaded; primary-cache document transfer, preserved admin aliases, radio interruption and physical extraction pass. Seven inherited vehicle schema errors remain; no multiplayer or manual gameplay claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-034344/report.json", + "docs/evidence/native-2026-09-19-034344/source-sha256.json" + ] + }, + "scripted_six_site_guard_radios": { + "status": "passed", + "scope": "One full-companion muted headless Workbench round, 37 assertions, no script/VM exceptions. All six physical six-person guard squads have manpacks. Production uplink/downlink delivers, removal of the actual receiving radio interrupts an order, and death/spectator/defeat completes. Seven inherited vehicle schema errors remain. This checks the selected production route, not every possible multi-hop path or multiplayer.", + "evidence": [ + "docs/evidence/native-2026-09-19-034556/report.json", + "docs/evidence/native-2026-09-19-034556/rereintroduced-hq.log.txt", + "docs/evidence/native-2026-09-19-034556/source-sha256.json" + ] + }, + "scripted_twelve_physical_occupants": { + "status": "passed", + "scope": "One Core-only hidden muted Workbench fixture, 60 passing assertions. The vanilla Mi-8 exposes 17 pilot/cargo positions and twelve real characters occupy distinct seats. Isolated synthetic account records check partial escape, dead/unconscious/disconnected occupants and recycled IDs. The fixture requests its own terminal reset; it is not twelve network clients or manual flight. Seven inherited vehicle resource errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-040125/report.json", + "docs/evidence/native-2026-09-19-040125/source-sha256.json" + ] + }, + "scripted_invalid_extraction_transport": { + "status": "passed", + "scope": "One hidden muted negative startup fixture, three passing assertions. A real under-capacity vanilla vehicle in the in-memory test catalog prevents play/player spawn and rolls back prepared site content. Expected startup ERROR and seven inherited vehicle resource errors are retained.", + "evidence": [ + "docs/evidence/native-2026-09-19-040443-expected-startup-failure/report.json", + "docs/evidence/native-2026-09-19-040443-expected-startup-failure/source-sha256.json" + ] + }, + "scripted_invalid_extraction_boundary": { + "status": "passed", + "scope": "One hidden muted negative startup fixture, three passing assertions. A zero-radius extraction boundary with the normal helicopter prevents play/player spawn and rolls back prepared site content. Expected startup ERROR and seven inherited vehicle resource errors are retained.", + "evidence": [ + "docs/evidence/native-2026-09-19-040657-expected-boundary-failure/report.json", + "docs/evidence/native-2026-09-19-040657-expected-boundary-failure/source-sha256.json" + ] + }, + "scripted_personal_results_and_mission_time": { + "status": "passed", + "scope": "One hidden muted Core fixture, 100 passing assertions and no script/VM exceptions. Twelve physical occupants, isolated partial/account result cases, real local controller and hidden vanilla result widgets rejecting stale end-data IDs, legacy settings upgrade, admin time/speed changes applying next round only, and actual native clock progression. Seven inherited vehicle resource errors remain. Synthetic identity rebinding is not real network reconnect or replicated client UI acceptance.", + "evidence": [ + "docs/evidence/native-2026-09-19-040928/report.json", + "docs/evidence/native-2026-09-19-040928/source-sha256.json" + ] + }, + "scripted_early_extraction_loss": { + "status": "passed", + "scope": "Two hidden muted Core rounds; six assertions. Helicopter loss during prison causes natural defeat/restart while the actual prisoner is alive, with the specific loss reason. Two inherited catalog teardown and seven vehicle errors remain; no network acceptance.", + "evidence": [ + "docs/evidence/native-2026-09-19-041233/report.json", + "docs/evidence/native-2026-09-19-041233/source-sha256.json" + ] + }, + "scripted_core_extraction_clock_restart": { + "status": "passed", + "scope": "Two hidden muted Core-only escape/restart rounds; 194 assertions, no script/VM exceptions. Both initialize at saved 06:15 and 4x, verify native progression and complete the physical escape loop. Private profile restored exactly; seven inherited vehicle errors remain. No remote or long-duration clock acceptance.", + "evidence": [ + "docs/evidence/native-2026-09-19-041445/report.json", + "docs/evidence/native-2026-09-19-041445/source-sha256.json", + "docs/evidence/native-2026-09-19-041445/test-settings.json" + ] + }, + "scripted_companion_extraction_clock_integration": { + "status": "passed", + "scope": "One hidden muted companion-loaded escape; 48 assertions, no script/VM exceptions. Base catalog/admin and companion aliases, physical intel, interrupted defence, extraction and personal winner title pass with the new services. Seven inherited vehicle errors remain; network result replication is unverified.", + "evidence": [ + "docs/evidence/native-2026-09-19-042046/report.json", + "docs/evidence/native-2026-09-19-042046/source-sha256.json" + ] + }, + "scripted_finite_ground_transport": { + "status": "passed", + "scope": "One hidden muted Core transport fixture; 23 assertions, no script/VM exceptions. Surveyed parking, five usable seats, actual driver/passenger occupancy, native engine startup, 58.5 L initial fuel, depletion/loss and no replacement/reinitialization pass. Fixture explicitly requests reset; seven inherited vehicle schema errors remain. No manual driving or multiplayer claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-044205/report.json", + "docs/evidence/native-2026-09-19-044205/source-sha256.json" + ] + }, + "scripted_radio_service_companion_escape": { + "status": "passed", + "scope": "One hidden muted full-companion escape; 48 assertions, no script/VM exceptions. New production radio service passes real-time departure/reset/continuous completion, native extraction and personal result integration. Seven inherited vehicle schema errors remain; new isolated async radio edge-case fixture and network acceptance are separate.", + "evidence": [ + "docs/evidence/native-2026-09-19-044924/report.json", + "docs/evidence/native-2026-09-19-044924/source-sha256.json" + ] + }, + "scripted_player_admission_guards": { + "status": "passed", + "scope": "One hidden muted Core native lifecycle fixture, 54 assertions, no script/VM exceptions. Ordinary initial spawn, 20 remaining prison slots around one player, reserved positions, physical body obstruction, actual handler refusal/owned cleanup, controlled actor protection and deferred vertical drift. Fixture requests terminal reset; seven inherited vehicle errors remain. No remote preload or reconnect acceptance.", + "evidence": [ + "docs/evidence/native-2026-09-19-050403/report.json", + "docs/evidence/native-2026-09-19-050403/source-sha256.json" + ] + }, + "scripted_radio_admission_restart": { + "status": "passed", + "scope": "Two hidden muted Core escape/restart rounds; 340 assertions, no script/VM errors. Physical radio edge cases with deferred state recovery, ordinary real-time defence, live native objective details and fresh prisoner spawning through admission guard. Synthetic radio membership/timestamps are not remote-client evidence. Seven inherited vehicle errors remain.", + "evidence": [ + "docs/evidence/native-2026-09-19-050515/report.json", + "docs/evidence/native-2026-09-19-050515/source-sha256.json" + ] + }, + "scripted_objective_widget_restart": { + "status": "passed", + "scope": "Two hidden muted Core escape/restart rounds, 374 assertions, no script/VM errors. Native detail close/rebind/reopen, event unsubscribe and delayed callback checks pass alongside radio and admission regressions. Launch/stopped-source and raw-log hashes verify. Seven inherited resource errors remain; later weak-task deletion guard and real remote UI acceptance are separate.", + "evidence": [ + "docs/evidence/native-2026-09-19-051452/report.json", + "docs/evidence/native-2026-09-19-051452/source-sha256.json", + "docs/evidence/native-2026-09-19-051452/source-provenance.json" + ] + }, + "scripted_admission_companion_death": { + "status": "passed", + "scope": "One hidden muted companion death/spectator/defeat fixture, 32 assertions, no script/VM errors. Native damage, spent-life retention and local spectator activation pass after admission and delayed observer changes. Launch/stopped-source and log hashes verify; seven inherited resource errors remain. No remote reconnect or streaming claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-052932/report.json", + "docs/evidence/native-2026-09-19-052932/source-sha256.json", + "docs/evidence/native-2026-09-19-052932/source-provenance.json" + ] + }, + "scripted_admission_companion_escape": { + "status": "passed", + "scope": "One hidden muted companion escape, 48 assertions, no script/VM errors. New radio and spawn admission services preserve physical intel, admin aliases and extraction. Seven inherited resource errors remain; objective teardown refinements have separate evidence.", + "evidence": [ + "docs/evidence/native-2026-09-19-052352/report.json", + "docs/evidence/native-2026-09-19-052352/source-sha256.json", + "docs/evidence/native-2026-09-19-052352/source-provenance.json" + ] + }, + "scripted_deleted_task_widget_cleanup": { + "status": "passed", + "scope": "One hidden muted Core objective UI fixture, 30 assertions, no script/VM exceptions. Native close/rebind/reopen, actual isolated task deletion, cleared weak references, global task-event cleanup, no delayed callbacks and restored real objective assignment. Final 116-addon-file launch/stopped manifest and log hash verify. Seven inherited resource errors remain; no manual or remote UI claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-053124/report.json", + "docs/evidence/native-2026-09-19-053124/source-sha256.json", + "docs/evidence/native-2026-09-19-053124/source-provenance.json" + ] + }, + "native_medical_consumption_recovery": { + "status": "passed", + "scope": "24 local hidden/muted Workbench assertions: real blood loss, bandage consumption, native saline treatment slot/effect, duplicate refusal, natural consciousness recovery and90-second expiry. No direct consciousness restoration. Seven inherited engine errors remain; no manual interaction or multiplayer claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-062406/report.json", + "docs/evidence/native-2026-09-19-062406/runner.json.txt", + "docs/evidence/native-2026-09-19-062406/source-sha256.json" + ] + }, + "native_environment_and_faction_catalogs": { + "status": "passed", + "scope": "67 local hidden/muted Workbench assertions: exact two-vehicle faction catalogs with native inventory/medical/radio support, authored defaults, persisted date/profile, leap-date validation, next-round commands, native clear/overcast/rain and clock preservation. Zero script/VM or engine errors. One round only; multiplayer and repeated restart qualification remain pending.", + "evidence": [ + "docs/evidence/native-2026-09-19-063559/report.json", + "docs/evidence/native-2026-09-19-063559/runner.json.txt", + "docs/evidence/native-2026-09-19-063559/source-sha256.json" + ] + }, + "scripted_twelve_prisoner_kit": { + "status": "passed", + "scope": "155 combined native assertions passed with zero engine errors: one controlled prisoner and eleven physical test characters fit inside the prison, each has the exact unique starting inventory, can receive and return a clue, and test actors are cleaned up. This is not twelve network clients or manual inventory UI validation.", + "evidence": [ + "docs/evidence/native-2026-09-19-063949/report.json", + "docs/evidence/native-2026-09-19-063949/console.log.txt", + "docs/evidence/native-2026-09-19-063949/source-sha256.json" + ] + }, + "scripted_recovery_abandonment": { + "status": "passed", + "scope": "54 combined native assertions passed with zero engine errors, including all-incapacitated status, event deduplication, survivor preservation beyond the death grace, authorization checks and abandonment while the warning is active. Health state is controlled by this policy fixture; actual treatment has a separate fixture.", + "evidence": [ + "docs/evidence/native-2026-09-19-064406/report.json", + "docs/evidence/native-2026-09-19-064406/console.log.txt", + "docs/evidence/native-2026-09-19-064406/source-sha256.json" + ] + }, + "scripted_environment_restart": { + "status": "passed", + "scope": "Two actual local Workbench rounds; 107 assertions with zero script/VM or engine errors. Real production settings owner saves a leap date and overcast profile for the next instance, preserves active weather/clock in round one, applies choices in round two and cleans owned fixture files. Remote agreement and manual administration remain unqualified.", + "evidence": [ + "docs/evidence/native-2026-09-19-065351/report.json", + "docs/evidence/native-2026-09-19-065351/console.log.txt", + "docs/evidence/native-2026-09-19-065351/source-sha256.json" + ] + }, + "scripted_total_document_loss": { + "status": "passed", + "scope": "58 native assertions and zero errors. All four finite radio documents were deleted; distant and unpossessed actors and an obstructing wall were rejected. A clear close approach by the actual controlled participant identifies the station once and permits normal tuning, without replacement clues. Partial knowledge has a separate passing fixture.", + "evidence": [ + "docs/evidence/native-2026-09-19-070733/report.json", + "docs/evidence/native-2026-09-19-070733/console.log.txt", + "docs/evidence/native-2026-09-19-070733/source-sha256.json" + ] + }, + "scripted_initial_guards_and_patrols": { + "status": "passed", + "scope": "295 native assertions and zero errors. Preparation observes all six original squads with six distinct conscious members and completed native spawn requests. Both patrols move existing actors and complete five native waypoints in cyclic order. Native startup queue references repeat but clear as waypoints complete; final queues are unique. Repeated route Stop preserves a foreign Search. No HQ order transit or multiplayer claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-070919/report.json", + "docs/evidence/native-2026-09-19-070919/console.log.txt", + "docs/evidence/native-2026-09-19-070919/source-sha256.json" + ] + }, + "scripted_partial_document_loss": { + "status": "passed", + "scope": "60 native assertions and zero errors. One real clue supplies partial knowledge before all four finite documents are deleted. Distant/NPC/obstructed observers are rejected; clear close approach identifies the station once and permits tuning. No replacement documents, remote clients or manual gameplay claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-071654/report.json", + "docs/evidence/native-2026-09-19-071654/console.log.txt", + "docs/evidence/native-2026-09-19-071654/source-sha256.json" + ] + }, + "scripted_patrol_hq_resume": { + "status": "passed", + "scope": "272 local native assertions, zero errors, all companions. Same physical squad traverses patrol, real HQ delivered-order Search preempts it, release preserves route, and movement/cyclic completion resumes. No extra force, radio-transit or remote-client claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-072838/report.json", + "docs/evidence/native-2026-09-19-072838/console.log.txt", + "docs/evidence/native-2026-09-19-072838/source-sha256.json" + ] + }, + "scripted_pending_guard_cancellation": { + "status": "passed", + "scope": "68 native assertions and zero errors. Empty and partial PENDING-owned groups receive no late dispatch or members after Stop2x while uncancelled control reaches six. Rollback deletes captured actors/groups, six-second observation stays quiet, original mission groups intact. No multiplayer claim.", + "evidence": [ + "docs/evidence/native-2026-09-19-073601/report.json", + "docs/evidence/native-2026-09-19-073601/console.log.txt", + "docs/evidence/native-2026-09-19-073601/source-sha256.json" + ] + }, + "scripted_radio_feedback_restart": { + "status": "passed", + "scope": "Two complete Core escape/restart rounds, 564 assertions and zero errors. Both verify initial radio wait, transmission, unconscious interruption, recovery, leave/reset and completion feedback plus existing administration, roster, documents, objective UI and extraction. Station teardown diagnostics enabled. No remote feedback, ordinary gameplay or later placement-source qualification.", + "evidence": [ + "docs/evidence/native-2026-09-19-073806/report.json", + "docs/evidence/native-2026-09-19-073806/console.log.txt", + "docs/evidence/native-2026-09-19-073806/source-sha256.json", + "docs/evidence/native-2026-09-19-073806/source-provenance.json" + ] + }, + "scripted_casualty_loading": { + "status": "passed", + "scope": "87 clean native assertions. Actual local controlled casualty, real five-second action completion boundary, owner handshake, native reservation and observed child-seat occupancy; synthetic helper admission and direct completion only, no held input or remote RPC qualification.", + "evidence": [ + "docs/evidence/native-2026-09-19-075514/report.json", + "docs/evidence/native-2026-09-19-075514/console.log.txt", + "docs/evidence/native-2026-09-19-075514/source-sha256.json" + ] + }, + "scripted_casualty_removal": { + "status": "passed", + "scope": "66 clean native assertions. Actual inherited vanilla removal action, authored exterior door, real exit event, vacant bench and live incapacitated grounded body. Direct completion only, no ordinary held input, remote transit or post-removal extraction result assertion.", + "evidence": [ + "docs/evidence/native-2026-09-19-080058/report.json", + "docs/evidence/native-2026-09-19-080058/console.log.txt", + "docs/evidence/native-2026-09-19-080058/source-sha256.json" + ] + }, + "scripted_mortar_inventory_current": { + "status": "passed", + "scope": "37 clean companion-loaded native assertions. Four physical crew, real manpack operator, exactly 27 distinct HE shells, finite depletion and permanent gun/crew loss. No firing or later readiness/transfer source qualification.", + "evidence": [ + "docs/evidence/native-2026-09-19-080226/report.json", + "docs/evidence/native-2026-09-19-080226/console.log.txt", + "docs/evidence/native-2026-09-19-080226/source-sha256.json" + ] + } + } +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/addons.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/addons.json new file mode 100644 index 0000000..11c6b5f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/addons.json @@ -0,0 +1,7 @@ +{ + "core": "2528466DE220D91C", + "ai": "5192138CB9D5B911", + "intel": "D31039C7C53E348A", + "chat": "FA804F411BDDF2C6", + "map": "9AAEE9041D79809E" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/admin-discovery-setting.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/admin-discovery-setting.md new file mode 100644 index 0000000..19421cb --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/admin-discovery-setting.md @@ -0,0 +1,23 @@ +# Core document discovery setting + +The physical document discovery service belongs to Core. Its existing `intelRevealChancePercent` setting is now configurable in Core-only games through the same administrator-only command used by the companion Chat addon: + +| Command | Result | +| --- | --- | +| `/esc intel reveal show` | Display the current saved percentage | +| `/esc intel reveal set N` | Save a whole number from 0 to 100 | +| `/esc intel reveal help` | Explain the range, document rules and when changes apply | + +The first recovered document identifies its destination exactly with the configured percentage chance. Otherwise it provides a rough location. A second eligible document for the same location always identifies it. Setting 0 therefore still permits progression through the two independent two-document caches; setting 100 identifies the destination on the first document. A change affects newly recovered documents immediately. Existing knowledge and documents already counted by discovery are not reset or reprocessed. + +The server retains the existing authentication, rate limit and command-length checks. Malformed values, out-of-range values and failed saves preserve the previous setting. Existing show and successful-set reply formats remain unchanged. Invalid discovery values now include the valid range and progression explanation. Other settings and time/abandon commands keep their existing behavior. + +Chat delegates the reveal alias to Core instead of defining a duplicate. Its `intel carrying` and HQ commands remain companion-specific. This does not expose administration to ordinary players or add a new RPC. + +## Validation + +`tests/test_admin_setting_policy.py` executes the actual Core alias mapping, strict integer parser and settings range predicates through the source-local C++ harness. It checks percentage endpoints, malformed numeric text, radio-duration boundaries, unknown aliases and companion-only exclusions. `python3 tools/check.py` includes it. + +`ERR_NativeAdminSettingsProbe.Run(ERR_GameMode mode)` is an opt-in WORKBENCH test awaiting central native execution. It checks actual authorized read/help dispatch and unauthorized/invalid mutation rejection. Valid changes exercise the same production setting-command handler with a separate `ERR_Settings` instance at `$profile:erri-native-admin-settings-probe.json`; they never mutate the active mission's settings. The fixture rejects already-existing fixture files, verifies native save/reload and unrelated values, then removes only its own fixture primary, backup and temporary files. + +A policy pass does not prove native script compilation, remote RPC ownership or readable chat presentation. Run the native probe inside Core-only and companion regression fixtures, then retain real-client administration in multiplayer acceptance. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/architecture.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/architecture.md new file mode 100644 index 0000000..d9d13d7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/architecture.md @@ -0,0 +1,66 @@ +# Architecture + +## Dependencies + +`core -> ArmaReforger`; `ai -> core`; `intel -> core`; `map -> core`; `chat -> core, ai, intel, map`. Every project declares the vanilla dependency explicitly. Addon GUIDs are listed in `addons.json`; metadata supplies new resource GUIDs. `tools/check.py` rejects external addon dependencies, duplicate resource identities, unresolved resources and legacy Escapists symbols. + +Core owns `ERR_GameMode`, mission rules, native spawn lifecycle integration, settings, the location registry, the vanilla faction catalog and authored scenario construction. `ERR_Phase` transitions are checked centrally. `ERR_LocationComponent` registers stable location IDs and replicates discovery. Mission phase, discovery and persistent settings mutations are server-owned. + +The mode exposes `OnPhaseChanged`, `OnGroup`, `OnTick`, `OnStop` and server-side `OnLocationDiscovered` events. `ERR_CommandService` is the response-coordinator interface. AI supplies its implementation through `CreateCommandService`. Core owns `ERR_DiscoveryService`, recovering physical documents and remembering consumed folder identities, and presents discovered objective markers. Intel subscribes to group and mission ticks only to distribute optional extra documents to enemies. Map supplies its shared field-map item through the scenario resource hook. Chat sends authenticated owner RPCs to mutate validated settings or read HQ status. Scenario placement, radio defence, extraction and mission transitions are separate services; native player assignment uses an account-bound admission gate. Further contracts for support/logistics remain migration work. + +## HQ information flow + +Physical group members observe through vanilla AI perception. `ERR_HQObservation` requires fresh visual observations; `ERR_HQReport` snapshots the available information. The radio graph uses living, correctly affiliated actors actually carrying radios. Reports traverse bounded physical routes, with delay and inventory/affiliation checks at each hop. The delivered contact registry expires stale reports. Orders return through the radio graph before an existing eligible group receives a native search waypoint. + +The coordinator is the sole source of strategic response orders. Individual units retain vanilla tactical combat. It does not spawn reinforcements when alerted. Initial physical forces are authored by the scenario. No distant-unit virtual simulation is implemented. + +The current coordinator is a reduced implementation. Full contact scheduling, supporting aircraft and physical logistics remain incomplete. A finite physical mortar controller now compiles; its initialization, ammunition depletion and permanent asset loss pass local tests. Actual firing has not been validated. Aircraft availability helpers must not be mistaken for an operational controller. + +## Bounded work and ownership + +HQ bounds group/contact registries and staggers report checks; routes have hop limits and timeouts. Intel has a bounded insertion queue. Core remembers physical folders already consumed, so handing a folder to another player cannot rediscover a location. The journal buffers and rotates output. Spawn retries are bounded and server-authored tickets constrain spawn resources and positions. + +Stop events cancel service timers, remove HQ waypoints and despawn owned AI groups through the native group lifecycle. Composition walls have explicit hierarchy ownership. Two scripted round completions across restart are recorded, but full entity-count and memory soak tests are still required. The engine destroys the world during a scenario restart; merely clearing an owner array is not evidence of complete entity cleanup. + +## Round player lifecycle + +`ERR_PlayerRoster` owns life records by backend identity; transient connection IDs are only lookup keys. Spawn, disconnect and rebind publish `OnChanged`. The native reconnect component retains the same physical character for voluntary as well as involuntary departures during its configured reservation interval. Reservation expiry does not restore a spent life. The defeat check includes reserved living characters. A server with no connected players pauses defeat and clears the radio defence timer. + +First-time arrivals may spawn during prison, search or defence. Prison placement checks a bounded grid against physical obstacles and pending reservations; a full grid waits without spending the failure budget. Late spawn positions are checked beside conscious, on-foot survivors, with the same prison grid as fallback. Native preloads receive account/controller/request/data/actor-bound tickets. Final assignment rechecks current life, phase, connection and placement; stop, disconnect and closed-admission phases cancel owned pending actors and callbacks. See [player lifecycle](player-lifecycle.md). New arrivals during extraction observe until the next round. Dead players cannot request another life. Unconscious characters remain survivors and retain their own camera; they do not hold the radio objective. + +The server selects a living friendly survivor for each spectator and replicates only its replication ID and fallback position. A local camera follows that survivor; owner RPCs allow `/esc spectate next` and `/esc spectate previous`. Only the selected survivor and occupied vehicle are pinned for streaming to that spectator. Loss, target changes and mission stop release pins. Reconnect, remote streaming and multi-client camera behavior still require multiplayer tests. + +## Base objective presentation + +`ERR_Objectives` subscribes to phase and tick events and publishes one native `SCR_Task` per active phase, completing the previous task or failing it on defeat. The independent radio service emits start/completion events; Core mission rules alone advance phases. Native task replication carries current instructions to joining players; task markers remain list-only because the discovery registry owns map disclosure. Radio descriptions update on five-second boundaries and show interruptions. These APIs compile against installed vanilla scripts; actual task UI presentation and remote-client delivery still require gameplay validation. + +## Authored sites and finite scavenging + +Core reads `ERR_ScenarioDefinition` from `Configs/ERR/EveronSites.conf`. `ERR_SiteService` owns the resulting locations, guards, containers and stock. The scenario component handles pending/ready/failed preparation separately from mission progression. Location IDs are supplied by configuration and replicated; templates carry no fixed scenario identity. Initial inventory items are created once, and retries move the same entities into the container. Readiness requires observed physical inventory contents. A completed service never refills stock or replaces destroyed sites. + +`ERR_DocumentComponent` binds each mandatory physical clue to a radio location. Core recovery applies it only to that destination; optional generic enemy intel retains its broader discovery behavior. Definition validation requires a starting map and, for Everon, two separate guaranteed clue sources at least 100 metres apart. Each has enough documents to identify the radio independently. Optional supply/outpost locations use bounded five-second conscious-participant visibility scans. Radio identification also permits an eight-metre clear-view approach to the physical station, preserving progress if every finite document is lost. Prison and extraction locations do not gain proximity disclosure. Location names and discovery state replicate to the map, while actual knowledge transitions publish the server-side discovery event. Native tests mutate separate definition instances to verify invalid inputs are rejected. [Authoring details and current stock](site-authoring.md). + +## Base configuration and administration + +`ERR_FactionCatalog` is authored in `Configs/ERR/VanillaFactions.conf` and injected through the game mode resource. The scenario chooses guard groups from it; spawning, spawn authorization and spectator filtering use its player faction; HQ and support use its enemy faction. Startup rejects missing, identical or non-hostile faction keys, and site preparation rejects guard groups with mismatched affiliation. Shared intel and waypoint resources belong to `ERR_Resources`, not a faction selector. A new catalog alone does not provide new factions or suitable support compositions. + +Core owns the `/esc` command registration, owner RPC, server-derived admin authorization, rate limit and command service. `/esc status`, `settings` and `mission radio show|set N` work without companion addons. Spectator cycling is available to players through its existing owner RPC. Chat extends the service with existing HQ/Intel aliases and HQ journal output; it does not install a second command transport. Native service fixtures test parsing and rejected mutations, not remote RPC identity enforcement. + +Preparation failure is retained in replicated state. Spawning remains disabled, local guidance can explain failure before a character exists, and administrators can request the detailed cause. Waiting for site preparation does not consume a player's bounded spawn-attempt budget. The failure path stops services instead of silently leaving their timers running. Remote and visible pre-spawn presentation remain runtime acceptance work. + + +## Extraction and personal results + +`ERR_ExtractionService` owns the registered helicopter, capacity validation and immutable account-identity escape snapshot. It emits `OnResolved` to mission progression and never replaces its asset. A living registered participant must physically occupy that vehicle beyond the escape boundary during extraction; unconscious and reserved disconnected occupants remain eligible. Early helicopter loss is terminal even before radio completion. Late preparation failure rolls back all authored site content. + +The native end-data connection ID list is retained only as a framework adapter. Core publishes an account-derived personal result on each player's controller, keyed to the current mission replication ID and reset at round startup/audit. Binding/rebinding republishes the result. The successor victory content ignores stale end-data winner IDs and refreshes if personal-result replication arrives after the end screen opens. Local widget tests and real network reconnect acceptance are distinct. + +`ERR_TimeService` configures the native world clock once before the prison phase. Core administration saves start time and progression for the next round while showing the current applied values separately. The native manager advances and replicates time; there is no per-tick clock reset. See [mission time](mission-time.md) and [extraction](extraction.md). + +## Radio defence service and objective details + +`ERR_RadioDefenceService` owns tune authorization, eligible conscious defenders, continuous occupancy and one-time completion. GameMode consumes its events to advance phases and expose extraction; native tasks carry instructions to clients. The service requires current connected life records and the configured player faction, so unregistered actors, disconnected bodies and hostile characters cannot hold transmission. Empty-server sampling resets progress before mission work pauses. See [radio defence](radio-defence.md) for exact boundaries and test scope. + +`ERR_ObjectiveText` supplies hints and native task descriptions from the same mission state. Radio identification can update local guidance within the search phase, and extraction instructions use the configured replicated radius. `ERR_ObjectiveDetails` subscribes open successor task details directly to native display-data changes; it removes that subscription on task switch and widget detach. Detach also removes native global task-event callbacks, and pending overflow work is cancelled before assignee labels are deleted. Other task types retain their native behavior. See [objective widget lifecycle](objective-widget-lifecycle.md). + +Optional ground transport belongs to the existing site definition/service and its rollback path. It has bounded parking checks, actual native fuel and compartments, and no replacement/refill loop. See [ground transport](ground-transport.md). diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/base-gameplay-gaps.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/base-gameplay-gaps.md new file mode 100644 index 0000000..d9a7bba --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/base-gameplay-gaps.md @@ -0,0 +1,48 @@ +# Bounded base gameplay audit: starting kit and casualty recovery + +Current implementation update: an independently authored prisoner prefab now specifies its starting inventory; Core observes all-incapacitated survivors and supports explicit administrator abandonment. Separate native prisoner, medical and casualty mechanism fixtures have been added. Their actual evidence and remaining limits are recorded in the companion documents and validation log. The audit below is the original finding record, not a claim that these implementations remain absent. + +This source audit covers the first Everon release for up to 12 players. It identifies the next three implementation/acceptance priorities; it does not claim that the ordinary escape route is impossible. No health settings, loadouts, original missions or shared staging were changed by this review. No engine was launched. + +## 1. Establish an explicit successor starting kit + +**Observed implementation gap; not a reproduced spawn or progression failure.** `addons/core/Configs/ERR/VanillaFactions.conf:4` selects vanilla `Character_US_Unarmed.et`. That prefab changes headgear/jacket and the jacket inventory target; it does not clear the inherited pants inventory or equipment slots. Its inheritance is: + +- `{2F912ED6E399FF47}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Unarmed.et` +- `{284E735C6C70DAD2}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_BaseLoadout.et` +- `{836E7E39AAC5888B}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et` +- `{37578B1666981FCE}Prefabs/Characters/Core/Character_Base.et` + +Installed vanilla `Character_US_BaseLoadout.et:4–16` authors binoculars and a watch. Its `InitialInventoryItems` at lines 39–53 authors a handheld radio, compass, map, two dressings, tourniquet, morphine, E-tool, two flares and flashlight. Read-only unpacked evidence is available under `/tmp/erri-vanilla/Prefabs/Characters/Factions/BLUFOR/US_Army/`. The unarmed child keeps the pants contents and changes the jacket target to its rolled-up jacket. Actual inventory initialization/capacity and the exact retained runtime item count still need a native inventory assertion. + +Thus “unarmed” currently means no weapon, not stripped prisoner equipment. Maps/binoculars and medical supplies cannot be balanced solely by reading the successor's site stock. Author a successor prisoner prefab that explicitly retains or clears each intended inherited slot/item; preserve vanilla character health and interaction components. Then assert actual starting inventory, compatible magazine capacity, clue pickup and finite stock across a representative 12-character setup before manual testing. + +`EveronSites.conf:14–17` stocks five PM pistols, eight magazines and one map in the prison. Five pistols for 12 players is **not established as a defect**: seven initially unarmed prisoners may be intentional. The two subsequent caches contain eight plus four AK-74s. Decide the desired scarcity explicitly and test the first guarded escape at that loadout; do not automatically increase weapons or remove inherited medical supplies based on this audit. + +## 2. Prove treatment and casualty loading through real vanilla interactions + +**Acceptance gap; no broken medical item or missing character component was demonstrated.** `EveronSites.conf:82–97` provides a hidden medical stash with 12 dressings, six saline bags and six morphine injections. Its position is 6340/7400, discovery radius 25m, and `RevealOnEscape` is 0. The visible clue caches provide dressings, but neither provides saline or a medical-stash clue. Finding the advanced stash therefore currently depends on approaching it; that is a route/discovery decision, not evidence of an impossible route. + +The current native base fixture restores consciousness directly with `CharacterControllerComponent.SetUnconscious(false)` (`ERR_NativeBaseSmoke.c:389`). The extraction fixture boards conscious actors using native `GetInVehicle` (`ERR_NativeExtractionProbe.c:78`), then makes a passenger unconscious while already aboard (`:120`). These tests establish mission handling of consciousness and occupied seats. They do not establish treating real blood loss, consuming medicine, transferring an injured player from ground to a seat, or remaining aboard during treatment and flight. + +Relevant installed sources are `scripts/Game/Components/Damage/SCR_CharacterDamageManagerComponent.c`, `scripts/Game/Components/Gadgets/SCR_ConsumableSalineBag.c`, and `Prefabs/Items/Medicine/SalineBag_01/SalineBag_01_base.et`. The saline effect checks damaged blood, target saline-storage availability and occupied treatment slots; `ApplyEffect` moves the real bag into the treatment slot. The concrete bag's inherited configuration applies a 1500-unit restoration over 90 seconds after a 10-second action. These resources were inspected directly from the installed `addons/data/data*.pak` archives; no original Escapists medical implementation was reused. + +Next scope: a native wounded-character fixture using actual stock and vanilla treatment APIs, followed by manual action/animation checks. Verify bleeding control, tourniquet application/removal, saline consumption/effect completion, morphine, regained consciousness without directly toggling it, drag/carry/load of an unconscious casualty, and release of treatment/seat state after interruption. Keep finite supply depletion and failure cases. Only then decide whether the hidden medical site needs a clue or earlier saline availability. + +## 3. Design an outcome when every survivor is incapacitated + +**Concrete unhandled policy branch; a persistent native hang has not been reproduced.** `ERR_PlayerRoster.c:80–86` reports any living used-life actor as a survivor. `ERR_GameMode.c:320–330` starts the 30-second defeat grace only when that method returns false. Therefore an entire living but incapacitated group does not enter the defeat grace. This correctly preserves a recoverable unconscious player, including reconnect reservations, but does not distinguish a whole group that cannot recover or help one another. + +Installed `scripts/Game/GameMode/Misc/SCR_GameModeHealthSettings.c` defaults `m_bKillIndefinitelyUnconsciousPlayers` to false and permits unconsciousness. The successor inherits the empty health-settings component in vanilla `Prefabs/MP/Modes/GameMode_Base.et` without overriding that policy (`addons/core/Prefabs/ERR/GameMode.et`). Installed `SCR_CharacterDamageManagerComponent.c:789–819` explicitly distinguishes indefinite unconsciousness, including blood below the unconsciousness threshold. A test that simply restores consciousness after 35 seconds does not exercise this state. + +Choose and test a recovery policy before changing code. Concrete options are: + +1. Preserve vanilla recovery indefinitely, but provide a clear shared “no conscious rescuers” state and an explicit round-abandonment/restart path. Define who may invoke it and how reconnecting rescuers affect it. +2. Add a separate all-incapacitated grace, longer than the supported treatment/recovery window, that resets when someone becomes conscious. Defeat must wait for the chosen grace and account for reserved actors, ongoing treatment and possible recovery; do not replace `Alive` with `CanFight` in the existing defeat check. +3. Offer an explicit voluntary give-up decision while retaining recoverable unconsciousness. This requires its own player-facing authorization/confirmation design and must not silently consume another life or kill a recoverable teammate. + +Reproduce an actual low-blood incapacitation case with damage enabled before selecting thresholds. Test one recoverable casualty with a rescuer, a recovering all-unconscious group, an unrecoverable group, interrupted treatment, reconnecting rescuers and extraction with unconscious passengers. This is deliberately separate from the already-tested 35-second unconscious survivor protection and from multiplayer transport validation. + +## Scope limits + +No confirmed shortage of core medical components or incompatible medicine was found from the inspected inheritance. Runtime inventory, normal user actions, medical animations, medical balance and physical casualty loading remain unproven. The supported 12-player limit is a release target, not proof that five starting weapons are wrong. Original feature parity, manual flight/navigation, multiplayer and measured performance remain tracked elsewhere. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/base-replacement.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/base-replacement.md new file mode 100644 index 0000000..5b6c4c1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/base-replacement.md @@ -0,0 +1,41 @@ +# Base replacement is the primary deliverable + +The project replaces the abandoned Escapists base with a maintainable, independently authored mission. Porting the user's companion mods is secondary. A passing companion feature test does not establish that the base replacement is complete. + +The installed original package (1.6.30, metadata targeting Reforger 1.8.0.10) was inventoried read-only: 299 script paths, plus resource category counts, are recorded in `original-resource-inventory.json`. This identifies responsibilities that the old base supplied. No original implementation, compositions or UI resources were imported. Names in that inventory are reference data, not successor dependencies. The first release remains Everon, vanilla factions and up to 12 players; complete original feature parity is deferred. + +The [complete responsibility inventory](original-feature-coverage.md) assigns every original script entry to an unfinished replacement area. This is a filename-based coverage map, not proof of behavior equivalence. + +## Base responsibilities and current gaps + +| Responsibility | Successor implementation | Still required | +| --- | --- | --- | +| Mission setup and progression | Core phase rules, server settings/commands, saved starting time/progression, replicated startup failure status, definition validation and asynchronous site preparation | Player-facing setup, failure reporting, manual setup and failure-presentation validation | +| Prison and player start | New vanilla composition, physical gate and supplies, native spawning | Manual escape and 12-player equipment/space validation; additional surveyed layouts | +| Scavenging and discovery | Core owns two independent radio-clue caches, a medical stash, outpost stock, targeted documents and named discovery markers | Manual route access, inventory usability, medical treatment and gameplay balance | +| Location population | Seven configured sites, six guard squads, finite stock/props, proximity discovery events and preparation rollback | Additional compositions, destruction presentation, manual access and multiplayer cleanup validation | +| Radio objective | Separate radio service authorizes registered connected players, tracks continuous conscious occupancy and emits events; Core publishes native task progress | Native task and radio-progress UI validation, unconscious/revive and simultaneous-player validation | +| Extraction and results | Separate extraction service, twelve physical occupants, partial UUID results, result-widget refresh, early loss and capacity validation | Manual boarding/piloting, actual remote reconnect and result delivery, casualty loading and empty-server flight verification | +| Player lifecycle | Identity roster, native reconnect reservation, one life, bounded reserved spawn slots, final native assignment checks, local unconsciousness/recovery, spectator camera, defeat/restart | Dedicated server and real multi-client reconnect/streaming tests | +| Ground transport | Authored optional finite UAZ, surveyed parking, native fuel/seats/engine and loss checks | Manual road access/driving, simultaneous use and network ownership | +| Factions and assets | Injected faction/asset catalog drives prisoner, guard group, extraction and friendly/enemy lookup | Additional catalog combinations and remote validation; provenance review and release packaging | +| Enemy strategic response | Optional AI addon supplies the sole HQ coordinator through `ERR_CommandService` | Complete virtualHQ integration after base contracts stabilize; no competing original response system | + +## Immediate implementation order + +1. Completed development check: Core-only alternate-cache escape/restart, seven-site finite inventory, physical cover/discovery and full-companion primary-route/radio regressions. Full gameplay acceptance remains pending. +2. Expand and manually validate the authored locations, scavenging route and objective presentation so a person can play without test teleports or hidden knowledge. +3. Validate player lifecycle and restart on a dedicated server; resolve native errors before declaring a clean build. +4. Integrate existing HQ, Intel, Chat and Map behavior against those base interfaces, followed by equivalent-workload performance measurements. + +Core scenario: `{AD62322D5213C440}Missions/ERR_Everon_Base.conf`. Full integration scenario: `{C1E20667DCE324ED}Missions/ERR_Everon.conf`. Both use the newly authored Everon child world. The Core-only case uses vanilla tactical AI; loading AI installs the HQ coordinator. The production target includes virtualHQ, while the isolated Core case proves the base does not need a companion to advance its objectives. + +Run the base diagnostic without visible windows or sound: + +```sh +python3 tools/headless_workbench.py --compat /tmp/erri-headless-compat --profile /tmp/erri-workbench-profile --project core --smoke victory --rounds 2 +``` + +This diagnostic moves actors and the helicopter programmatically. It proves integration paths, not manual playability, multiplayer correctness or FPS improvement. + +The focused [manual gameplay gap audit](base-gameplay-gaps.md) records inherited starting equipment, real treatment/casualty-loading work and the all-incapacitated outcome policy. These require implementation decisions and native gameplay validation before first release. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-source-sha256.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-source-sha256.json new file mode 100644 index 0000000..1571339 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-source-sha256.json @@ -0,0 +1,3 @@ +{ + "/tmp/erri-vanilla/Prefabs/Vehicles/Helicopters/Mi8MT/Mi8_base.et": "2b6c425e48beda9f67082204023fdbace7773ab0e9b25b7e9f72de6bef22a571" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-support.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-support.md new file mode 100644 index 0000000..3eea340 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-ground-support.md @@ -0,0 +1,23 @@ +# Parked extraction helicopter: verified landing-gear support + +The parent's native `logs_2026-09-19_07-20-14` showed ten seconds of an intact, upright, motionless authored Mi8 with a valid controller/simulation/physics and `HasAnyGroundContact()==false`. The caller/helper were alive and correctly positioned. Native helicopter simulation exposes this aggregate contact flag and terrain altitude, but no per-wheel query equivalent to wheeled simulation. The installed vanilla available-action condition also simply reads the aggregate flag; it provides no alternative initialization mechanism. No physics wake, engine start, teleport or simulation mutation is added to production. + +`ERR_CasualtyGroundSupport` supplies a conservative fallback only for the known Mi8 family when its physics body is asleep and its engine is off. The ordinary native contact path is retained. Existing speed (0.5m/s), angular velocity (0.1rad/s) and upright (up.y >= 0.85) limits still apply to both routes. Powered hovering cannot use the fallback. + +The installed Mi8_base.et defines three landing-gear bones: `v_wheel_F` with radius 0.30m and `v_wheel_bL`/`v_wheel_bR` with radius 0.45m. Native PointInfo resolves their actual world pivots. All three pivots must exist and remain separated by at least one metre, guarding against failed/collapsed resolution. At each tire bottom, a short vertical trace spans 0.10m above to 0.12m below. Every trace must hit upward-facing collision (normal.y >= 0.85). Hits on the aircraft or its children, dynamic entities and entities without physical support are rejected. Terrain/static collision can support the aircraft; altitude alone cannot. The small tolerance covers collision/placement precision and does not claim exact zero-distance tire contact. Active aircraft without a native contact flag fail closed; unsupported dynamic platforms are outside this fallback. + +Native PointInfo bone resolution, actual tire-to-ground gaps, awake state and trace normal/entity behavior are still **unverified in the engine for this patch**. The opt-in fixture prints all of them. If the untouched aircraft is awake or its authored geometry lies outside the tight support tolerance, the test will fail explicitly; do not silently widen it or activate physics simply to get a pass. + +## Files and integration + +New files: + +- `addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c` +- `addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c` +- `tests/test_casualty_ground_policy.py` + +Apply `ground-support-integration.patch` only to the indicated AircraftReady/Nearby and native casualty-fixture hunks. Its latest central-service baseline preserves the separately reviewed committed-lifecycle changes. Add `test_casualty_ground_policy.py` to the parent's `tools/check.py` test list. No new outcome or BaseSmoke steps are required: the existing `casualty-service` readiness stage runs the bounded ground probe before causing unconsciousness. + +The positive native check reads the untouched actual mission helicopter. It then spawns a separate empty aircraft twenty metres higher, protects that disposable entity from damage, and verifies airborne rejection. On that clone only, it sets a 90-degree tilt and reads the resulting native up vector, then assigns and immediately reads a nonzero native velocity. The production motion policy is checked independently with those actual values, while full AircraftReady must also reject the clone. This is not a travelled-distance/flight-control test. The clone is deleted on completion or failure. The mission aircraft's transform, velocity, activation, engine and health handling are never changed. + +The focused support policy test passed. Native compilation, positive wheel support and the negative physics checks remain pending. `source-sha256.json` identifies the exact installed Mi8 configuration inspected. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-incapacitation.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-incapacitation.md new file mode 100644 index 0000000..9a1ff43 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-incapacitation.md @@ -0,0 +1,11 @@ +# Fixture incapacitation correction + +The native casualty fixture used a protected actor, but installed `ForceUnconsciousness` calls resilience `HandleDamage(..., EDamageType.TRUE, ...)`. Native evidence showed protection could swallow that operation and leave the actor conscious. + +The isolated base-probe patch snapshots the actual damage-handling flag, enables it for one synchronous `ForceUnconsciousness` call, reads the actual resilience decrease, and restores the original flag before assertions or cleanup. It asserts decreased resilience, a living actor and exact flag restoration. The existing asynchronous native controller-state check and five-second settling interval remain. No health, consciousness or resilience is restored afterward; no production medical or damage behavior changes. + +`test_casualty_incapacitation.py` executes the actual extracted fixture method against a narrow damage API fake. Both original flag values are preserved; blocked reduction, missing hit zone/manager and dead actor cases fail. This is source-level regression evidence, not native runtime proof. + +The latest parent identifier fixes are retained in the local removal-probe baseline: `doorReference` and `exitTransform`. Installed generated source confirms `BaseCompartmentManagerComponent.GetDoorReference(int)` returns `CompartmentDoorReference`; that class exposes `GetReferencedDoorCompartmentManager()` and inherits `GetAnimDoorIndex()` from `BaseCompartmentDoor`. The native compiler rejected the previous local identifier `reference`; the API return type itself exists. This patch does not include or repeat those already-applied identifier changes. + +Merge only `casualty-incapacitation.patch` and new `tests/test_casualty_incapacitation.py`; no central source or engine was touched by this agent. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-loading.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-loading.md new file mode 100644 index 0000000..d1a93e7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-loading.md @@ -0,0 +1,48 @@ +# Ground casualty loading into extraction transport + +This independently authored implementation adds a five-second `Load casualty into extraction helicopter` action only to the successor Prisoner prefab, using its existing Chest and LowerTorso interaction contexts. It keeps inherited vanilla medical interactions. The service and owner bridge compile natively, and the five-second action and inherited medical actions have been inspected in the native fixture. Ground support, completed interaction and multiplayer qualification are still pending; the earlier successful child-bench mechanism experiment alone does not qualify this complete interaction. Ground exit placement still fails its separate native assertion, so this implementation deliberately supplies no unload action or claim. + +The server accepts only distinct, connected participants whose current controller, connection and used-life roster record all match their current bodies through the canonical server-owned `ERR_PlayerRoster.CurrentActor` check. The bound roster identity must be non-null; this also preserves the existing offline Workbench identity path. A reserved disconnected body is deliberately ineligible. The rescuer must be conscious and on foot; the living target must be natively incapacitated, on the ground, not entering/exiting a vehicle and observed settled for at least five seconds. Settlement is sampled through the round tick with a maximum two-second observation gap; it does not infer that unobserved sub-tick movement was impossible. Recovery, falling, movement, stale observation or identity changes reset the observation window. + +Both actors must be within 12 metres of the registered extraction aircraft and within three metres of one another. The mission must be active in EXTRACTION. The intact helicopter needs actual simulation ground contact or the conservative sleeping, engine-off three-wheel support check described in [casualty-ground-support.md](casualty-ground-support.md), an upright vertical component at least 0.85, linear velocity at most 0.5 m/s and angular velocity at most 0.1 rad/s. Native body interaction contexts provide initial line-of-sight presentation. A new shared native raycast revalidates rescuer-to-casualty sight on the server at request and commit, then again on the owner immediately before entry. It accepts an unobstructed segment or contact with the intended casualty and its attachments. This first version does not supply carrying/dragging animations, arbitrary vehicle loading, or a player unloading action. + +Only actual child transport benches of the registered Mi8 are selectable. The service rejects its root navigator CARGO slot, patient slots, pilot/turret slots, occupied, inaccessible, locked or reserved slots. The exact slot must belong to the actual aircraft's hierarchy and the installed Mi8 seat-part prefab. Native seat classes and health settings remain unchanged. A native reservation plus service tickets prevents duplicate requests for the same caller, casualty or bench. Reservation replication/contention still needs remote tests. + +## Ownership and commit boundary + +A stock `MoveInVehicle` request may retry for missing replicated vehicle entities. This service does not invoke that method or queue callbacks. It uses a successor-specific controller handshake: + +1. Action completion passes live server checks and reserves a bench. The target's controller receives a prepare request identifying the actual mode instance and ticket. Preparation cannot move anyone. +2. The target owner validates its current body/phase, starts a three-second local `System.GetTickCount` lease, and sends ready. The server accepts ready only from the ticket's exact controller/body and revalidates identity, current physical state, settled duration, reservation and a five-second preparation deadline. +3. The server commits one command with exact mode, caller, casualty, aircraft, seat-owner replication IDs and the slot ID. This is the final authorization boundary. The owner consumes the unexpired lease before executing, rechecks matching mode/body/aircraft, native incapacitation, ranges, grounded craft and the real child seat, then calls native `GetInVehicle` once. Missing entities and native refusals fail once; no delayed retry can later acquire a seat. Duplicate or expired commits cannot execute. +4. The server never trusts either a positive or negative client acknowledgement as permission to resolve or release a seat. It observes actual target-seat occupancy and aircraft membership, with an eight-second post-commit budget. The local lease bounds how long a delayed commit may start movement without requiring clocks synchronized between machines. Before commit, identity/physical changes cancel the request. After commit, caller or casualty connection changes alone do not cancel the authorized move or release its reservation: the immutable original body/aircraft/seat are observed until completion or expiry. Death of a still-existing target body retains the committed reservation through physical occupancy or expiry, because the owner can still have pre-death replicated state. Occupancy by a dead target resolves as failure. Loss of the physical aircraft/body or terminal/explicit Stop ends observation without compensating teleports or health changes. + +An already committed native movement is not rolled back if conditions subsequently change. A false resolution means loading was not confirmed by this service, not that a committed native command was magically revoked. Terminal/identity changes are also rechecked on the owner; replication ordering under real latency remains a required multiplayer test. The service removes only a reservation still owned by the same surviving target reference, never another player's reservation. Native reservation cleanup after entity deletion also requires explicit runtime verification. + +The mode adapter owns Tick/Stop/roster subscriptions and replicates only the current extraction-aircraft reference for client action presentation. Roster events run cleanup even when the ordinary mission tick returns early on an empty server. PREPARING roster callbacks are no-ops and cannot permanently stop the service. Terminal/explicit Stop latches before notifying subscribers, releases owned tickets and removes subscriptions. No new persistent settings, public entity-selection RPC, automatic spawning or original Escapists resource is introduced. + +## Integration and checks + +New production files: + +- `addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c` +- `addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c` +- `addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c` +- `addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c` + +The successor Prisoner prefab owns the action and `tools/check.py` includes the casualty policy regression. The action reuses the existing Prisoner resource identity; new nested action/UI component IDs are successor-authored. + +Offline checks execute production timing/range/aircraft-motion policy bodies and the complete repository suite. Native work must inspect the real spawned action and inherited medicine actions, show strict rejection for nonparticipants/old bodies/wrong phase, then exercise genuine two-player authorization and physical movement. Test cancellation during action progress, recovery during progress, duplicate callers, last-seat contention, native refusal, loss of replication visibility, delayed/reordered/expired handshake, disconnect/reconnect, aircraft loss and terminal transition. Confirm native seat reservation cleanup and actual single occupancy. Do not count synthetic fixture roster identities as proof of remote controller ownership. + +## Bounded local service fixture + +`ERR_NativeCasualtyServiceProbe.c` is excluded outside WORKBENCH. Opt-in `casualty-service` uses Core steps 1400/1402 and a 45-second fixture deadline. It moves the actual local controlled player beside the real helicopter and causes native incapacitation once; the ordinary owner-controller handshake and target roster checks remain real. Only a separately spawned physical helper receives a synthetic `CurrentLife` adapter. Before enabling that adapter, the fixture explicitly checks real-target membership and strict rejection of the helper, including in a valid physical extraction state. This is not a second authenticated network player. + +The fixture deliberately advances legal mission phases to reach extraction; it does not claim a completed radio objective. It checks a fresh settling window, native external bench reservations, a physical successor wall blocking sight, the real action's completion boundary, duplicate requests, actual player occupancy, reservation release, preserved target identity and idempotent Stop. It does not simulate holding action input, remote packet timing or Stop during an in-flight command. It retains inherited medical-action presence. On completion the normal test reset ends the round; cleanup deletes only the helper/obstacle and releases fixture-owned reservations, with no forced recovery, seated-player teleport, body deletion or unrelated health restoration. + +The WORKBENCH mode override routes owner callbacks to the helper adapter only during this explicit case. Core smoke and the hidden runner expose the opt-in `casualty-service` case. [075514](evidence/native-2026-09-19-075514/report.json) completes this local fixture with 87 passing assertions and zero engine or script/VM errors. The production one-shot initial placement lets the original aircraft settle naturally; separate raised, tilted and moving aircraft are rejected. A single actual native damage request incapacitates the controlled player, then the real action completion boundary and owner-controller handshake load that living body into the selected child bench exactly once. External reservations and physical obstruction reject requests; successful loading releases the reservation, retains player identity and survives idempotent Stop without another completion. + +The real local controller takes the server/local fast path; this does not exercise remote Owner/Server RPC transit. Only the helper membership is adapted, and action completion is invoked directly rather than holding input for five seconds. The fixture requests its own reset after loading, without a complete radio-to-extraction playthrough. Real two-player input, latency/reordering, disconnect/death while pending, last-seat contention and entity-removal cleanup remain separate requirements. Earlier contact and damage-fixture failures are preserved in the validation log. + + +The separate [stock removal fixture](native-casualty-remove.md) passes in [080058](evidence/native-2026-09-19-080058/report.json): the helicopter's inherited door action removes a test-owned casualty from a real bench, leaving it living and incapacitated beside the authored exit with the seat vacant and accessible. This supplements loading with a local native removal path. It is not the production service's real-player/remote handshake, held action input, or a new extraction-result calculation. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-remove-source-sha256.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-remove-source-sha256.json new file mode 100644 index 0000000..7870da6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/casualty-remove-source-sha256.json @@ -0,0 +1,11 @@ +{ + "scripts/Game/UserActions/SCR_RemoveCasualtyUserAction.c": "fb82fba4e3fd2cc94457942605eb09b13ad10bb033b51615732c7a5ff6611ac0", + "scripts/GameCode/UserAction/SCR_CompartmentUserAction.c": "1bb3aeb3aaba90e582a41b737558879e712faf3a57a7542fae89c12e536b50f9", + "scripts/Game/generated/Components/CompartmentAccessComponent.c": "a3a0907d771293d2423649aa0ff0e71b7f457279defac05fd693baf4dd7c447e", + "scripts/Game/generated/CompartmentDoorInfo.c": "bcb885c5bcb13ce4ad98275be1a8079a96e0f0deb9f2470ba581b15da0ec410a", + "scripts/Game/generated/CompartmentDoorReference.c": "c653c63c1835919ec5c5d29fbe7a5d22ee4a805d8ebc806e448dacbfcb4056b8", + "scripts/Game/generated/BaseCompartmentDoor.c": "35f6797ac5bc69ccdf3de755601d2a5f74f4ead567cbda35f8a1f5478459f3c6", + "Prefabs/Vehicles/Helicopters/Mi8MT/VehParts/Seats/VehPart_MI8_seats_base.et": "1b9a2e55a9a1cb884886488b6e170f437b6c1a615b584449819b96a6c78ad973", + "Prefabs/Vehicles/Helicopters/Mi8MT/Mi8_base.et": "2b6c425e48beda9f67082204023fdbace7773ab0e9b25b7e9f72de6bef22a571", + "Prefabs/Vehicles/Core/Configs/CargoCompartment_Base.conf": "326668ddc77c1ccb48ce10a0bea33be3bec77803cacae523d3e1f0c93249c5bc" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/configuration.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/configuration.md new file mode 100644 index 0000000..d4ce757 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/configuration.md @@ -0,0 +1,44 @@ +# Base mission configuration + +The independent Core scenario loads `Configs/ERR/VanillaFactions.conf` through `ERR_GameMode.m_FactionDefinition` and `Configs/ERR/EveronSites.conf` through the scenario component. Both are successor resources. Changing a configuration requires restarting the scenario; the live round is not repopulated. + +## Factions and assets + +The catalog explicitly selects the player faction, enemy faction, prisoner character, guard group and extraction helicopter. Current defaults are unarmed US prisoners, Soviet guards and the vanilla unarmed Mi-8 transport. Both factions must exist in the world's faction manager and consider one another hostile. Required prefab resources must resolve. The extraction resource must be a helicopter with a pilot position and at least twelve pilot/passenger seats; invalid extraction setup rolls back prepared sites before players spawn. Guard groups must have the catalog's enemy affiliation; an incompatible group is rejected rather than relabelled. + +This provides an injection boundary, not automatic support for arbitrary addons. A different faction also needs matching characters, inventories, world manager configuration and companion support compositions. The current mortar crew remains a vanilla Soviet composition and rejects a different enemy faction. + +Supply/guard placement and finite stock are described in [site authoring](site-authoring.md). + +## Administration + +Open the normal game chat and enter a command. Core provides: + +| Command | Access | Effect | +| --- | --- | --- | +| `/esc status` | Server administrator | Current objective or startup failure cause; adds HQ status when Chat is loaded | +| `/esc settings` | Server administrator | Current shared settings and values | +| `/esc mission radio show` | Server administrator | Radio defence duration in seconds | +| `/esc mission radio set N` | Server administrator | Save a whole-number duration from 30 to 1800 seconds | +| `/esc mission time show` | Server administrator | Current clock and saved next-round time/speed | +| `/esc mission time set HH:MM` | Server administrator | Save next-round start time, 00:00–23:59 | +| `/esc mission speed show` | Server administrator | Current clock and saved next-round time/speed | +| `/esc mission speed set N` | Server administrator | Save next-round time progression, 1–24× | +| `/esc spectate next` | Spectating player | Select the next surviving friendly player | +| `/esc spectate previous` | Spectating player | Select the previous surviving friendly player | + +The server derives administrator status from the requesting controller's authenticated player ID. Clients cannot send an administrator flag through the RPC. Requests are limited in length and rate; malformed numbers and out-of-range values leave the previous setting intact. Saved values belong to the server profile, not client profiles. Changing radio duration affects the current defence calculation, so configure it before starting the transmission. + +Clock settings apply once at the next round startup; changing them does not jump the current clock. Older valid settings files load the new defaults (14:00, 1×) without being rewritten. See [mission time](mission-time.md). + +With the companion Chat addon, existing HQ interval/squad/radius and Intel carrying/reveal aliases remain available, as do `hq show` and `hq log`. They extend the same Core command service and authorization path. + +The command parser and setting mutations have native service tests. Actual remote RPC ownership, chat usability and pre-spawn presentation still need multiplayer/UI acceptance. + +## Failed preparation + +If the faction/catalog setup or authored site preparation fails, the mode retains the reason, stops its services and refuses progression or spawning. It does not fall back to a partially prepared mission. A local hint describes the failure and `/esc status` gives administrators the cause. Correct the resource/configuration and restart the scenario. There is no automatic retry that recreates stock or forces after failure. + +Waiting for normal site preparation does not consume a player's spawn retry budget. Once ready, actual failed spawn requests are bounded. This does not remove the one-life or identity requirements. + +Core also provides `/esc mission abandon`: an administrator-only explicit defeat and normal restart for an active round. See [recovery policy](recovery.md). diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/current-status.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/current-status.md new file mode 100644 index 0000000..28b0ea2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/current-status.md @@ -0,0 +1,35 @@ +# Current development status + +Evidence checkpoint: 19 September 2026, through archived run `080058`. Later running tests are not included. The primary deliverable is an independently authored replacement for the abandoned Escapists base mission, with the existing companion behavior integrated through its interfaces. The first release targets vanilla Everon and up to twelve players. It must complete prison → scavenging/intel → radio defence → helicopter extraction without the original mod or dependent extensions loaded. + +The successor has its own five addon projects, scenario/resource identities, authored Everon sites and vanilla asset references. The base loop and several failure paths have passed scripted local Workbench checkpoints. This is a development implementation, not a released or fully accepted replacement. [Acceptance](acceptance.json) remains pending for manual gameplay, real multiplayer, performance and release qualification. + +## Established development checkpoints + +| Area | What the recorded evidence establishes | Important limit | +| --- | --- | --- | +| Independent base loop | Core-only and companion-loaded scripted escape, interrupted radio defence, extraction, defeat and restart have completed. Native task details and personal result widgets have focused lifecycle checks. | Historical runs exercise their recorded sources; they do not qualify later changes or manual play. See [validation](validation.md). | +| Prison, equipment and medicine | [Prisoner fixture](evidence/native-2026-09-19-063949/report.json) places one controlled player and eleven physical characters inside the prison, verifies explicit starter inventory and real clue transfers. [Medical fixture](evidence/native-2026-09-19-062406/report.json) demonstrates blood-loss treatment, consumed supplies and native consciousness recovery. | These are not twelve connected clients or ordinary treatment input/animation tests. Five initial pistols are a balance choice to evaluate in play; the count alone is not a demonstrated defect. | +| Scavenging and discovery | Finite stock/lost containers remain depleted; two independent clue caches support progression. [Document-loss fixture](evidence/native-2026-09-19-071654/report.json) verifies close physical radio discovery after partial knowledge and loss of all documents. | Manual route visibility, travel, inventory interaction and threat balance remain unqualified. | +| Player lifecycle and extraction | Native admission/finalization, local observer cleanup, physical helicopter seat capacity and identity-based results have focused checks. [Recovery fixture](evidence/native-2026-09-19-064406/report.json) preserves incapacitated survivors and verifies explicit authorized abandonment. | [Casualty-loading fixture](evidence/native-2026-09-19-075514/report.json) now loads the real local incapacitated player from the ground into a reserved bench and releases the reservation. Its helper identity is synthetic; remote reconnect and two-client rescue remain unproved. | +| Existing physical forces | [Patrol fixture](evidence/native-2026-09-19-070919/report.json) demonstrates real cyclic movement. [Companion fixture](evidence/native-2026-09-19-072838/report.json) verifies HQ Search preemption and physical patrol resumption without creating response forces. [Cancellation fixture](evidence/native-2026-09-19-073601/report.json) verifies stopped incomplete groups do not dispatch late members. | The delivered-order patrol test bypasses radio transit. Broader reports, combat, support and losses need integrated qualification. | +| Environment and native errors | [Environment/restart fixture](evidence/native-2026-09-19-065351/report.json) passes two real rounds with zero native errors after restricting vehicle catalogs to required assets. | Earlier vehicle-schema errors are historical, not evidence every current run fails. Intermittent medical-kit teardown attribution remains unresolved; a later [full-loop checkpoint](evidence/native-2026-09-19-073806/report.json) also passes two rounds without native errors. Subsequent initial-placement changes still need their own qualification. | + +## Immediate blockers and next work + +1. **Resolve the remaining ordinary-game errors and establish player admission.** The [scenario-header launch](evidence/game-2026-09-19-080004/report.json) compiles production Game without WORKBENCH/ENF_WB, verifies the Core header and vanilla MissionSystems, and reaches `phase 0 -> 1` without the earlier guard-spawn crash being captured. It remains a failed run: vanilla splash `SCR_WidgetExportRuleRoot` errors persist and the local player's identity cannot be bound, so spawning is withheld. Preserve identity validation while diagnosing the offline launch/admission path. This is partial startup evidence, not clean startup or a playable session. [Runner details](ordinary-game-startup.md). +2. **Qualify casualty loading beyond the local success.** [075514](evidence/native-2026-09-19-075514/report.json) passes the complete local service fixture with no native errors: naturally settled helicopter, actual incapacitation, completion-time authorization, external reservations, blocked sight, one owner-handshake load into the selected bench, identity retention and cleanup. Earlier parked-contact and fixture-damage failures remain archived. [Stock removal fixture](evidence/native-2026-09-19-080058/report.json) also verifies the inherited door action clears the bench and leaves a living incapacitated body beside its authored exit. Real action input, remote ownership/RPC timing, competing rescuers, disconnect/death during a pending load and entity-deletion cleanup still need their own tests. [Casualty service](casualty-loading.md), [support investigation](casualty-ground-support.md). +3. **Rerun the current integrated base and companions.** Guard cancellation and replicated radio feedback have clean evidence from [two complete Core rounds](evidence/native-2026-09-19-073806/report.json); the later placement/casualty changes now have a focused local pass. A full current-source escape/restart regression must still exercise those changes together with discovery/task presentation, ordinary victory, early aircraft loss, death and abandonment. Keep failed iterations and source/log provenance; do not substitute earlier clean snapshots. + +4. **Play the complete route with ordinary input.** Validate prison gate/equipment access, scavenging and medical interactions, finding the radio without fixture knowledge, defend/recover behavior, ground-vehicle route, manual helicopter boarding/takeoff/navigation and partial escape. Tune the authored layout and finite supplies from actual play. The implemented all-incapacitated policy is preserved vanilla recovery plus explicit administrator abandonment; no automatic recovery is promised. +5. **Finish and qualify physical HQ support.** Infantry observation/report/order paths and patrol integration exist. Operational mortar firing, aircraft support, transport/rearming and depot/logistics behavior remain incomplete. Preserve a single HQ coordinator, radio-delivered reports, finite physical forces/ammunition and loss retention; cover interrupted reports, stale contacts and duplicate-order prevention. The [responsibility inventory](original-feature-coverage.md) remains a scope map, not behavioral proof. + +## First-release qualification still required + +Establish a dedicated-server test environment and real clients, then cover concurrent/late joins in each phase, preload cancellation, reconnect and connection-ID reuse, reserved bodies, spent lives, death/unconsciousness/treatment, spectators and streaming cleanup. Verify remote task/map/radio/result updates, settings authorization, seat contention, partial escape, empty-server behavior, defeat and repeated restart with up to twelve connected players. Local fixtures narrow these risks but do not close them. + +Collect real matched original/successor workloads with repeated client-frame and server-tick recordings. No FPS improvement has been demonstrated; the [comparison tool](performance-comparison.md) currently has synthetic regression evidence only. + +Finally complete provenance/dependency review, build and test the package under the successor's own identities, and satisfy the [release checker](release-qualification.md) with current source-bound evidence. No release package has been published. RHS, additional terrains, complete original parity, alternate starts and distant-unit simulation remain later scope. + +Older audits such as [base gameplay gaps](base-gameplay-gaps.md) preserve findings made before subsequent implementations. Read their update notes and linked native evidence before treating an old missing-feature statement as a current defect. This status page consolidates priorities; the evidence ledger remains authoritative for individual recorded checks. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/dependency-audit.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/dependency-audit.json new file mode 100644 index 0000000..be4077c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/dependency-audit.json @@ -0,0 +1,673 @@ +{ + "escapists-ai/Scripts/Game/EscapistsAI/EAI_GroupTactics.c": [ + "ESCT_CharacterHelper", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_NativeRadioCall.c": [ + "ESCT_AICallSupportTo", + "ESCT_CharacterHelper", + "ESCT_ESupportCallState", + "ESCT_SupportCallerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_DisableAmbientEvents.c": [ + "ESCT_AmbientEventBase", + "ESCT_AmbientEventInfo", + "ESCT_AmbientEventSystem", + "ESCT_ESupportType", + "ESCT_MortarBarrageBase", + "ESCT_SupportBase", + "ESCT_SupportInfo", + "ESCT_SupportPicker" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AssaultParachute.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_StartingOutfit.c": [ + "ESCT_EscapistsGameMode", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_GroupLookup.c": [ + "ESCT_EGroupLookupExclusionType", + "ESCT_EGroupSize", + "ESCT_EMilitaryBranchType", + "ESCT_EntityCatalogHelper", + "ESCT_FactionLookupValue", + "ESCT_GroupLookup", + "ESCT_GroupLookupData", + "ESCT_Logger", + "ESCT_Misc" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_FactionRelations.c": [ + "ESCT_CharacterHelper", + "ESCT_Faction", + "ESCT_FactionManager" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_RuntimeGuards.c": [ + "ESCT_EscapistsGameMode", + "ESCT_SpawnLogic" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQ.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_Misc", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQObservation.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AircraftAmmo.c": [ + "ESCT_SpawnHelpers" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQNetwork.c": [ + "ESCT_CharacterHelper", + "ESCT_FactionManager" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_Performance.c": [ + "ESCT_Player" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQBodySearch.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_RoadNavigation", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_Mines.c": [ + "ESCT_CharacterHelper", + "ESCT_FactionManager" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_DependencyGuards.c": [ + "ESCT_City", + "ESCT_CivilianPresenceComponent", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsGameMode", + "ESCT_PlayerDamageManagerComponent", + "ESCT_StorageArsenalComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQRoadblocks.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_Misc", + "ESCT_RoadNavigation", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_MineTask.c": [ + "ESCT_CharacterHelper", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_SettlementSafety.c": [ + "ESCT_ELocationType", + "ESCT_Location", + "ESCT_LocationSystem" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AIResponseSystem.c": [ + "ESCT_CharacterHelper", + "ESCT_CharacterLookupData", + "ESCT_EMilitaryBranchType", + "ESCT_EntityCatalogHelper", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_Misc", + "ESCT_RoadNavigation", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_StingerEquipment.c": [ + "ESCT_CharacterHelper", + "ESCT_EscapistsGameMode", + "ESCT_FactionManager" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirAssault.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_GameStateManagerComponent", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQStatus.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_SniperOptics.c": [ + "ESCT_CharacterHelper", + "ESCT_EscapistsGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_StartSelection.c": [ + "ESCT_EStartType", + "ESCT_EscapistsConfigComponent", + "ESCT_FactionManager", + "ESCT_HelicrashLocationHolder", + "ESCT_PrisonComponent", + "ESCT_SetupConfig" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AIConfig.c": [ + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_ImprovisedPrisons.c": [ + "ESCT_CharacterSpawnPoint", + "ESCT_Constants", + "ESCT_EStartType", + "ESCT_EntityHelper", + "ESCT_EntitySearch", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsGameMode", + "ESCT_LocationSystem", + "ESCT_Misc", + "ESCT_PrisonComponent", + "ESCT_PrisonDoorComponent", + "ESCT_SpawnHelpers", + "ESCT_SpawnPoint", + "ESCT_SpawnPositionComponent", + "ESCT_StartAreaComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_MortarFiring.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_MortarSystem.c": [ + "ESCT_CharacterHelper", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AmmoSupply.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_DepotLoading.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_AirRecon.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_EMilitaryBranchType", + "ESCT_EUnitRole", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_GroupHelper", + "ESCT_HeliBehaviourBaseComponent", + "ESCT_HeliBehaviourBaseComponentClass", + "ESCT_Misc", + "ESCT_Player", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_HelicopterRecovery.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_EUnitRole", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_HeliBehaviourBaseComponent", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_LogisticsVehicle.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_EUnitRole", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_HeliBehaviourBaseComponent", + "ESCT_HeliBehaviourBaseComponentClass" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_Resupply.c": [ + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/EAI_SupplyConvoys.c": [ + "ESCT_CharacterHelper", + "ESCT_CharacterInitComponent", + "ESCT_EGameState", + "ESCT_ELocationType", + "ESCT_EMilitaryBranchType", + "ESCT_EscapistsGameMode", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_GroupHelper", + "ESCT_Location", + "ESCT_LocationSystem", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/Simulation/EAI_Simulation.c": [ + "ESCT_CharacterHelper", + "ESCT_EEscapistsRadioMessage", + "ESCT_EGameState", + "ESCT_ELocationSpawnReason", + "ESCT_ELocationType", + "ESCT_ESpawnState", + "ESCT_EntityHelper", + "ESCT_EscapeHelicopterComponent", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsNetworkComponent", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_Location", + "ESCT_LocationMapUIComponent", + "ESCT_LocationSystem", + "ESCT_LockedDoorComponent", + "ESCT_LockpickTask", + "ESCT_PlayerCharacter", + "ESCT_PlayerFactionInfo", + "ESCT_PrisonComponent", + "ESCT_PrisonDoorComponent", + "ESCT_Radio", + "ESCT_RadioState", + "ESCT_RadioStation", + "ESCT_SpawnPositionComponent", + "ESCT_TaskFuncs", + "ESCT_WinLoseHandlerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/Simulation/EAI_SimulationLifecycle.c": [ + "ESCT_ELocationSpawnReason", + "ESCT_EStartType", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsGameMode", + "ESCT_FactionManager", + "ESCT_SetupConfig", + "SCRTC_BaseGameMode" + ], + "escapists-ai/Scripts/Game/EscapistsAI/Simulation/EAI_SimulationBot.c": [ + "ESCT_CharacterHelper", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai/Scripts/Game/EscapistsAI/Simulation/EAI_SimulationSpectators.c": [ + "ESCT_AssignTargetManualCameraComponent", + "ESCT_EscapistsGameMode", + "ESCT_EscapistsNetworkComponent", + "ESCT_LookAtTargetManualCameraComponent", + "ESCT_SpectatorComponent", + "ESCT_SpectatorMenuLayoutEditorComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AircraftAmmo.c": [ + "ESCT_SpawnHelpers" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AssaultParachute.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_DependencyGuards.c": [ + "ESCT_City", + "ESCT_CivilianPresenceComponent", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsGameMode", + "ESCT_PlayerDamageManagerComponent", + "ESCT_StorageArsenalComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_DisableAmbientEvents.c": [ + "ESCT_AmbientEventBase", + "ESCT_AmbientEventInfo", + "ESCT_AmbientEventSystem", + "ESCT_ESupportType", + "ESCT_MortarBarrageBase", + "ESCT_SupportBase", + "ESCT_SupportInfo", + "ESCT_SupportPicker" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_FactionRelations.c": [ + "ESCT_CharacterHelper", + "ESCT_Faction", + "ESCT_FactionManager" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_GroupLookup.c": [ + "ESCT_EGroupLookupExclusionType", + "ESCT_EGroupSize", + "ESCT_EMilitaryBranchType", + "ESCT_EntityCatalogHelper", + "ESCT_FactionLookupValue", + "ESCT_GroupLookup", + "ESCT_GroupLookupData", + "ESCT_Logger", + "ESCT_Misc" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_GroupTactics.c": [ + "ESCT_CharacterHelper", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HQ.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_Misc", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HQBodySearch.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_RoadNavigation", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HQNetwork.c": [ + "ESCT_CharacterHelper", + "ESCT_FactionManager" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HQObservation.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HQRoadblocks.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_Misc", + "ESCT_RoadNavigation", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_MineTask.c": [ + "ESCT_CharacterHelper", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_Mines.c": [ + "ESCT_CharacterHelper", + "ESCT_FactionManager" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_NativeRadioCall.c": [ + "ESCT_AICallSupportTo", + "ESCT_CharacterHelper", + "ESCT_ESupportCallState", + "ESCT_SupportCallerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_Performance.c": [ + "ESCT_Player" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_RuntimeGuards.c": [ + "ESCT_EscapistsGameMode", + "ESCT_SpawnLogic" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_SettlementSafety.c": [ + "ESCT_ELocationType", + "ESCT_Location", + "ESCT_LocationSystem" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_StartingOutfit.c": [ + "ESCT_EscapistsGameMode", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AIResponseSystem.c": [ + "ESCT_CharacterHelper", + "ESCT_CharacterLookupData", + "ESCT_EMilitaryBranchType", + "ESCT_EntityCatalogHelper", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_Misc", + "ESCT_RoadNavigation", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_StingerEquipment.c": [ + "ESCT_CharacterHelper", + "ESCT_EscapistsGameMode", + "ESCT_FactionManager" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AirAssault.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_GameStateManagerComponent", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HQStatus.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_SniperOptics.c": [ + "ESCT_CharacterHelper", + "ESCT_EscapistsGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_StartSelection.c": [ + "ESCT_EStartType", + "ESCT_EscapistsConfigComponent", + "ESCT_FactionManager", + "ESCT_HelicrashLocationHolder", + "ESCT_PrisonComponent", + "ESCT_SetupConfig" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AIConfig.c": [ + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_ImprovisedPrisons.c": [ + "ESCT_CharacterSpawnPoint", + "ESCT_Constants", + "ESCT_EStartType", + "ESCT_EntityHelper", + "ESCT_EntitySearch", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsGameMode", + "ESCT_LocationSystem", + "ESCT_Misc", + "ESCT_PrisonComponent", + "ESCT_PrisonDoorComponent", + "ESCT_SpawnHelpers", + "ESCT_SpawnPoint", + "ESCT_SpawnPositionComponent", + "ESCT_StartAreaComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_MortarFiring.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_MortarSystem.c": [ + "ESCT_CharacterHelper", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AmmoSupply.c": [ + "ESCT_CharacterHelper" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_DepotLoading.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_AirRecon.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_EMilitaryBranchType", + "ESCT_EUnitRole", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_GroupHelper", + "ESCT_HeliBehaviourBaseComponent", + "ESCT_HeliBehaviourBaseComponentClass", + "ESCT_Misc", + "ESCT_Player", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_HelicopterRecovery.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_EUnitRole", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_HeliBehaviourBaseComponent", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_LogisticsVehicle.c": [ + "ESCT_CharacterHelper", + "ESCT_EMilitaryBranchType", + "ESCT_EUnitRole", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GroupHelper", + "ESCT_HeliBehaviourBaseComponent", + "ESCT_HeliBehaviourBaseComponentClass" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_Resupply.c": [ + "ESCT_FactionManager", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/EAI_SupplyConvoys.c": [ + "ESCT_CharacterHelper", + "ESCT_CharacterInitComponent", + "ESCT_EGameState", + "ESCT_ELocationType", + "ESCT_EMilitaryBranchType", + "ESCT_EscapistsGameMode", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_GroupHelper", + "ESCT_Location", + "ESCT_LocationSystem", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "ESCT_WaypointManagerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/Simulation/EAI_Simulation.c": [ + "ESCT_CharacterHelper", + "ESCT_EEscapistsRadioMessage", + "ESCT_EGameState", + "ESCT_ELocationSpawnReason", + "ESCT_ELocationType", + "ESCT_ESpawnState", + "ESCT_EntityHelper", + "ESCT_EscapeHelicopterComponent", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsNetworkComponent", + "ESCT_Faction", + "ESCT_FactionManager", + "ESCT_GameStateManagerComponent", + "ESCT_Location", + "ESCT_LocationMapUIComponent", + "ESCT_LocationSystem", + "ESCT_LockedDoorComponent", + "ESCT_LockpickTask", + "ESCT_PlayerCharacter", + "ESCT_PlayerFactionInfo", + "ESCT_PrisonComponent", + "ESCT_PrisonDoorComponent", + "ESCT_Radio", + "ESCT_RadioState", + "ESCT_RadioStation", + "ESCT_SpawnPositionComponent", + "ESCT_TaskFuncs", + "ESCT_WinLoseHandlerComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/Simulation/EAI_SimulationBot.c": [ + "ESCT_CharacterHelper", + "ESCT_WaypointManagerComponent" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/Simulation/EAI_SimulationSpectators.c": [ + "ESCT_AssignTargetManualCameraComponent", + "ESCT_EscapistsGameMode", + "ESCT_EscapistsNetworkComponent", + "ESCT_LookAtTargetManualCameraComponent", + "ESCT_SpectatorComponent", + "ESCT_SpectatorMenuLayoutEditorComponent", + "SCRTC_BaseGameMode" + ], + "escapists-ai-norhs/Scripts/Game/EscapistsAI/Simulation/EAI_SimulationLifecycle.c": [ + "ESCT_ELocationSpawnReason", + "ESCT_EStartType", + "ESCT_EscapistsConfigComponent", + "ESCT_EscapistsGameMode", + "ESCT_FactionManager", + "ESCT_SetupConfig", + "SCRTC_BaseGameMode" + ], + "escapists-intel/Scripts/Game/EscapistsIntel/EI_IntelLifecycle.c": [ + "ESCT_EscapistsGameMode", + "SCRTC_BaseGameMode" + ], + "escapists-intel/Scripts/Game/EscapistsIntel/EI_IntelService.c": [ + "ESCT_ELocationType", + "ESCT_KnownLocationsSystem", + "ESCT_Location", + "ESCT_LocationMapUIComponent", + "SCRTC_BaseGameMode" + ], + "escapists-intel/Scripts/Game/EscapistsIntel/EI_MapDiscoveryUI.c": [ + "ESCT_ELocationType", + "ESCT_EscapistsMapUIBase", + "ESCT_KnownLocationsSystem", + "ESCT_Location", + "ESCT_LocationMapUIComponent", + "ESCT_MapEscapistsUI" + ], + "escapists-intel/Scripts/Game/EscapistsIntel/EI_PlayerBriefing.c": [ + "ESCT_EscapistsGameMode" + ], + "escapists-chat/Scripts/Game/EscapistsChat/ECHAT_HeliSnapshot.c": [ + "SCRTC_BaseGameMode" + ], + "escapists-chat/Scripts/Game/EscapistsChat/ECHAT_SimulationCommands.c": [ + "ESCT_EscapistsGameMode", + "SCRTC_BaseGameMode" + ], + "escapists-chat/Scripts/Game/EscapistsChat/ECHAT_AdminCommands.c": [ + "ESCT_EscapistsGameMode", + "SCRTC_BaseGameMode" + ], + "escapists-chat/Scripts/Game/EscapistsChat/ECHAT_HeliTest.c": [ + "ESCT_CharacterHelper", + "ESCT_EGameState", + "ESCT_GameStateManagerComponent", + "ESCT_Misc", + "ESCT_SpawnHelpers", + "SCRTC_BaseGameMode" + ] +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/environment-restart-fixture.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/environment-restart-fixture.md new file mode 100644 index 0000000..5b465da --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/environment-restart-fixture.md @@ -0,0 +1,21 @@ +# Native next-round environment fixture + +`--project core --smoke environment-restart --rounds 2` is a bounded, opt-in check of two actual `ERR_GameMode` initializations. Use the existing private Workbench profile and headless runner. This is a native script fixture, not manual or multiplayer acceptance. + +Production adds only `protected string SettingsPath()` with the unchanged `ERR_Settings.PATH` default; the constructor uses that path. A WORKBENCH-only override selects `$profile:erri-environment-restart.json` only when both `errBaseSmoke=1` and `errSmokeOutcome=environment-restart` are present. All other runs retain the production path. The probe records the authored environment before normal service startup; it never substitutes a sample environment service or edits normal `rereintroduced.json`. + +The runner refuses any existing fixture settings, `.bak`, `.tmp`, or `erri-environment-restart-round.json` marker, including broken symlinks. It requires exactly two Core rounds. Round one checks authored defaults and original 14:00 / 1x clock defaults, saves 2000-02-29 and overcast through the real mode settings owner and production environment command helper, reloads the private file to verify persistence, and waits 2.5 seconds. The active environment must remain authored while the native clock advances at its original rate. Only after these assertions does it write a round-one completion marker and request the ordinary test defeat/reset. + +The next real mode initialization opens the same file through the production settings constructor. Its ordinary environment service must record the saved date/profile and apply the exact leap date plus native `Overcast` family. Another 2.5 seconds proves continuing clock progression. Successful round two deletes only the fixture settings/backup/temp/marker and verifies their absence. Failures leave fixture evidence untouched for diagnosis; preserve or move that evidence before rerunning. The persistent marker is for this explicit runner workflow; it does not authenticate arbitrary files supplied outside it. No general settings-path CLI has been introduced. + +The assertion compares authored weather across a short first-round interval; an authored weather transition coinciding with that interval could require investigation rather than indicating a settings mutation. Second-round weather uses the production forced family and loops normally. Clock rate checks do not benchmark simulation performance or prove remote replication. + +## Integration + +Copy the new `ERR_NativeEnvironmentRestartProbe.c`, this document, and `tests/test_environment_restart_runner.py`. Apply `environment-restart-integration.patch` to `ERR_GameMode.c`, `ERR_NativeBaseSmoke.c`, `tools/headless_workbench.py`, and `tools/check.py`. The patch is based on current central sources containing `casualty-bench` and `environment`; other outcomes remain unchanged. + +The smoke uses steps 1200/1202. Its probe is created before settings loading by the WORKBENCH path override, then polled by the ordinary Core smoke loop after the real prisoner exists. Both rounds use existing explicit defeat/reset behavior. `OnStop` stops the probe without deleting failure evidence. No normal player health or lifecycle is changed by this fixture. + +Run `python3 tools/check.py` for repository policy checks and runner refusal tests. Native compile, two-round execution, and archive provenance are still required before claiming this fixture passed. + +Native evidence `native-2026-09-19-065351` passes both real rounds, 107 combined assertions, with zero engine or script errors. The private fixture files were removed by successful round two. This proves the described local persistence path and retains the limits above. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/environment.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/environment.md new file mode 100644 index 0000000..0c5ff4c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/environment.md @@ -0,0 +1,28 @@ +# Round date and weather + +Core's `ERR_EnvironmentService` applies optional date and weather selections once during server-side round preparation, immediately before the existing clock service. The native time/weather manager owns simulation and replication. There is no environment tick, local preview, player-health modification or periodic reset. Repeated starts retain the initial selection; a stopped service cannot restart. + +Defaults preserve the authored world. Old valid settings files without `startDateCode` and `weatherProfile` acquire zero values in memory, are not rewritten during loading, and retain every existing supported value. An explicit successful save writes the expanded schema using the existing validated temporary-file/backup flow. Present invalid environment values reject the file rather than silently defaulting. + +Administrators use: + +- `/esc mission date show` and `/esc mission date set YYYY-MM-DD` (1900–2050 inclusive), or `set authored`. +- `/esc mission weather show` and `/esc mission weather set authored|clear|overcast|rain` (`rainy` is accepted as an alias). + +These commands save next-round choices. They report the current native environment separately and do not apply saved changes to the running world. Date validation covers month lengths and Gregorian leap years, including non-leap 1900 and leap 2000. The native manager also validates an explicit date before applying it. + +`weatherProfile` values are 0 authored, 1 Clear, 2 Overcast and 3 Rainy. An explicit profile uses the native replicated `ForceWeatherTo` route and loops that weather family. The service validates that the named vanilla state and transition manager exist before changing the date or issuing a request. It verifies the requested current/next state and looping flag. On rejection it attempts to restore the previous date and weather family/looping before startup reports failure. This is not a snapshot of every native transition queue or variant parameter. No UI preview API is used. + +A fixed profile selects a family deterministically; cloud variants, wind and other native weather behavior still follow vanilla rules. Existing authored wind/fog overrides are retained. The `authored` setting makes no weather request and preserves the scenario's original weather evolution. Visual intensity, remote replication, manual visibility and long-running transitions still require runtime acceptance. + +`startDateCode` is an internal compact integer: `(year - 1900) * 10000 + month * 100 + day`, with 0 meaning authored. For example, 1989-06-01 is 890601. It intentionally stays below 1,501,232, exactly representable by the existing settings reader's floating-point JSON path. A full `YYYYMMDD` number can exceed single-precision exact integer range and corrupt odd dates. Use the natural date command rather than constructing codes by hand. + +## Validation + +`tests/test_environment_policy.py` executes the actual settings validator and production parsing/formatting functions through the existing C++ policy harness. It compares calendar boundary cases across every supported year against Python's independent `datetime` calendar, tests malformed dates and names, and checks defaults and native family names. Existing migration tests cover the added defaults and bounds. These checks pass; they are not Enforce compilation. + +The opt-in WORKBENCH `ERR_NativeEnvironmentProbe` uses a dedicated test settings file, preserving the actual mission settings. It tests legacy loading without rewrite, exact odd date-code serialization, save rejection, unauthorized commands, next-round command behavior and no world mutation from saves. It then temporarily uses fresh service instances to select Clear, Overcast and Rainy with explicit/leap/authored dates, waiting at least one 500ms smoke tick per state. It verifies start idempotency, stopped-service rejection and unchanged clock/progression settings. Before completing it restores the original date, weather family and looping mode. Native transition-queue timing and cloud-variant history are not restored exactly; this is an isolated case that ends with a test-requested round reset. Native compilation and execution remain pending centralized hidden and muted testing. + +## Native evidence + +[063559](evidence/native-2026-09-19-063559/report.json) completed 67 combined environment/catalog assertions with no script/VM failures and no engine errors. Exact native catalogs retained medical and radio entries; all three weather families and a leap date applied without resetting the clock. Defaults and next-round settings behavior were exercised. This one-round development result does not establish multiplayer replication or repeated-restart reliability. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/extraction.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/extraction.md new file mode 100644 index 0000000..1d512dd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/extraction.md @@ -0,0 +1,21 @@ +# Extraction ownership and results + +Core owns `ERR_ExtractionService` independently of mission progression and HQ. The scenario registers one physical extraction vehicle during preparation. The service refuses subsequent assignment, including after loss. It never spawns a replacement. Once sites are prepared, starting the service validates the escape boundary and checks for a helicopter controller, pilot position and at least twelve pilot/passenger compartments. An unsuitable transport or invalid boundary prevents player spawning and rolls back authored site content. + +`ERR_GameMode` ticks extraction before the empty-server pause, so a lost helicopter or a reserved disconnected occupant reaching the boundary can still resolve. Radio progress and normal mission work retain their empty-server behavior. Loss is terminal throughout the active mission, including prison and radio phases. Waiting until extraction to discover that its only helicopter is gone is no longer necessary. The mode publishes a specific replicated status/debriefing reason for helicopter loss or no remaining survivors. + +During extraction, the service checks the registered vehicle's position against the boundary and each registered participant's actual compartment occupancy. Boarding alone, crossing before the extraction phase, a dead occupant, a survivor left behind, or an unregistered NPC cannot produce a winning identity. Living unconscious occupants and reserved disconnected occupants can escape. The first qualifying boundary crossing freezes the identity snapshot and emits one `OnResolved` event; subsequent ticks do not award additional escapees. + +Results belong to backend account identities. `ConnectedWinners` maps those identities to their current authenticated connection records and rejects recycled IDs. It is an adapter for the native game-end API, whose transient ID array is not a durable result store. Successor UI delivery uses a replicated controller result derived from the server identity snapshot and tagged with the current mission replication ID. Audit/binding resets and republishes it; the end screen ignores stale native winner IDs and refreshes after delayed result updates. The actual local-controller/native-widget fixture passes; real reconnect/replication acceptance remains separate. + +## Native development checks + +`--project core --smoke extraction-capacity --rounds 1` uses real vanilla character entities and the authored Mi-8, with an isolated synthetic identity roster. The transport exposes 17 pilot/passenger positions; twelve characters successfully occupy separate native seats. A second case kills one occupant, disembarks another, makes a passenger unconscious, and reuses a disconnected account's connection ID for a different character. The expected partial result distinguishes ten living aboard escapees from three non-escapees; reconnect mapping follows identity rather than the recycled ID. + +This fixture requests its own end-of-test reset. Its use of native compartments, scripted consciousness and synthetic records does not establish manual boarding, piloting, medical treatment, twelve network clients, actual reconnects or UI replication. + +`--project core --smoke early-helicopter-loss` destroys the registered helicopter during prison while the actual local prisoner is alive. It expects the normal mission tick to reach defeat with the specific loss reason. + +`--project core --smoke extraction-startup-failure --rounds 1` substitutes a real vanilla vehicle with insufficient seating only in the fixture's in-memory catalog. `extraction-boundary-failure` uses the proper helicopter with an invalid radius. Both are negative startup tests: they must retain PREPARING, withhold players and clear authored population/stock/scenery. Their expected startup ERROR is retained in the archived native report. + +The integrated [040928 native run](evidence/native-2026-09-19-040928/report.json) has 100 passing assertions across capacity, partial results, result widgets and time settings/progression, with no script/VM exceptions. Seven inherited vehicle resource errors remain. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/faction-catalog-source-hashes.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/faction-catalog-source-hashes.json new file mode 100644 index 0000000..de70b90 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/faction-catalog-source-hashes.json @@ -0,0 +1,9 @@ +{ + "Configs/Factions/US.conf": "d8d16abbecadc6987ca7eed3b114446d0af5753535c891fcefc20d5b2d7db583", + "Configs/Factions/USSR.conf": "2d3d3af74d0da33017ae3132c613fc9c19c0d20cd850a9830bb208db59e4bf25", + "Configs/Factions/BLUFOR.conf": "8a0a23245f82a23131c7a425bc20089064c6f57102557c9dda4570b9bfaebe41", + "Configs/Factions/OPFOR.conf": "8401e84d2bccec38c9fa6f06bfc74d7d90aace037712885abb179869e5bc4012", + "Configs/EntityCatalog/USSR/Vehicles_EntityCatalog_USSR.conf": "d4283eedd65dc7a5d65fb701a7fc1d63073f5a51a5c28a801fa5102b151a468f", + "Prefabs/MP/Managers/Factions/FactionManager_Base.et": "9c4fb0cc52c173f94a54126aa4b0e9b6f441851c631503dc6e8fb3703ce50492", + "Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et": "547cf8057b65e278429ed2aef7b96745bd7053765158e1d98034dab16333cbe6" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/finite-mortar-operations.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/finite-mortar-operations.md new file mode 100644 index 0000000..3a5af78 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/finite-mortar-operations.md @@ -0,0 +1,38 @@ +# Finite mortar readiness and ammunition operations + +This patch completes missing lifecycle behavior in the existing HQ-owned mortar path. It adds no gun/crew response spawn, depot, convoy or aircraft. Existing physical projectiles, firing safety and stock behavior outside the successor's registered battery remain native. Local tests pass; native compilation and new runtime behavior still require verification. + +## Startup + +The authored one-gun/four-member battery is still created once by `ERR_MortarSystem.Prepare`. A new battery-owned readiness object polls before runtime Operational checks, so an initially empty group remains pending until its bounded deadline rather than bypassing initialization forever. Within 90 seconds it requires native `IsExpandComplete`, exactly three distinct configured mortar crew and one configured manpack operator, live correct-faction actors, initialized inventories and a valid native gun registration. The existing minimum ten-second startup delay remains, but no longer means readiness. + +The original nine-shell budget per gunner is allocated once after the complete original population is present. Initial shell counts outside 0..9 fail. Each missing shell request receives a distinct retained completion callback; the allocation latch is set before the first native request. A rejection/partial failure permanently closes allocation, without a new budget or retry. All callbacks must finish successfully and each original gunner must actually carry nine unique HE entities, with zero on the RTO and 27 unique group shells, before `StartupActivated` becomes true. Stolen/consumed/missing initialization items are observed until the same deadline and never replenished. Optional short-range crew handsets retain their existing one-time attempt; the actual RTO manpack is mandatory. + +The support owner does not replace injured, lost or substituted crew. Stop or failed pending initialization disables only its owned group's `SetSpawnImmediately` intent, empties only that group's initial prefab list, and purges its queued native requests. Existing physical actors, gun and items remain owned by the existing mission cleanup; the helper neither deletes them nor changes their health. Successfully initialized Stop retains asset references and readable inventory diagnostics. + +## Exact shell transfers + +`SupplyState(now)` explicitly returns FAILED/PENDING/READY. `SupplyGunner()` remains a compatibility wrapper and only returns true for READY. The old request-accepted-as-supplied behavior is removed. + +A transaction captures the exact shell, donor, gunner, source/destination managers, destination storage, gun, group and HQ order number. Native `TryMoveItemToStorage` is issued once; callback methods only record completion/failure and never launch an activity. Authorization is checked on the server against the still-active HQ battery/order, original delivered report timestamp, original gun/group, conscious current crew, factions, distance and turret occupant. Supply READY requires a successful callback **and** the exact shell absent from the donor inventory, present in the gunner inventory and attached to the requested storage. Callback `GetItem()` is deliberately not used because its installed contract excludes Move operations. + +Each shell identity is attempted at most once for this battery during the round, including rejected/ambiguous attempts. A canceled operation cannot authorize fire. An accepted unresolved operation stays reserved and blocks another battery transfer even after its order is canceled. A late successful callback can resolve physical ownership, but cannot make the canceled/expired current order ready. No native retry, shell clone, replacement or health change is used to resolve uncertainty. A successful callback without physical ownership proof remains ambiguous; at the eight-second deadline that order fails, and further supply remains blocked until there is a definite outcome. This is deliberately conservative and can leave a battery unavailable rather than risk overlapping inventory mutations. + +Once a transfer has genuinely completed for its current order, its transaction is released so later rounds can request a different existing shell. The attempted shell identity remains excluded from another move request. Ammo already physically in the current gunner remains usable; no new supply entity is spawned during firing. + +## Order and native shot counter integration + +The system retains the radio-delivered snapshot in `PendingSupplyReport` while supply is pending, checks its unchanged observation age and eligibility every tick, and creates the stock artillery activity only once when READY. The scheduler excludes a pending supply report/unresolved transfer from new assignments. + +The native ShootingLogic superclass increments its behavior shot counter. The successor hook therefore waits **before** calling super: first for a confirmed physical projectile, then for actual next-round supply. Pending ticks return RUNNING without incrementing; supply failure returns FAIL and closes authorization through the existing HQ rejection path. Once READY, super runs once and the next aim is requested. The final confirmed salvo round does not require an extra shell. Real `OnWeaponFired` remains the independent authoritative projectile count; no node success is relabeled as a shot. + +## Files and validation + +New production helpers: + +- `addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c` +- `addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c` + +`mortar-finite-operations.patch` contains only Battery/System/Firing edits. No native probe, shared staging, Core source, resources or `check.py` was edited. New `tests/test_mortar_transactions.py` executes actual extracted population/allocation/order/ownership/cycle policies and the actual transfer Poll/Acknowledge control flow against narrow API fakes. Cases include zero/late/duplicate population, callback without inventory, wrong destination storage, simultaneous source/destination claims, stale order, cancellation, exact timeout, late completion, missing shell and repeated pending ticks without duplicate shot-counter increment. Source contracts additionally constrain allocation latching, single native move, cleanup and Firing's pre-super wait. Native inventory/expansion/firing remain separate qualification tasks. + +Primary installed API references and hashes are in `vanilla-reference-sha256.json`. The native first-projectile fixture prepared separately by the other agent continues using existing public Gun, Group, StartupActivated, SpawnFailure, CountShells, OrderShots and TotalShots. Its first shot alone does not exercise donor transfer; a separate exact-item transfer/interruption test is still needed before claiming resupply acceptance. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/ground-transport.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ground-transport.md new file mode 100644 index 0000000..0d0b189 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ground-transport.md @@ -0,0 +1,23 @@ +# Finite ground transport + +The western supply site's optional `Transport` definition owns one vanilla UAZ. It is created once by `ERR_SiteService.Begin`, tracked alongside the site's crates and scenery, and transferred to the existing mission owner when preparation succeeds. Destruction, fuel depletion, repeated `Prepare`, and later service ticks do not spawn a replacement or refill it. Terminal stop prevents reinitialization; preparation failure rolls the vehicle back with the other authored contents. + +The vehicle is optional ground transport for the route, not a guarantee that all twelve prisoners can travel simultaneously. Losing it does not defeat the mission or remove the walking route. It is not registered as an HQ response asset. + +## Authoring + +Only depot and outpost sites accept a `Transport ERR_SiteTransport` block. One vehicle is permitted per site and at most four per scenario. `Prefab`, ground-relative `Offset`, `Heading`, `ClearanceRadius`, and `MaximumTerrainRange` are authored in `EveronSites.conf`. Offset magnitude is capped at 60 m and vertical offsets are forbidden. Parking clearance radius must be 2–8 m and the allowed terrain elevation range 0–1.5 m. + +Before spawning, the service samples a 3×3 terrain grid across the parking square, rejects water, steep ground and objects with native geometry, and logs the result. It never removes terrain scenery or searches for another spawn point. Preparation additionally requires a live wheeled vehicle, fuel, native driver and passenger positions, and a vehicle bounding box fitting inside the surveyed footprint with a 0.5 m margin. The persistent handbrake is set at creation. + +The initial 5960/7232 candidate was rejected by native geometry checks. A bounded [parking survey](evidence/native-2026-09-19-043631-parking-survey/report.json) found 43 clear candidates. The selected parking position is **5960/7212**, offset 0/0/-8 from the western cache, heading 180°, final clearance radius 4 m and maximum terrain range 1 m. The initial six-metre-square survey sampled a 0.625 m range; the final native run rechecks the larger eight-metre square. The readiness check compares actual vehicle bounds to this surveyed center, rather than a possibly displaced current origin. Manual route navigation remains unverified. + +## Asset audit + +The vehicle reference is `{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et`, independently checked against the installed vanilla `resourceDatabase.rdb`. This is already in `docs/vanilla-resources.json`. Its vanilla base config defines two 39 L tanks initially containing 29.25 L each, hence 58.5 L total initial fuel. The successor does not set or regenerate that fuel. The [044205 native run](evidence/native-2026-09-19-044205/report.json) observes 58.5 L initially, 78 L total capacity and five usable driver/passenger seats. No original Escapists code, composition or asset is used. + +## Native fixture + +`ERR_NativeTransportProbe` is WORKBENCH-only and opt-in. Its `Tick(now)` helper uses the actual authored UAZ and two isolated scripted prisoner characters. It checks ownership, native pilot/passenger compartments, physical occupancy and ordinary native engine startup. It then deliberately drains fuel, waits, queries preparation, deletes the vehicle and queries preparation again, verifies initialization cannot repeat, and stops the site service. This destructive fixture therefore belongs in its own smoke branch followed by a round reset. + +The linked native run passes all 23 checks with no script/VM exceptions; seven inherited vehicle schema errors remain. The fixture is not manual driving, normal boarding-action validation, road navigation, fuel-range balancing, remote-client replication, or multiplayer proof. Neither it nor repository validation should be reported as those checks. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-fix.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-fix.md new file mode 100644 index 0000000..d2d56c8 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-fix.md @@ -0,0 +1,20 @@ +# Retire initial population intent before purging + +The first native `guard-cancel` test failed in `logs_2026-09-19_07-27-00`: at 07:27:50.658 it proved the empty automatic six-slot group had entered native initialization without dispatching a member, then stopped its pending owner twice. At 07:27:51.671 the group had received a later dispatch or member. The old purge-only implementation therefore did not establish cancellation for an incomplete group kept alive. The first log does not distinguish a later native expansion pass from an unobserved later request; the new fixture records owner cancellation calls, tagged `EOnInit`, `RequestSpawn` and `ExpandOneMember` calls while delegating every native method unchanged. + +Installed `SCR_AIGroup` explains why a queued request is not the complete population contract: + +- `EOnInit` at line 2578 checks `m_bSpawnImmediately`, then requests the slot-array count. +- `RequestSpawn` at 2684 enqueues into `ChimeraAIWorld`; its documentation describes later expansion to full size. +- `ExpandOneMember` at 2725 returns without spawning when `m_aUnitPrefabSlots` is null/empty, and otherwise computes capacity from its count. +- `IsExpandComplete` at 2771 treats null/empty configured slots as complete; this is native production behavior, not a fixture override. +- `SetSpawnImmediately` at 2643 changes the per-instance automatic-initialization flag. +- `DespawnMembers` at 2872 returns before its queue purge when no physical members exist. + +For successor-owned PENDING initial preparation only, cancellation now disables automatic spawning, assigns a **new empty prefab-slot array to that group instance**, then purges its native queue requests. It never clears a possibly shared array, changes installed resources, invents dead counts, calls a spawn function, or suppresses `ExpandOneMember`. Existing partial members remain physical and owned until normal `Rollback` deletes them. READY gameplay groups remain excluded by the existing `Stop` state gate, so losses during ordinary play cannot cause this startup path to refill or rewrite their profile. + +The unchanged core cancellation assertions still require zero further dispatches and stable cancelled members while an uncancelled control physically reaches six. Additional assertions verify that cancellation runs once, cancelled instance arrays become empty, and the control retains its six-slot profile and automatic-spawn setting. The test still deletes all disposable groups and actual characters through owner rollback and observes late activity. + +`test_guard_cancellation_policy.py` executes the actual cancellation and Stop bodies with two cancelled groups sharing an authored six-slot array with an uncancelled control. It proves replacement does not mutate that shared array, existing physical actor counts stay unchanged, unrequested groups are skipped, READY owners do not retire profiles, and repeated Stop is idempotent. This is source-policy evidence only. The fix and diagnostics still require native compilation and another engine run; the failed first run remains a failure. + +Native cancellation now passes in [073601](evidence/native-2026-09-19-073601/report.json): 68 assertions, no engine/script errors. Empty and partial groups remain stable through a fifteen-second observation while the uncancelled control fills. Owned rollback deletes all captured actors/groups, and the original mission groups remain unchanged. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-source-hashes.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-source-hashes.json new file mode 100644 index 0000000..db588ab --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-cancellation-source-hashes.json @@ -0,0 +1,5 @@ +{ + "/tmp/erri-vanilla/scripts/Game/Entities/SCR_AIGroup.c": "afb923ea5c78a56d4111d7261fa16fa6da5323ce43d865f7bf5534304e9ff54f", + "/tmp/erri-vanilla/scripts/Game/generated/AI/ChimeraAIWorld.c": "0a4a45677fdd0bc534480b506218cbea6cd8bced017fac76d5c991d3edcb3e8b", + "/tmp/erri-workbench-profile/logs/logs_2026-09-19_07-27-00/console.log": "d05cdacd5b73fbb1a0b7de76d9bcda06174ba6a728dd75baa3143ca3a420196b" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-source-hashes.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-source-hashes.json new file mode 100644 index 0000000..04d0874 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/guard-source-hashes.json @@ -0,0 +1,7 @@ +{ + "/tmp/erri-vanilla/scripts/Game/Entities/SCR_AIGroup.c": "afb923ea5c78a56d4111d7261fa16fa6da5323ce43d865f7bf5534304e9ff54f", + "/tmp/erri-vanilla/scripts/Game/generated/AI/ChimeraAIWorld.c": "0a4a45677fdd0bc534480b506218cbea6cd8bced017fac76d5c991d3edcb3e8b", + "/tmp/erri-vanilla/scripts/Game/generated/AI/ChimeraAIGroup.c": "3dd2aac7f6ec98a079dfc5dbe0feafd6c9bf942a30a2a01a50e61bc09e60a062", + "/tmp/erri-vanilla/scripts/Game/AI/SCR_AIWorld.c": "71dfa397b1d641ef41ce023b2c33adba68a0b9b55bb0fd8050f8a78bd1fbf10c", + "/tmp/erri-workbench-profile/logs/logs_2026-09-19_06-59-35/console.log": "c885b5042491c1eba5cfaafc77b6ac9504930a09946aadd63bb5140e22d6f64f" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement-source-sha256.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement-source-sha256.json new file mode 100644 index 0000000..cf42520 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement-source-sha256.json @@ -0,0 +1,6 @@ +{ + "scripts/Game/UserActions/SCR_ToggleHandbrakeAction.c": "adefcd64f24b3bf449b945fb87bfe1efe34c29a0648d1fc8c8c254a658ee7138", + "scripts/Game/HitZone/SCR_WheelHitZone.c": "c35dfdd63a30e7a793e57911d306e90f3f23fe4862909332a297fd833e17a2e0", + "scripts/Game/generated/Vehicle/VehicleBaseSimulation.c": "8ceb71cff6cbe30484aa4cd67e27fa722508e82641415cdb2f9b3dda8ae1ab01", + "scripts/Game/Components/SCR_VehicleSpawner.c": "b83f714d46f5acdf86a839cffa2aedf9b8914bac83d151cc9573b69273338e0c" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement.md new file mode 100644 index 0000000..68189d6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-extraction-placement.md @@ -0,0 +1,24 @@ +# Initial extraction placement + +This change addresses an observed initial-placement failure, not an unloading or extraction-boundary change. In the 2026-09-19 07:34:23 native attempt, the newly spawned Mi8 was sleeping, engine off, without native landing contact. Three short wheel casts all missed the terrain. A zero velocity reading alone therefore could not establish support. + +`ERR_ExtractionPlacement` belongs to `ERR_SiteService` during PREPARING. It accepts only that mode's registered, living Mi8. Once native dynamic physics and a valid helicopter simulation exist, it performs exactly one `Physics.SetActive(ActiveState.ACTIVE)`. The native simulation then owns settling. There is no transform, velocity, impulse, engine, fuel, health or collision mutation. No readiness is accepted in the wake frame. + +Preparation requires the existing strict `AircraftReady` predicate, actual fuel and one second of successive observations, with gaps no greater than 1.5 seconds. A failed observation restarts that interval. The first stable qualification must complete strictly before the 30-second deadline; an already READY aircraft can continue to be monitored while guards finish after that deadline. A broken observation after the deadline fails instead of opening a new settling period. Failure to establish readiness within 30 seconds uses the existing site failure/rollback path. Even after readiness first succeeds, subsequent preparation polls still check the aircraft while other initial content finishes. Stop prevents further wake/poll work. No gameplay extraction Begin condition changes; players may later fly, expend fuel, damage or lose the aircraft normally. + +Diagnostic readings include all landing pivots and tire-bottom terrain gaps, short-cast support results, native-vs-entity vehicle transforms, physics activation/motion, contact and fuel. The sleeping-wheel fallback thresholds remain unchanged. + +The opt-in existing `casualty-service` ground probe now verifies the production placement's readiness and exactly one initial wake, then reads the real mission aircraft's contact/support. Its separate airborne/tilted/moving negative aircraft remains disposable. The fixture does not wake or reposition the mission aircraft. It is neither a manual player-action test nor remote multiplayer proof. + +Primary installed-source references inspected read-only: + +- `scripts/Game/UserActions/SCR_ToggleHandbrakeAction.c:97`: vehicle physics wake uses `SetActive(ActiveState.ACTIVE)`. +- `scripts/Game/HitZone/SCR_WheelHitZone.c:223`: stock component explicitly wakes sleeping dynamic vehicle physics after changes (using balanced impulses there, which this successor does not copy). +- `scripts/Game/generated/Vehicle/VehicleBaseSimulation.c`: public `IsValid`, `GetWorldTransform`, and landing-gear/wheel `HasAnyGroundContact` contract. +- `scripts/Game/Components/SCR_VehicleSpawner.c`: bare prefab spawning does not itself perform an explicit support readiness check. + +Local validation: `python3 tests/test_extraction_placement_policy.py` passes actual extracted production timing policies and focused integration/source contracts. Enforce compilation and actual settling remain unverified until the parent runs the native scenario. No prior failed evidence is relabeled as passing. + +SiteService owns `ERR_ExtractionPlacement.c`; the ground probe inspects its actual one-shot wake and readiness state. `tools/check.py` includes `tests/test_extraction_placement_policy.py`. Initial guard cancellation remains separately owned and verified. + +Native observations in [074655](evidence/native-2026-09-19-074655/report.json) confirm one initial wake, actual dynamic settling, all three wheel support traces within millimetres of terrain, native contact, fuel and one-second readiness before spawning. The raised/tilted/moving negatives also pass. The full casualty case fails later on a separate fixture health setup, so this is scoped placement evidence rather than a passing complete run. The diagnostic simulation-transform query returned identity despite the correctly moving entity; it is not used for readiness or support decisions. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-guard-readiness.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-guard-readiness.md new file mode 100644 index 0000000..858e059 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/initial-guard-readiness.md @@ -0,0 +1,17 @@ +# Initial guard population readiness + +In native log `logs_2026-09-19_06-59-35`, the last site group was authored at 07:00:21.170, the mission entered prison at 07:00:21.266, and the patrol fixture required a living outpost actor at 07:00:22.216. The old preparation checked the group entity's faction but never its members. + +Installed vanilla `SCR_AIGroup.EOnInit` (line 2578) requests the configured slot count through `RequestSpawn` (2684), which delegates to native `ChimeraAIWorld.EnqueueSpawnRequest`. Installed source describes capped, frame-time-aware dispatch at 2 Hz. `ExpandOneMember` (2725) creates one soldier per successful dispatch; `SpawnGroupMember` may also wait for streamed navigation tiles, with a 30-attempt fallback. Therefore a valid group entity/faction does not establish physical squad readiness. The source does not establish the exact native queue throughput in this run; native diagnostics must measure it. The successor AI addon contains no site-population call in HQ registration; Core does not depend on it to spawn guards. + +The successor now records each chosen group's public `m_aUnitPrefabSlots.Count()` once during initial creation. Empty/manual-only profiles fail clearly. Preparation waits up to 90 seconds for exactly that many distinct physical controlled entities, all conscious with the configured enemy faction, and native `IsExpandComplete()`. Stock insertion proceeds while guards are pending and retains its separate 15-second deadline. Count changes are logged, and a timeout reports the requested/physical/conscious counts, native completion state, navigation-tile status and dormant counts before ordinary rollback. A missing group, invalid count or foreign faction fails without waiting indefinitely. + +The successor never calls `SpawnUnits`, `SpawnMembers`, `ExpandOneMember` or `RequestSpawn` to retry this population. Once the site service is READY, the existing early return prevents this check from running again. Casualties and depleted groups are not restored. A stopped or failed PENDING preparation explicitly purges only its owned groups' initial native requests before rollback; vanilla `DespawnMembers` otherwise returns early when a group is empty, before its own queue purge. + +The patrol fixture performs its authoring/route checks once, then allows up to 15 seconds for the existing group actors to be observable. It asserts six distinct physical conscious guards for each current Everon patrol profile before observing movement. It creates no replacement soldiers. Its outer Core fixture budget must include the initial 90-second preparation plus this wait and the existing 180-second route deadline; integration uses 330 seconds for `patrols` only. + +Source hashes are in `guard-source-hashes.json`. The source-policy regression covers incomplete groups, missing consciousness/native completion, excess members, invalid profiles and strict timeout failure. Native queue timing, full group arrival, navigation traversal, startup-failure cleanup and no refill after casualties still require engine runs. + +Native run `native-2026-09-19-070919` observes all six original squads completing six distinct conscious actors before PRISON. The full patrol fixture passes 295 combined assertions with zero engine or script errors. Count-change logs establish asynchronous initial population without another spawn request. Timeout/cancellation logic is source-checked; this successful run does not exercise engine cancellation of a queued failed preparation. + +Native cancellation now passes in [073601](evidence/native-2026-09-19-073601/report.json): 68 assertions, no engine/script errors. Empty and partial groups remain stable through a fifteen-second observation while the uncancelled control fills. Owned rollback deletes all captured actors/groups, and the original mission groups remain unchanged. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/inventory-identity.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/inventory-identity.md new file mode 100644 index 0000000..a65a57b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/inventory-identity.md @@ -0,0 +1,9 @@ +# Physical inventory identity + +Native run `logs_2026-09-19_06-39-49` returned repeated `IEntity` references for watches and the player's personal belongings. The repeated records had the same native entity address/ID; this was enumeration duplication, not extra physical stock. Installed `InventoryStorageManagerComponent.GetItems` documents returning items from all managed storages and does not promise unique references. + +`ERR_Inventory.Items` now collects live unique entity references in first-seen order. `AppendUnique` also merges several inventories into an initially unique destination. Mortar battery totals count each physical shell once across crew inventories; initial equipment uses that same count; donor selection attempts each physical shell at most once per supply call. Distinct entities with the same prefab remain separate ammunition. The existing one-time nine-shell equipment target, real native moves, and finite-stock/depletion policy remain unchanged. Presence-only HQ radio checks remain unchanged. + +Discovery folder searches also deduplicate their initial Intel result before merging objective documents. Duplicate `FindItems` results have not been demonstrated in the native run; this preserves the collector's physical-identity contract and prevents repeated processing if that API returns them. + +`tests/test_inventory_enumeration_policy.py` executes the actual helper and mortar inventory-count bodies after mechanical translation with synthetic C++ entities. It covers repeated references, distinct shells sharing a prefab, null references, missing prefab data, cross-inventory overlap, ordering, and unchanged native input. This is a source-policy regression, not an Enforce compiler or inventory engine test. Native validation should rerun the existing companion mortar case: exactly 27 physical shells at startup, then physical deletion and sustained zero shells with zero fabricated shots. Core/Chat full-loop fixtures should count unique cache stock and distinct objective documents. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/local-singleplayer-admission.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/local-singleplayer-admission.md new file mode 100644 index 0000000..af37647 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/local-singleplayer-admission.md @@ -0,0 +1,28 @@ +# Ordinary offline single-player admission + +The ordinary native diagnostic `logs_2026-09-19_08-13-59/console.log:295–296` reports authority, RplMode.None, one local controller, and a 36-character all-zero UUID sentinel. The value is syntactically valid but null. Installed `SCR_PlayerIdentityUtils.GetPlayerIdentityId` tests raw `IsEmpty()`, so this initialized null string bypasses its PeerTool empty-string fallback and previously made successor roster binding fail. + +`ERR_LocalAdmission` supplies a successor-owned round key only inside a mode created as RplMode.None. It is selected from the existing real native `OnPlayerAuditSuccess_S` callback. The context must be authoritative, retain the current successor mode, have exactly one connected player, and match that player's positive ID and current manager controller to the actual local controller. If the native helper returns a non-null identity, that value is retained. Otherwise native `UUID.GenV4()` supplies one local-round key. This is life/result bookkeeping, not a Bohemia/platform identity or authentication assertion. No identifier/name bytes are logged. In the explicit ordinary diagnostic only (`-errOrdinaryScenario core` or `chat`), the first context refusal records boolean authority/controller checks, session mode and player count so native standalone API timing can be distinguished from an invalid context without relaxing admission. + +The helper pins mode, controller, connection and selected key. Repeated callbacks do not reset spawn attempts, replace the body or bind another life. A backend identity appearing later does not replace the pinned key. The existing roster's used-life and extraction result rules continue to operate on that same value. A disconnect, replaced controller, extra connection or changed session context latches failure. Pending assignment checks reject immediately; the existing mode tick also detects context changes after spawning. The mode reports an explicit preparation failure or normal defeat, rather than adopting another controller into that local identity. Returning the context to its previous values cannot reopen the old helper. A new mode owns a fresh helper/key; terminal cleanup clears the old key/controller while retaining its closed state. + +A helper constructed in Listen/Dedicated is inert: it always returns the native identity unchanged, including null, and its validation cannot block that mode. The existing native reconnect path is unchanged for those modes. A generated offline key skips native reconnect restoration; it is never written into the native reconnect map, global identity utility, backend, persistence IDs or role state. Controller replacement within the offline round requires a new scenario rather than claiming account continuity. Existing WORKBENCH-only fixture identity handling remains unchanged. + +No new audit callback, login request, permission grant, persistent setting, command or repeating timer is introduced. Admin authorization still uses the existing native player-role check. The native base spawn callback remains called unchanged, including its own persistence behavior. This change does not fix or suppress unrelated ordinary-game GUI errors. + +## Source/API evidence + +Read-only installed sources: + +- `scripts/Game/Utilities/SCR_PlayerIdentityUtils.c:20–45`: cached native identity read and empty-string-only PeerTool fallback. +- `scripts/Core/generated/Types/UUID.c:12–27,67,106–131`: null includes empty/all-zero/invalid strings; `IsNull()` is the prescribed check; `GenV4()` is the native random UUID API. +- `scripts/Game/generated/Network/PlayerManager.c`: connected count, current controller, connection state and player-role APIs are separate. +- `scripts/Game/Respawn/Logic/SCR_AutoSpawnLogic.c:15–18` and `SCR_SpawnLogic.c:294–300`: native audit callback starts load/spawn; unavailable persistence can proceed to ordinary spawning. + +The detailed design audit and inspected-source hashes were prepared under `/tmp/erri-offline-identity-design`; no original Escapists implementation or platform account data was used. + +## Validation and remaining limits + +`python3 tests/test_local_admission.py` executes the actual context/resolver/failure/cleanup method bodies with substituted opaque native handles and UUID generation. It covers strict None-only context, missing/mismatched/replaced controllers, counts/IDs, one-time generation, repeated callbacks, late backend values, sticky failure, fresh mode and unchanged network pass-through even after Stop. It does not prove native UUID entropy/format or network authentication. Existing admission rules still check phase, used life, reserved position, exact request/controller and owned preload cleanup; the new context check runs at request and finalization boundaries. + +Native compilation and the corrected ordinary player spawn are pending for this patch. Required next checks: actual generated non-null key and controlled prisoner in the ordinary header scenario, death without another local life, terminal result attribution, fresh-round reset, and unchanged Core/companion/lifecycle fixtures. Context-change and replacement-controller fault tests must use disposable local state without altering a real network session or fabricating backend/audit success. Manual input, clean ordinary runtime and real multi-client reconnect/permissions remain separate acceptance requirements. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/medical-kit-teardown-ownership.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/medical-kit-teardown-ownership.md new file mode 100644 index 0000000..6e38f1c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/medical-kit-teardown-ownership.md @@ -0,0 +1,36 @@ +# Medical-kit teardown ownership audit + +No production cleanup is proposed yet: the two identified medical-kit instances have not been established as successor-owned scene stock. Deleting tracked stock to remove these errors would therefore be an unproven change with a risk of removing carried inventory. + +## Established evidence + +- `docs/evidence/native-2026-09-19-050515/console.log.txt:620-621` identifies `{AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et` and `{21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et`. Both have unnamed owners, valid cached/global catalog references, and no current GameMode at that teardown point. This session did not reproduce a missing-manager error. +- Current `addons/core/Configs/ERR/EveronSites.conf` stocks field dressings, saline and morphine; neither diagnostic medical-kit resource appears in any successor addon source/resource. The prisoner loadout also does not explicitly add these kits. +- Both kit prefabs remain in the installed vanilla US/USSR inventory catalogs (`InventoryItems_EntityCatalog_US.conf:1290`, USSR `:1002`). Preserving complete medical/inventory support is intentional. Catalog membership is **not proof that the deleting entity is a world instance owned by the successor**. +- Installed `SCR_EntityCatalogEntry.ClassSpecificInit` and `SCR_EntityCatalogInventoryItem.ClassSpecificInit` call `Resource.Load` and inspect entity/component sources. These inspected methods do not call `SpawnEntityPrefab` or register entities with successor ownership. Resource/template cleanup or another native subsystem is a possibility, not a proven cause. +- Installed `SCR_BaseItemSupportStationComponent.DelayedInit` caches the global catalog manager and calls super. Its `InitValidSetup` prints the stale-named resupply error if that reference is absent. +- Installed `SCR_BaseSupportStationComponent.OnDelete` invokes virtual `InitValidSetup` before unsubscribing damage/support dependencies. Its `EOnInit` queues `DelayedInit` and `OnDelete` does not explicitly remove that callback. Both dependency teardown order and initialization/delete ordering remain relevant hypotheses. + +## Why blanket successor cleanup is unsafe + +`ERR_SiteService.m_Entities` contains sites, containers, stock, transport and extraction aircraft. Successful preparation also registers all those objects in GameMode ownership. The collection records creation ownership, not current inventory custody. A stock item remains listed after a player picks it up. `ERR_Actors.DeleteSpawned(item)` only refuses a directly controlled player entity; it does not protect an item merely because it is now in that player's inventory. `Rollback()` deletes this entire list in reverse order and would also remove the extraction aircraft. It must not be repurposed as normal endscreen cleanup. + +The current `Stop()` intentionally stops updates without removing those physical objects. Ordinary victory preserves passengers, aircraft and result while the native endscreen exists. This is appropriate and should remain unchanged. + +## Exact possible pre-restart boundary + +Installed `SCR_BaseGameMode` invokes `RestartSession` after `GetAutoReloadDelay` (lines 715-717), after its game-mode-end notification. `protected void RestartSession()` (line 781) checks authority, invokes `TryShutdownServer`, then calls `GameStateTransitions.RequestScenarioRestart()` (line 789). A successor-only override could perform bounded owned-item disposal immediately before calling unchanged super, while the old world's manager still exists. This would happen after the endscreen delay, not on victory. + +That hook is only justified as the error fix if the deleting station is proven to be one of the owned objects, and every relevant restart route uses this method. Direct scenario-restart requests or shutdown/Workbench play termination are separate lifecycle paths. A generic component destructor is already too late to guarantee catalog manager lifetime. + +If ownership is established, the narrow implementation should track spawned **stock items separately** from sites/vehicles, establish current custody before deletion, and remove only items still in their owned site storage or unclaimed world stock. Never traverse/delete a player body, reconnection-reserved body, aircraft/passenger hierarchy or other subsystem's catalog prototype. Only release bookkeeping for taken or already-deleted stock. Call item deletion while the required manager exists; retain vanilla OnDelete and its errors. Verify idempotence and delete ordering with actual named instances. Do not claim kit errors fixed until the exact observed owners are handled and raw two-round logs demonstrate it. + +## Isolated diagnostic extension + +The only code change in this handoff is `addons/core/Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c`, extending the existing WORKBENCH-only opt-in diagnostic. Use existing `--station-teardown-diagnostics` / `-errStationTeardownDiag 1` activation. It still invokes unchanged super in DelayedInit, OnDelete and InitValidSetup, and leaves all native errors visible. + +At native DelayedInit it captures scalar/string evidence: whether initialization was observed, successor mode present, owner world equals the current game world, whether the site service knows that exact owner, inventory-slot presence, and parent prefab. It prints at most 64 initialization records. Teardown's existing maximum 64 records gain those initial facts plus current world/site/inventory/parent observations. It stores no new entity/manager references and schedules no work. `initSiteOwned=false` alone does not prove permanent nonownership; an item could be adopted later. Likewise absence of GameMode at delete makes current ownership unavailable, so the initialization and world evidence must be interpreted together. + +Suggested run: ordinary two-round Core scenario with retained vanilla inventory catalogs and the existing diagnostic flag. Correlate kit resource names and init/delete records, then repeat with physical medical treatment and representative looting. Determine whether the kit owner is in the main world and ever successor-owned before proposing its removal. Also retain the raw catalog-manager error count. No completed-smoke marker is added and no runner qualification is changed. + +No engine run, original workspace edit, installed resource change or production deletion was performed for this audit. The diagnostic extension is source-reviewed and awaiting native compilation. Existing source-hash evidence for the base lifecycle remains in `docs/evidence/native-error-audit-2026-09-19/source-hashes.json`. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/migration-provenance.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/migration-provenance.json new file mode 100644 index 0000000..c58388b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/migration-provenance.json @@ -0,0 +1,104 @@ +[ + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQNetwork.c", + "sha256": "1a7e279b050514bad86f18fdd233b7eb5728e99bab3daae3aedb31ceb571c271", + "destination": "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c", + "changes": "New namespace; HQ network uses successor actor/faction interfaces; separate log file." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQJournal.c", + "sha256": "0d714bc60940898dac560ee0902997ca82e324395dc2696c6424909a0a587c81", + "destination": "addons/ai/Scripts/Game/ERR/ERR_HQJournal.c", + "changes": "New namespace; HQ network uses successor actor/faction interfaces; separate log file." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_HelicopterAvailability.c", + "sha256": "bb565c5c5f7d4e671a295ae7e951f9ebdde626ffdecc4ae7d92e0e776e1730e0", + "destination": "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c", + "changes": "New namespace; HQ network uses successor actor/faction interfaces; separate log file." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_MortarPrediction.c", + "sha256": "b58d9ea6e211fc479a1674c380be4979ebacf46d14facae74257aa0937b6cd49", + "destination": "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c", + "changes": "New namespace; HQ network uses successor actor/faction interfaces; separate log file." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_MortarSalvo.c", + "sha256": "f0235c4516eebd03e5721d259dabcb516a4e457e9909a1b8bb08553a0f7bc652", + "destination": "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c", + "changes": "New namespace; HQ network uses successor actor/faction interfaces; separate log file." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQObservation.c", + "sha256": "735611603dbfa80218a42c6722dda09a3de8c7369aa5689cb8cb711851ede6dd", + "destination": "addons/ai/Scripts/Game/ERR/ERR_HQObservation.c", + "changes": "New namespace; HQ network uses successor actor/faction interfaces; separate log file." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_HQ.c", + "sha256": "4898ac471fb16433fc5d98244a8cec89c5e8e006af2c94bbcd89113a2b7107c8", + "destination": "addons/ai/Scripts/Game/ERR/ERR_HQReport.c", + "changes": "Only radio inventory capability and report snapshot classes migrated." + }, + { + "source": "escapists-map/Scripts/Game/EscapistsMap/ESM_SharedMapComponent.c", + "sha256": "26201b9d2b04986b9684be81dff47200a631d8cd01b57e96788a153fb56e6b4d", + "destination": "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-map/Materials/ESM_MapRenderTarget.emat", + "sha256": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc", + "destination": "addons/map/Materials/ERRM_MapRenderTarget.emat", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-map/Materials/ESM_MapRenderTarget.emat.meta", + "sha256": "f46a7255d51af1b43d9f9fd8e884640fed9e87a610a8eac1778e27cc2c262e5a", + "destination": "addons/map/Materials/ERRM_MapRenderTarget.emat.meta", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-map/UI/layouts/EscapistsMap/SharedMapRenderTarget.layout", + "sha256": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "destination": "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-map/UI/layouts/EscapistsMap/SharedMapRenderTarget.layout.meta", + "sha256": "3311c3d2163fa0a59eb98ca07cdf79814f1d5131e95231a0a49783e8dc455cf7", + "destination": "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-map/Prefabs/Items/Equipment/ESM_SharedFieldMap.et", + "sha256": "8c0cdcf3e3af96eac710c75ccc54a7bbcb6713caf76a63a58f5519c009e747f7", + "destination": "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-map/Prefabs/Items/Equipment/ESM_SharedFieldMap.et.meta", + "sha256": "33457ec2ead243640e57dc12c969be0d59923455f89669024e50998f63cca690", + "destination": "addons/map/Prefabs/Items/Equipment/ERRM_SharedFieldMap.et.meta", + "changes": "Namespaced types, paths and resource identities; explicit shared map item only." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_MortarSystem.c", + "sha256": "b355227b2b221147d35e1dacbc07cf650838229b9a6d22cd30cc1e304112b33f", + "destination": "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c", + "changes": "Only physical battery lifecycle, finite inventory, native activity and projectile accounting; successor creates authored group and gun. Original deployment and scheduler replaced." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_MortarFiring.c", + "sha256": "aadd057a1f3f4326bd41500be7a12051a16de9d5925fca2452a46cdfbf0d6d12", + "destination": "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c", + "changes": "Native ballistic and final loading hooks migrated; successor HQ-delivered snapshots gate firing." + }, + { + "source": "escapists-ai/Scripts/Game/EscapistsAI/EAI_SettlementSafety.c", + "sha256": "6961ad593d20f86c30b557542b4f67fd44d9579037776b07cd95616927eda83d", + "destination": "addons/ai/Scripts/Game/ERR/ERR_SettlementSafety.c", + "changes": "Use vanilla named settlements; original mission location dependency removed." + } +] diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/migration.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/migration.md new file mode 100644 index 0000000..13a7a03 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/migration.md @@ -0,0 +1,33 @@ +# Migration status + +The old workspace is a read-only migration reference. `dependency-audit.json` records legacy symbol references discovered during the audit. `migration-provenance.json` records the selected independently authored helper sources and their original hashes. `vanilla-resources.json` records exact GUID/path pairs resolved against the installed vanilla resource database. None of these records proves complete behavioural parity. + +The base replacement has priority over extension feature migration. [Base responsibilities and implementation order](base-replacement.md) distinguish prototype coverage from remaining gameplay work. + +## Implemented foundation + +- Five projects, dependency isolation, new source resource identities and a new scenario identity. +- New mission state rules, scenario assembly, location/discovery state, vanilla faction catalog, native spawning, settings owner and once-per-round world-clock configuration. +- Independent extraction ownership, physical capacity checks, partial identity results, controller-based result presentation, early vehicle-loss handling and preparation rollback. +- Physical radio network, visual observation intake, report snapshots, bounded HQ journal and an initial infantry response coordinator. +- Core-owned document recovery and objective map markers, optional enemy-carried intel and shared field map, replicated discovery markers and a limited administration command surface. +- New Everon child world, definition-driven prison, two independent clue caches, medical stash, guarded outpost, radio and extraction sites using referenced vanilla resources. + +## Incomplete milestones + +| Milestone | Current evidence | Remaining work | +| --- | --- | --- | +| Dependency audit/setup/interfaces | Projects and automated isolation checks exist | Complete provenance review; mature player/objective service interfaces | +| Playable Everon loop | Core-only escape/restart and native objective state checks pass; full companion regression also passes | Manual route/stock balance, gameplay presentation, multiplayer lifecycle and clean runtime | +| HQ/support/companion integration | Physical infantry coordination and selected helpers ported | Migrate full HQ scheduling, aircraft, mortars, ammunition, convoy/depot logistics, existing applicable commands and settings | +| Multiplayer/performance/release | Test ledger and regression tooling exist | Dedicated server and 12-player sessions, failures/restarts/cleanup, equivalent-workload FPS evidence, native builds, packaging and publication | + +The prison/site layout is a prototype. Terrain heights were checked, but collision, slope, navmesh accessibility, vehicle seating and extraction takeoff have not passed gameplay acceptance. Two separate marked supply caches each hold two guaranteed radio documents. The western cache provides another route if the southern cache is lost; optional medical and guarded outpost stock add detours. Progression does not require random enemy intel. Geometry diagnostics replaced the sloping footprint with an open surveyed site and resized the gate to its opening. Native gate passage and two scripted victory rounds pass; manual gameplay acceptance remains outstanding. + +## Commands presently implemented + +Core alone provides `/esc status`, `/esc settings`, `/esc mission radio show` and `/esc mission radio set N` for administrators, plus `/esc spectate next|previous` for spectators. With companions loaded, administrators also retain `/esc hq show`, `/esc hq log`, `/esc hq interval|squads|radius show`, `/esc hq interval|squads|radius set N`, `/esc intel carrying|reveal show` and `/esc intel carrying|reveal set N`. + +Settings live in `$profile:rereintroduced.json`, with checked temporary writes and a backup. Names and defaults are explicit in `ERR_Settings.c`. `tools/import_settings.py` previews conversion of supported legacy AI/intel settings and explicitly reports deferred fields. Writing requires `--out` and refuses to overwrite an existing file. Old settings files are not silently imported. Existing tools, admin menus and other commands are not yet fully migrated; this subset is not a claim of preserved compatibility. + +RHS, additional terrains, complete feature parity and virtual distant units remain deferred as agreed. The project's initial estimate of 160–280 hours described the entire successor; this foundation does not constitute all of that work. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-faction-catalogs.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-faction-catalogs.md new file mode 100644 index 0000000..797a10b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-faction-catalogs.md @@ -0,0 +1,23 @@ +# Mission-scoped faction catalogs + +The successor's initial Everon vehicle scope is the finite depot UAZ469 (`{259EE7B78C51B624}`) and the extraction Mi8MT unarmed transport (`{DF5CCB7C0FF049F4}`). These are the only two vehicle prefabs authored in the current scene definitions. Both US and USSR receive the same two-entry vehicle catalog so a captured mission vehicle can still be looked up through either faction. This does not change the default affiliation, physical prefab, seats, damage, fuel, weapons or handling of either asset. It does not add vehicles or spawning orders. + +The manager is the successor resource `Prefabs/ERR/FactionManager.et` (`5414041A15DC4B54`), inheriting only vanilla `FactionManager_Base.et`. It uses successor US (`5C67A1DDE0044806`) and USSR (`D7A5CFA62A36480D`) profiles and the successor `MissionVehicles.conf` (`E4785D3AF1D043C2`). No resource inherits vanilla `US.conf`, `USSR.conf`, `FactionManager_USxUSSR.et` or their full vehicle catalogs. This avoids initializing unneeded M151A2, BRDM2 and BTR70 catalog entries. It does not fix those installed vehicle schemas or establish those vehicles as compatible. + +The faction profiles preserve all properties of installed vanilla US/USSR profiles except the vehicle-catalog reference. They derive directly from vanilla BLUFOR/OPFOR as the installed originals do. This preserves faction keys, enmity rules, soldier identities, voice settings, flags, ranks, callsigns, encryption keys, frequencies and home territories. The full CHARACTER, GROUP, WEAPONS_TRIPOD, ITEM and SUPPLY_CONTAINER_ITEM catalogs retain their original references. In particular no medical consumable, radio, weapon, ammunition, uniform, group or medical support item is removed by this change. Installed US/USSR supply-container catalogs are empty; their type remains available with that same empty content. + +These are new successor resource identities authored using vanilla profiles and documented native catalog containers. No original Escapists code or resources are reused. Source extraction SHA-256 values are recorded in [faction-catalog-source-hashes.json](faction-catalog-source-hashes.json); extraction came from the locally installed stable Reforger PAKs. Tests also pin normalized profile contents to catch unintended changes outside the deliberate vehicle reference. + +## Validation and limitations + +The candidate passed the full existing offline checker in `/tmp/erri-faction-check`, including three new catalog-scope tests. It has 27 unique addon resources and valid declared vanilla references. This does not compile Enforce, load configs natively, exercise vehicle physics or prove improved FPS. No engine was launched by the author of this candidate. + +`ERR_NativeFactionCatalogProbe.Run(mode)` is a WORKBENCH-only, read-only assertion entry point. Invoke once after faction initialization and successful scene preparation, before the transport or extraction destructive tests. It verifies both factions' exact two-vehicle catalog contents and prefab lookups, all six catalog types, nonempty native content where appropriate, dressing/saline/backpack radio entries, global catalog-manager access, US/USSR identities and mutual enmity, radio encryption/frequencies, callsign data, physical UAZ/Mi8 and the helicopter's required seat capacity. It does not load old full faction resources as a comparison, because that would reintroduce their unwanted catalogs. + +Parent integration should compile and run the complete Core/companion scenario for two rounds, with this probe before destructive tests and the unchanged raw-log parser afterward. The expected seven schema messages must actually disappear from raw startup logs for this scope change to help the clean-runtime gate. Any remaining errors, including intermittent support-station/catalog-manager teardown errors, continue to fail that gate. No log message or validation rule is suppressed or reclassified here. + +Future vehicle support must add an intentional catalog entry and validate that asset's own native schema/handling, inventories and support behavior. Retaining complete inventory and group catalogs does not justify a claim that every original gameplay feature or remote multiplayer path is covered. + +## Native evidence + +[063559](evidence/native-2026-09-19-063559/report.json) completed 67 combined environment/catalog assertions with no script/VM failures and no engine errors. Exact native catalogs retained medical and radio entries; all three weather families and a leap date applied without resetting the clock. Defaults and next-round settings behavior were exercised. This one-round development result does not establish multiplayer replication or repeated-restart reliability. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-time.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-time.md new file mode 100644 index 0000000..58d7f97 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/mission-time.md @@ -0,0 +1,31 @@ +# Mission clock + +Core owns the mission clock through `ERR_TimeService`; no companion addon is required. At successful scenario preparation, the server applies the saved start time once, enables automatic advancement, and sets the engine day duration to `86400 / timeMultiplier` seconds. The native time-and-weather manager advances and replicates the clock. The service does not set time on ticks or change the date, weather, wind or visibility. + +The defaults are **14:00 and 1×** progression. An integer multiplier from **1 to 24** means one real second advances the game clock by that many seconds. Pausing the clock and separate day/night speeds are outside this implementation. + +Administrators use the existing authenticated Core `/esc` command transport: + +| Command | Result | +| --- | --- | +| `/esc mission time show` | Current round clock and speed, followed by the saved next-round configuration. | +| `/esc mission time set 06:15` | Save a start time for the next round. Requires exactly `HH:MM`, from `00:00` to `23:59`. | +| `/esc mission speed show` | The same current/saved clock information. | +| `/esc mission speed set 4` | Save 4× progression for the next round. Accepts integers 1–24. | +| `/esc settings` | Includes `startTimeMinutes` (0–1439) and `timeMultiplier` (1–24), along with existing settings. | + +Changing either setting leaves the running round's clock and speed intact. A new mission instance uses the new values. Repeated startup calls on the same time service cannot reset the clock. A missing native manager or failed native clock configuration prevents the mission from entering the prison phase, with a preparation error; the service attempts to restore native duration/advancement if initialization fails midway. + +Existing valid six-key `rereintroduced.json` files remain valid. Loading supplies 14:00/1× in memory when either newly introduced key is absent and does not rewrite the file. The next explicit successful setting save includes both new keys and preserves all six supported existing values, using the existing verified temporary-file/backup path. Present invalid new values (including fractions and out-of-range numbers) cannot silently default. Missing old required keys still invalidate the file; a valid backup is tried before preserving invalid files and using read-only defaults. Unknown JSON members continue to follow the previous loader behavior and are not retained on save. + +`tools/import_settings.py` supplies clock defaults when importing the supported legacy AI/Intel settings. It does not interpret unrelated original clock settings or modify the source files. + +## Validation + +`python3 tests/test_time_policy.py` runs the actual Enforce parsing/formatting and duration policy bodies through the existing C++ policy harness: every minute round-trips, malformed times are rejected, clock defaults are limited to the two new keys, and multiplier boundaries produce the correct day duration. `python3 tools/check.py` covers existing policies and the expanded runtime/importer schema bounds. These policy checks do not themselves compile Enforce or validate engine behavior. The integrated native run in [040928](evidence/native-2026-09-19-040928/report.json) also passes migration, administration, no-mid-round-change and actual clock progression checks. + +`ERR_NativeTimeProbe` is an authored WORKBENCH-only fixture for centralized native testing. `Run` checks isolated legacy JSON loading without a rewrite, explicit upgrade/reload, invalid or missing values, backup fallback, clock parsing, admin authorization, persistence and restoration of the test settings, native manager configuration, and unchanged current clock/speed after saved changes or repeated startup. `VerifyProgression`, called at least ten engine seconds later, compares elapsed native engine time with actual clock advancement. Neither probe opens a window. Native compilation and these scoped local checks pass in the linked run. Remote replication, multiplayer clock agreement and long-running day/night transitions remain unverified. Seven inherited vehicle resource errors still fail the overall native report. + +Native API references: `ChimeraWorld.GetTimeAndWeatherManager`, and `BaseWeatherManagerEntity.SetTimeOfTheDay`, `SetDayDuration`, `SetIsDayAutoAdvanced`, their getters, and `GetEngineTime`. Signatures were checked through the read-only Enfusion API index and the installed vanilla time-and-weather handler. No original Escapists time implementation was reused. + +The subsequent [041445 Core run](evidence/native-2026-09-19-041445/report.json) completes two escape/restart rounds with the archived 06:15 / 4x input and verifies native advancement in both rounds. The private profile's original primary, backup and temporary settings files were restored exactly afterward. This proves the tested nondefault round initialization, not long-running or network agreement. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/mortar-transactions-source-sha256.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/mortar-transactions-source-sha256.json new file mode 100644 index 0000000..e0840a7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/mortar-transactions-source-sha256.json @@ -0,0 +1,7 @@ +{ + "scripts/Game/generated/InventorySystem/InventoryStorageManagerComponent.c": "7cc07d44ee75e10434e844f5c81044042255f2188963991b134a12a772feabbc", + "scripts/Game/generated/InventorySystem/InventoryTask/ScriptedInventoryOperationCallback.c": "d5de8fba8a6a3a3a3d3eb55b7b69f3835e845763b45f6131b248b6895454a9c1", + "scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c": "ce0875438ac419f352e28e8c9ae6d1f0eed6a124d93ca98bd5a8d5be18409866", + "scripts/Game/AI/Group/SCR_AIGroupVehicleManager.c": "f12f465fa5445aac737f1597b514fe0440bc36e6617eb948d4cff717a702506f", + "scripts/Game/Entities/SCR_AIGroup.c": "afb923ea5c78a56d4111d7261fa16fa6da5323ce43d865f7bf5534304e9ff54f" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-casualty-remove.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-casualty-remove.md new file mode 100644 index 0000000..637b588 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-casualty-remove.md @@ -0,0 +1,28 @@ +# Native casualty removal fixture + +`--project core --smoke casualty-remove` is an opt-in WORKBENCH completion-boundary experiment using the helicopter's existing stock `SCR_RemoveCasualtyUserAction`. It adds no production unload action or resource and makes no manual held-input, remote ownership, multiplayer, or casualty recovery claim. + +The fixture shares the existing test-owned wounded actor, actual five-second unconscious settling interval, real child Mi8 cargo bench entry, physical occupancy and isolated extraction-boundary groundwork. It additionally requires the production mission helicopter to be physically supported and stable before it starts. Only the test-owned casualty is protected against nearby guard gunfire; the original native health-driven unconscious transition remains. The real caller's existing fixture invulnerability is configured by the Core smoke runner, and the fixture restores only the same caller's position. + +After actual boarding it finds the stock remove action whose native compartment equals the occupied bench and whose exterior context is `door_l01_door`. It verifies the one-second duration, nonlocal effect and actual context membership. It selects the door using the same native `PickDoorIndexForPoint(context.GetOrigin())` mechanism as the stock action wrapper. The action's cached door index is set explicitly because this fixture does not select an interaction UI context; its old value is restored on success, failure or cleanup. + +The expected exit is read from that door's native `GetExitTeleportPointInfo()` world transform. The fixture first uses the bench manager's resolved door info. If it exposes a reference instead, the diagnostic records the referenced manager and animation door index before attempting its door info. Missing or unresolved native points fail; no hardcoded door zero or arbitrary exit position is substituted. Native run 080058 verifies this selected door and point on the installed version; other doors and reference-resolution paths remain separate cases. + +The real caller is placed just outside the actual exterior context and allowed one second to settle. Native `CanBeShown` and `CanBePerformed` must accept the actual caller and still-occupied bench before the fixture invokes the real stock `PerformAction` exactly once. That implementation uses native `KickFromVehicle(relevantDoorIndex)`, whose installed API describes use of the teleport exit point. Calling action completion does not exercise holding or canceling user input, network action dispatch, or UI selection. + +An eight-second observation window requires actual vehicle/seat vacancy, an accessible bench, a living still-incapacitated body, no ongoing get-out transition/falling, root horizontal error at most 1.25 metres from the authored exit, and root clearance from terrain between -0.25 and 1.5 metres. Diagnostics include root and aiming positions, pre-exit seated position, authored exit, terrain clearance, ragdoll/link/falling state and native compartment events. These are explicit bounded acceptance measurements, not a full collision-shape safety or clearance survey. No target transform, health recovery, wake or retry is applied after boarding. The entire fixture is bounded to 45 seconds and success uses the existing explicit Core test reset at step 802. + +The previous `casualty-bench` experiment retains its original arbitrary-ground `GetOutVehicle_NoDoor` target and original distance assertion unchanged, now behind default fixture hooks. Its historical failed target-position evidence remains failed and distinct from this stock door-action experiment. + +Local verification: `python3 tests/test_casualty_remove_probe.py` passes extracted production fixture boundary policy and focused action/cleanup/old-mechanism/runner contracts. [080058](evidence/native-2026-09-19-080058/report.json) now passes 66 native assertions with zero engine or script/VM errors. The inherited removal action resolves the occupied bench's `door_l01_door` context and native authored exit. The real conscious caller passes visibility/permission checks; one direct action-completion invocation produces an actual native exit event and clears vehicle/seat occupancy. The test-owned casualty remains living and incapacitated, with no getting-out/falling state and an accessible empty bench. It first exceeds the terrain-clearance bound, then settles within the original eight-second observation window: horizontal exit error is 0.710329m and root terrain clearance is 0.862961m. No post-boarding target teleport, recovery or retry is used. + +The pre-removal isolated extraction check counts the seated casualty. Post-removal checks establish physical helicopter/bench vacancy; they do not recalculate the already-frozen extraction snapshot. This is local stock-action completion evidence, not held input, interaction-context selection, remote action delivery, all-door clearance or multiplayer acceptance. The fixture requests its own reset; no acceptance ledger is changed. + +Merge: + +- New `addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c`. +- New `tests/test_casualty_remove_probe.py`. +- Core smoke and the hidden runner expose `casualty-remove`; base-probe exit hooks preserve the earlier independent `casualty-bench` mechanism case. +- This note may become `docs/native-casualty-remove.md`. + +Installed primary source hashes are recorded in `vanilla-reference-sha256.json`. Source inspection was read-only and no original Escapists content was reused. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-errors.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-errors.md new file mode 100644 index 0000000..cc6cb02 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-errors.md @@ -0,0 +1,45 @@ +# Native error investigation, 2026-09-19 + +Read-only investigation of installed vanilla assets, their actual script implementations, and successor archived runtime logs. No engine launched, installed resource altered, existing mission edited, or logs suppressed. + +## Seven vehicle schema errors: actual source identified + +The 04:12:33 two-round early-helicopter-loss archive traces all seven errors to faction resource initialization, before GameMode initialization. See `docs/evidence/native-2026-09-19-041233/console.log.txt` lines 265–290 in the successor repository. + +| Count | Source asset, extracted line | Invalid property | Logged offset | +| --- | --- | --- | --- | +| 1 | `Prefabs/Vehicles/Wheeled/M151A2/M151A2.et:548` | `SCR_VehicleDustPerWheel.SlidingTrackMaterial` | 19441 | +| 2 | `Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et:1044,1068` | `Wheel.Parent` | 35955, 36915 | +| 4 | `Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et:1273,1307,1340,1373` | `Wheel.Parent` | 42646, 43645, 44617, 45590 | + +**Correct previous attribution: the SlidingTrackMaterial error is M151A2, not Mi8.** The load chain is FactionManager_USxUSSR → M151A2_M2HB_MERDC → M151A2_M2HB → M151A2. The six wheel errors load through BRDM2_Conflict and BTR70_Conflict variants. Actual extracted property byte positions match the logged parser offsets (the error points just after the keyword). + +Installed `scripts/Game/Vehicle/SCR_VehicleDustPerWheelComponent.c` declares no SlidingTrackMaterial attribute in either its class-data or component class. This is an actual mismatch between installed vanilla resource data and script schema. M151's field concerns wheel dust/track appearance; it is not an extraction seat or flight setting. The BRDM/BTR fields concern wheel differential parent references; do not call them harmless without vehicle-driving validation. Engine internals for the Wheel type are not script source, so the exact replacement field is not established here. + +There is no justified successor code change that repairs these installed base-prefab fields. Adding dummy script attributes, overriding a global vehicle base asset, or excluding errors from the parser would hide the failure rather than validate compatibility. An independently authored narrower faction catalog may eventually avoid loading unneeded vehicles; that would need intentional catalog scope, inherited reference removal, and a real native test. It would not establish those vanilla vehicles as compatible. Keep clean-runtime acceptance failed in the meantime. + +## Intermittent resupply error: teardown validation path exists + +The same archive emits exactly two `SCR_BaseResupplySupportStationComponent needs a entity catalog manager!` errors at 04:13:53.548/.553, immediately before `Starting new playthrough` at .653 and before the new world's entity load. They do not occur during that round's startup/play assertions. + +Actual class name is `SCR_BaseItemSupportStationComponent`; the printed class name is stale in vanilla source. Its `InitValidSetup` at line 30 reads cached `m_EntityCatalogManager` and prints this error if absent. `DelayedInit` at line 17 obtains the manager using `SCR_EntityCatalogManagerComponent.GetInstance()`. + +Crucially, `SCR_BaseSupportStationComponent.OnDelete` at line 1187 also calls virtual `InitValidSetup()` before unsubscribing damage/support events. Thus teardown after the catalog manager has been destroyed can produce the same error as bad initialization. The successor already inherits `SCR_EntityCatalogManagerComponent` through `GameMode_Base.et:58`; adding a second manager is incorrect. + +**Inference requiring a diagnostic runtime test:** dependent support-station deletion occurs after the old round's catalog manager is gone, invalidating the cached reference. The archive timing plus actual OnDelete implementation supports this explanation, but the logs do not name the station owner or call site, so they cannot yet prove it. A delayed-init callback crossing teardown is another possibility: vanilla EOnInit queues DelayedInit, while OnDelete does not explicitly cancel it. + +The opt-in WORKBENCH diagnostic is `ERR_NativeStationTeardownDiagnostic`, enabled by `--station-teardown-diagnostics`. It logs station owner/prefab, `OnDelete` entry and manager availability before calling super unchanged, capped at 64 lines. A two-round restart is required to observe this teardown path. Do not guard-return the error away. If the deletion ordering is confirmed for successor-owned site assets, arrange their disposal in an explicit pre-restart lifecycle step while the game mode manager still exists, and verify site cleanup, extraction result retention, startup rollback, and two restarts. Do not delete extraction occupants or their helicopter on ordinary victory merely to silence teardown. + +Only if source-level teardown correction is necessary should an addon-scoped class fix be considered: initialization must still reject a missing manager during play; OnDelete should cancel its pending DelayedInit and release subscriptions based on what was actually initialized, instead of revalidating destroyed dependencies. This is larger and needs full native lifecycle checks, so no untested override is supplied as a fix. + +## Installed runtime / dedicated server inventory + +The inspected log reports Workbench engine 192142 and game version 1.8.0.13, built 2026-08-21 14:30:18 UTC. Steam manifests currently report game build 24903726 and Tools build 24870687. Those are separate app build IDs and by themselves do not prove a version mismatch. + +The single configured Steam library is `/home/jakub/.local/share/Steam`. Read-only filename inventory of its installed common directory, `/home/jakub/devel`, `/opt`, and `/usr/local/bin` found no ArmaReforgerServer/ReforgerServer/server executable. The installed Reforger runtimes are Windows client and client diagnostic executables, plus Workbench. There are Arma 3 server executables, which are unrelated. Experimental game/tools are installed but were neither opened nor changed. There is no local dedicated-server executable established for the successor's required dedicated/network test. + +Source extraction hashes are in [the audit manifest](evidence/native-error-audit-2026-09-19/source-hashes.json). Extractions in `/tmp/erri-vanilla` came directly from the installed Arma Reforger data PAKs through the existing read-only extractor. + +## Observed diagnostic restart + +[050515](evidence/native-2026-09-19-050515/report.json) completes two Core rounds. At05:08:52 the opt-in diagnostic identifies the US and USSR medical-kit prefabs in the `OnDelete/InitValidSetup` path. Both cached and global catalog references are still valid, while the current game mode is absent. No catalog error occurs. This confirms the relevant teardown call path but does not reproduce the missing-manager condition; the intermittent issue remains open. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-followup-snapshot.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-followup-snapshot.json new file mode 100644 index 0000000..689dac7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-followup-snapshot.json @@ -0,0 +1,59 @@ +{ + "session": "logs_2026-09-18_23-50-58", + "game_script_compile": "passed", + "prison_phase_start": "passed", + "initial_player_spawn": "passed", + "full_escape": "not tested", + "source_sha256": { + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "953d1a083c2828b11f927e29b6d3c482aaceca228126bc87e4322caa09a28285", + "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": "5371fd6a4d9b0270420c9ad2d56d4623cc5dae834cc1fa9214ceba7fb1ae7129", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "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": "618f17cbe62d5d68a310876e64920903d5d1a93814c81f7666f3a99fdefae38a", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "1471d018ddc6202175fee1d7fcf6087d9eb605dd9303c94b4cb55a4eff38125b", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Prefabs/ERR/Extraction.et": "d95d311de0231cf669440a10ef3d68014b70067e50b8bdfb05db637cfc7ed628", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/GameMode.et": "99c23968bca58f38821bd7a686c4cb13cf565a79dc84e7d93c7ee27cdf7a2604", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/Prison.et": "b13200bc4b5179c597e475e542aea9124d410cff2c8942c95fdb0a9a1f20999f", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "22d16eaee7fcdf7f54d143bf237484f39b403f2634aa849d0ad8e4ca574475ac", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/Radio.et": "5dd128f2bb0161830b201a415a160714871cc80d16029b84df5cecae2d361929", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "17ec4e87858ba87175d890b2a6150f655378afe90e1d7cc3605bb16b5fc3b477", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "1989948bf7658011e716820da80fbdd53880817a020a3055f4059fb5b233d62f", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "6f2983cf2c5c411999a61e87be720b43658e79dee59cd1bc165be29dc9374f25", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "7e6fa49a458643998ea26b0a9fa499670bbe998fc660301a6186f7dd2977c14a", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "7d4395aed4ef3b565435984d28db62771c0567cb913c13f2e5ec27d07735f008", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "349d0d9c5c13bd4dd528681180c78fa612418de2351030a002bab195ce981b7e", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "6c3588569c7207930642a69ffc48c5fd0c18236afe0bd3575ffd55627c2d243c", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "f39e7f534e6f306b3d8991187800f3a9a74b5771c505c05144439ef6f331eefb", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "f1a058bd315c7d01d464715ac9f4e18ae3d2432551d094a9afbd4c9c5a2a9416", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "ff8d49d9d662834125f51a55f375918d8c3212e0a1a660234e454bdf7213b7b5", + "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_DiscoveryMap.c": "ee9be2d313488224b3d52853e3fbe36bb225611d6a69c628b2a6a8efca8fc104", + "addons/map/Scripts/Game/ERR/ERR_ScenarioMap.c": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "ac7c2b72596bd655a389d4b9fdf7448e94cca137c009388eab0db1a9365ded02", + "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-083213/source/docs/native-guard-cancellation.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-guard-cancellation.md new file mode 100644 index 0000000..309c9eb --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-guard-cancellation.md @@ -0,0 +1,15 @@ +# Native initial guard cancellation fixture + +`--project core --smoke guard-cancel` runs a bounded WORKBENCH-only test in a disposable world. It does not recreate any mission site, refill stock, register groups with HQ, assign a player, or change normal guard population behavior. Three separate instances of a test subclass of `ERR_SiteService` own one six-slot successor guard group each. The subclass only supplies the owned-group portion of a PENDING preparation; it calls the unchanged production `Stop` and `Rollback` methods. + +The first group is stopped twice in the same script call as creation, after verifying that native `EOnInit` has initialized its cached group utility, its all-members initialization has not completed, and no initial member or native dispatch has occurred. This rejects the native ignore-spawning shortcut and a cancellation made before initialization. It stays alive to expose a late request instead of hiding cancellation behind deletion. The second group is allowed to receive actual native dispatch until it has between one and five physical members. The following fixture tick stops it twice, outside the native dispatch stack, after that dispatch can finish re-enqueuing the partial request. It also remains alive. The third group is an uncancelled control and must finish its six-member native population while both cancelled groups remain unchanged for at least fifteen seconds. + +Installed `SCR_AIGroup.GetSpawnQueueSize()` always returns zero for compatibility, and the generated `ChimeraAIWorld` interface exposes enqueue/purge but no raw queue query. Therefore this test does not claim to measure pending queue length. A WORKBENCH-only `ExpandOneMember` override counts calls only on explicitly tagged fixture groups and always calls unchanged `super.ExpandOneMember()`. Zero new dispatches plus stable physical member identities, observed alongside a successfully populated control, is the evidence for effective cancellation. Normal groups are not tagged. + +After observation, each fixture owner rolls back once. The test retains weak references to every physical partial/control member and verifies that the three groups and all their characters are actually deleted. It then waits six seconds for late dispatches and verifies that the original mission site groups and READY service remain intact. Native errors remain visible to the ordinary raw-log checker. The fixture fails rather than claiming coverage if a partial squad cannot be observed before it fills, if the control cannot complete, or if the overall ninety-second deadline expires. + +This fixture has not yet been run natively. Its evidence will cover the installed engine, tested timing and one disposable server world, not arbitrary multiplayer timing or performance acceptance. + +Primary installed sources: `scripts/Game/Entities/SCR_AIGroup.c` (`EOnInit`, `RequestSpawn`, `ExpandOneMember`, `GetSpawnQueueSize`, `DespawnMembers`) and `scripts/Game/generated/AI/ChimeraAIWorld.c` (`PurgeSpawnRequestsForGroup`). No original Escapists code or assets are reused. + +Native cancellation now passes in [073601](evidence/native-2026-09-19-073601/report.json): 68 assertions, no engine/script errors. Empty and partial groups remain stable through a fifteen-second observation while the uncancelled control fills. Owned rollback deletes all captured actors/groups, and the original mission groups remain unchanged. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-initial-snapshot.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-initial-snapshot.json new file mode 100644 index 0000000..4b4af7e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-initial-snapshot.json @@ -0,0 +1,57 @@ +{ + "session": "logs_2026-09-18_23-35-08", + "game_script_compile": "passed", + "prison_phase_start": "passed", + "full_escape": "not tested", + "source_sha256": { + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "953d1a083c2828b11f927e29b6d3c482aaceca228126bc87e4322caa09a28285", + "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": "5371fd6a4d9b0270420c9ad2d56d4623cc5dae834cc1fa9214ceba7fb1ae7129", + "addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "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": "618f17cbe62d5d68a310876e64920903d5d1a93814c81f7666f3a99fdefae38a", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "1471d018ddc6202175fee1d7fcf6087d9eb605dd9303c94b4cb55a4eff38125b", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/core/Prefabs/ERR/Extraction.et": "d95d311de0231cf669440a10ef3d68014b70067e50b8bdfb05db637cfc7ed628", + "addons/core/Prefabs/ERR/Extraction.et.meta": "c2a838633001e2e3a202d39cb33aa744ebcd996017ad032359069641b5d13853", + "addons/core/Prefabs/ERR/GameMode.et": "99c23968bca58f38821bd7a686c4cb13cf565a79dc84e7d93c7ee27cdf7a2604", + "addons/core/Prefabs/ERR/GameMode.et.meta": "106769cd34525c9d440057072836cb7401a6752148c40edd7fe61c03bd58328c", + "addons/core/Prefabs/ERR/Prison.et": "b13200bc4b5179c597e475e542aea9124d410cff2c8942c95fdb0a9a1f20999f", + "addons/core/Prefabs/ERR/Prison.et.meta": "2e426ef3de68f4107907854b51e818bc11d84649a01c538e3f18dd9ebec766bb", + "addons/core/Prefabs/ERR/PrisonDoor.et": "22d16eaee7fcdf7f54d143bf237484f39b403f2634aa849d0ad8e4ca574475ac", + "addons/core/Prefabs/ERR/PrisonDoor.et.meta": "b8f3db52bf186426026668fbb9d633c3cbd4d438ab301fba880398f6a0e781c2", + "addons/core/Prefabs/ERR/Radio.et": "c10a112b7434e8c3e489d9a894460ee915b6b57bec90982e5572b2667c3c890d", + "addons/core/Prefabs/ERR/Radio.et.meta": "bc91137b68ba550217914fb8892bb44d7e1920e4a1086f3e506623832a44212f", + "addons/core/Scripts/Game/ERR/ERR_Actions.c": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "addons/core/Scripts/Game/ERR/ERR_Actors.c": "17ec4e87858ba87175d890b2a6150f655378afe90e1d7cc3605bb16b5fc3b477", + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c": "1989948bf7658011e716820da80fbdd53880817a020a3055f4059fb5b233d62f", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c": "6f2983cf2c5c411999a61e87be720b43658e79dee59cd1bc165be29dc9374f25", + "addons/core/Scripts/Game/ERR/ERR_Location.c": "7e6fa49a458643998ea26b0a9fa499670bbe998fc660301a6186f7dd2977c14a", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41", + "addons/core/Scripts/Game/ERR/ERR_ScenarioComponent.c": "04feefdb40f10653d1f8e5b5465018274f38efae25b1bf9b463ba0d6513091e4", + "addons/core/Scripts/Game/ERR/ERR_Settings.c": "912150d45833a91d446a10644be8a5758c23f17cebd84031787bc1538222bb0a", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c": "db09584d32f6e9902414010f60f5d29af98b8abff04e1d14bcd04b5627f16051", + "addons/core/Scripts/Game/ERR/ERR_Supplies.c": "f39e7f534e6f306b3d8991187800f3a9a74b5771c505c05144439ef6f331eefb", + "addons/core/Worlds/ERR_Everon.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87", + "addons/core/Worlds/ERR_Everon.ent.meta": "19d1903ca72baa326b4724a6791d0da1104a1e53f3f31dc1ca41a856efd68e83", + "addons/core/Worlds/ERR_Everon_Layers/default.layer": "2ab127447e793eeea04893f7eb22718b56283fa446926944843c33d4f3de6d86", + "addons/core/addon.gproj": "231274e6b62302f32c65f9ff31de2ce8a9e51e1c8d12c87deeec82ae1f40de46", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "ff8d49d9d662834125f51a55f375918d8c3212e0a1a660234e454bdf7213b7b5", + "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_DiscoveryMap.c": "4f59121bb4fed5da244472b30653eafc4b4e9b58807a7f155f47e215e85812f3", + "addons/map/Scripts/Game/ERRMap/ERRM_SharedMapComponent.c": "ac7c2b72596bd655a389d4b9fdf7448e94cca137c009388eab0db1a9365ded02", + "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-083213/source/docs/native-medical-fixture.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-medical-fixture.md new file mode 100644 index 0000000..98e76c2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-medical-fixture.md @@ -0,0 +1,27 @@ +# Native medical effects fixture + +`ERR_NativeMedicalProbe` is an opt-in WORKBENCH-only Core fixture. It owns two ordinary configured prisoner characters and three real stock-type items: one dressing and two saline bags. It never wounds, transfers inventory from, changes consciousness on, or deletes the actual player. It does not change production health settings, thresholds, regeneration or medicine configuration. + +The fixture waits for character initialization, inserts the items into the healer's inventory, and checks that a healthy casualty rejects both treatment types. It wounds an actual left-arm hit zone and adds vanilla bleeding, then seeds the casualty's blood 100 units below its native unconsciousness threshold. The initial blood reduction is a scripted casualty condition. Subsequent blood changes are left to native bleeding and healing: five seconds later, the fixture requires further actual blood loss and unconsciousness. + +Treatment uses each real `SCR_ConsumableItemComponent.ApplyItemEffect` with the item's configured effect, deletion policy and native animation-parameter data. This is the same completion boundary reached by a successful native item action. It deliberately does not claim that a human-facing action, animation, proximity prompt or inventory menu completed. The dressing must be physically deleted and native bleeding stopped. Saline must move into the casualty's native treatment slot and install exactly one saline damage effect. A second bag must be rejected as already applied and remain a physical inventory item. + +The bag runs its unchanged native 90-second infusion. The fixture samples blood, unconsciousness, attached bags and saline effects, with diagnostics every ten seconds. It requires substantial native blood restoration and actual regained consciousness without calling `SetUnconscious`, restoring hit-zone health, or advancing effect time artificially. It then requires the bag's native deletion and release of its slot and damage effect, preserving the spare bag. + +`Tick(now)` returns `0` while pending, `1` on success and `-1` on failure. It has a 120-second internal deadline, including initialization. `Stop()` is idempotent and deletes only its recorded items and characters, so interrupted runner shutdown cannot leave fixture stock or casualty actors in the mission. The native delayed saline deletion routine is null-safe if its owned item was deleted during fixture cleanup. This cleanup behavior is source-grounded; interruption during a real treatment animation, disconnects, casualty carrying/loading, morphine, tourniquet use and multiplayer recovery remain untested. + +## Integration into the existing Core smoke runner + +No shared `ERR_GameMode`, `ERR_NativeBaseSmoke` or runner tool file is changed by this handoff. Suggested integration: + +1. Add outcome `medical` to the existing runner choices; run the Core smoke world with `-errBaseSmoke 1 -errSmokeOutcome medical`. +2. Add `protected ref ERR_NativeMedicalProbe m_ERRBaseMedicalProbe;` to the WORKBENCH smoke mode, plus `protected void ERR_StopMedicalProbe() { if (m_ERRBaseMedicalProbe) m_ERRBaseMedicalProbe.Stop(); }`. Register it on `OnStop()` alongside other probe cleanup; call it from `ERR_BaseCheck` failure cleanup too. +3. In step 0 after the real prisoner has spawned, before the ordinary escape actions, branch on outcome `medical`: construct `new ERR_NativeMedicalProbe(this)`, set step `600`, then return. The fixture handles spawning its own actors on its first tick. +4. Before the ordinary step dispatch, poll step 600. On `-1`, remove the BaseTick call. On `1`, set step `602` and request `Transition(ERR_Phase.DEFEAT)` solely as an explicit fixture reset. +5. In the terminal-result handler, handle outcome `medical` before the ordinary victory assertion. Require `current == ERR_Phase.DEFEAT && m_ERRBaseStep == 602`, then print the dedicated fixture completion. Keep the existing global 210-second deadline. + +The local repository isolation/resource/policy checks pass for this source. Native Enforce compilation and execution are pending the parent's centralized hidden and muted runner. No medical/manual/multiplayer acceptance is marked passed by this addition. + +## Observed native run + +[062406](evidence/native-2026-09-19-062406/report.json) completed all24 assertions with no script/VM failures. Blood fell to1783.02 with active bleeding and unconsciousness. After real dressing and saline application, bleeding stopped; blood rose past2188.59 and native consciousness returned. The unchanged infusion completed, removed its bag/effect and left the rejected spare in inventory. The overall report still fails on seven inherited vehicle catalog schema errors. This evidence is tied to its launch source manifest and does not qualify later edits or manual/multiplayer treatment. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-mortar-firing.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-mortar-firing.md new file mode 100644 index 0000000..3f096cd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/native-mortar-firing.md @@ -0,0 +1,54 @@ +# Native mortar first shot and cancellation fixture + +`ERR_NativeMortarFiringProbe` is opt-in WORKBENCH code for `--project chat --smoke mortar-fire --rounds 1`. It observes one real HQ-authorized shot, then explicitly stops support and watches for duplicate orders/shots or replacement ammunition. This is not a full eight-shot salvo, hit-accuracy, real enemy perception, remote-client or FPS test. No engine run was performed while authoring it. + +The probe waits for the existing authored gun/four-person crew, native expansion, operational state and physical manpack route. It snapshots exactly 27 unique inventory shells. A bounded eight-point terrain survey checks no characters/vehicles in a 400m square and applies the production settlement/friendly safety checks to the target and all prospective salvo offsets. An inert fixture-owned vanilla intel folder supplies target identity. The observation describing that identity as a stationary contact is explicitly synthetic; it is queued on the existing battery RTO's actual uplink. There is no direct contact-list insertion or battery Order call. Normal HQ acceptance, mortar scheduling, real downlink, native artillery activity, aim, final shell transfer and native OnWeaponFired remain unchanged. No report is refreshed or retimestamped to make firing pass. + +The independent native-event hook records only a non-null projectile from this gun. It rejects duplicate entity callbacks and requires this report/order, an open committed shot and fresh aim with positive flight time. Later polling requires matching battery projectile counts and exactly one original inventory shell consumed. It stops support only on that later tick, never inside the firing callback, and verifies unchanged order/projectile/ammunition counts for another twelve seconds. Already-fired projectiles remain engine-owned; cleanup does not delete or move them. Inventory loss and actual projectile origin are recorded, but impact/flight accuracy is not measured. + +Cleanup removes only the test report and orders referring to its target, cancels its battery order if still present, deletes the inert target and detaches the static observer. It leaves mission guns/crew, inventory and physics alone. Success intentionally stops the support service, so the parent fixture must end/reset this disposable mission. On failure, stop the probe and end the fixture; do not continue ordinary gameplay with the test report. Existing contacts or an already-tasked battery cause a diagnostic refusal rather than erasing unrelated reports. Begin this case immediately after the real initial player is admitted. If actual perception has already produced competing reports, diagnose and choose a disclosed fixture arrangement; do not suppress production observation or relax report freshness. + +The startup wait is bounded to 180 seconds, report-to-first-shot to 90 seconds, and stopped observation to 12 seconds. Battery status/failure/route/activity/aim diagnostics are emitted every 5 seconds. A native failure is useful evidence; successful node or inventory-request returns never substitute for a projectile. + +## Parent-owned integration + +Copy only `addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c` and `tests/test_native_mortar_probe.py`, plus this document. The new source adds no resource identities and no production behavior outside WORKBENCH. Preserve the separate Battery/System/Firing fixes; the probe relies only on their existing public counters, identity fields, `CountShells`, `SiteStatus`, `Operational`, and normal HQ routes. + +In the existing Chat `ERR_NativeSmoke.c` layer (not another modded mode), add: + +```c +protected bool m_ERRTestMortarFire; +protected ref ERR_NativeMortarFiringProbe m_ERRMortarFire; +``` + +After outcome parsing, set `m_ERRTestMortarFire = outcome == "mortar-fire";` and give that case a 330000ms outer smoke deadline. Add `if (m_ERRMortarFire) m_ERRMortarFire.Stop();` to the existing cleanup helper used by error/OnStop. In the step0 branch, after the usual real-player/contracts checks and before existing inventory/death branches: + +```c +if (m_ERRTestMortarFire) +{ + DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false); + m_ERRMortarFire = new ERR_NativeMortarFiringProbe(this); + m_ERRSmokeStep = 150; + return; +} +``` + +Before normal step dispatch: + +```c +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; +} +``` + +In `ERR_SmokePhase`, after the terminal-phase guard but before generic victory/death expectations, handle this case only if `current == ERR_Phase.DEFEAT && m_ERRSmokeStep == 151`. Mark smoke done, remove its polling callback, run existing cleanup and print `ERR SMOKE COMPLETE: native HQ radio to first mortar projectile and explicit stop; fixture reset requested`. A premature natural defeat is a failure. This completion means the targeted mechanism and cancellation observations passed, not a completed escape. + +Add `mortar-fire` to the runner smoke choices; explicitly require Chat and one round for this case. Keep Core unsupported. Run with an outer timeout at least 400 seconds. Add `test_native_mortar_probe.py` to `tools/check.py` if retaining the probe. Its C++ harness executes the real native-event evidence method and checks wrong-gun, null/duplicate, uncommitted, wrong-source, missing/stale aim, stopped-observer and post-stop event refusal. It does not simulate the native firing behavior. + +## Further required cases + +After a real first-shot pass, qualify the complete eight-shot salvo under unchanged 60-second contact freshness, finite donor-to-gunner transfer, receiver-radio loss before delivery, stale report during supply/aim, crew/gun loss, depletion, and Stop during an accepted but unfinished shell transfer. The fixture's first shot may not require resupply because the native gunner already owns shells; do not claim transfer-race coverage from this result. Real visual perception→radio→HQ→fire and multiplayer need separate evidence. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/objective-widget-lifecycle.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/objective-widget-lifecycle.md new file mode 100644 index 0000000..2f03ff1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/objective-widget-lifecycle.md @@ -0,0 +1,21 @@ +# Native objective widget lifecycle + +`ERR_ObjectiveDetails.c` extends vanilla task details only while bound to this scenario's `erri-mission-` tasks. It refreshes open instructions when native display data changes. Before rebinding or detaching it removes that display subscription and cancels pending native `CheckOverflow` callbacks, whose assignee label widgets are about to be deleted. Assignment refreshes cancel earlier overflow work before replacing labels too. + +These native invokers are static on `SCR_Task` and survive entity deletion. Ownership is tracked separately from weak task references. On successor detail-widget detach, the production handler removes the five vanilla global task-event subscriptions (assignee added/removed, UI visibility, visibility and ownership), removes the task-entry visual-change route when present, and releases its task. The installed vanilla detach path handles the remaining widget and manager callbacks. Other task types continue through the native behavior; this is not a global task UI replacement. + +The WORKBENCH-only `ERR_NativeObjectiveProbe` runs with the existing explicit Core smoke opt-in. Its close/reopen check binds and rebinds an actual mission objective using the native layouts, emits unchanged state through the five native task event invokers, and checks one callback per event. It then removes the widget through its normal hierarchy lifecycle with no probe-only unsubscribe helper. A retained test handler records any late native task or overflow calls; such calls fail the fixture before they can dereference deleted widgets. This instrumentation does not repair subscriptions or cancel callbacks. + +After one normal 500ms smoke tick, exceeding the native overflow delay of 100ms, the fixture verifies no delayed callback reached the closed handler. It reopens native details and checks current title, instructions, task assignment and hidden map control. `BeginRound` clears static probe failure state once per smoke round; ordinary cleanup preserves failures. The added check consumes approximately one second including resuming the existing smoke sequence and stays within its unchanged 210-second deadline. + +This is a bounded local lifecycle regression. Rebinding uses the same current task; normal mission progression separately recreates the widget for each new objective. Unchanged-state event emissions are synthetic, and these checks do not establish remote client replication or manual UI acceptance. Native validation is recorded below. + +## Short task-deletion regression + +The explicit Core smoke outcome `objective-ui` runs the normal close/reopen check and then creates its own `erri-mission-probe-teardown` native BaseTask. It assigns the local executor and initializes a hidden native details panel, causing native assignee overflow work to be scheduled. Vanilla allows one assigned task per executor, so this briefly moves the local assignment; the fixture restores the real mission objective immediately after deleting its isolated task and also during failure cleanup. The real task is never deleted. + +The fixture calls native `SCR_TaskSystem.DeleteTask` and asserts that both the fixture's task reference and the details handler's native task reference actually become null. It then closes the panel through production detach and waits 500ms for any leaked overflow callback. No fixture code clears those references before the assertion or cancels the overflow work. It verifies the real objective and its restored assignment again, then requests an explicit test reset at smoke step 902. This case adds two short asynchronous waits and avoids the radio/extraction sequence. The ownership flag in production keeps cancellation active after weak entity references disappear. + +Runner integration: add `objective-ui` to the existing `--smoke-outcome` choices and map it to the Core smoke world with `-errBaseSmoke 1 -errSmokeOutcome objective-ui`. Treat its terminal DEFEAT as a fixture-requested reset only when the dedicated step-902 completion assertion passes. Native compilation and execution of this additional case remain pending. + +The final [053124](evidence/native-2026-09-19-053124/report.json) fixture passes 30 assertions with no script/VM exceptions and verified launch/stopped-source/log hashes. It confirms actual task deletion clears weak references, detaches the panel, restores the real objective assignment and leaves no late callbacks after 500ms. The critical five invokers are static and are removed without requiring a surviving task entity. Seven inherited vanilla resource errors remain; manual and remote-client UI acceptance remain pending. Earlier failed callback and diagnostic iterations remain in the validation archive. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-diagnostic-splash.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-diagnostic-splash.md new file mode 100644 index 0000000..ccd3941 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-diagnostic-splash.md @@ -0,0 +1,13 @@ +# Explicit ordinary diagnostic splash handling + +The installed GameLib `SplashScreen.Load()` creates IntroSplashScreen on initial startup and ScenarioLoadingScreen on addon reload, without consulting `noSplash`. Both installed layouts contain a `SCR_WidgetExportRuleRoot` component. That class is declared in the later Game module, so creating either layout before Game compiles produces the observed unknown-class error. In ordinary run `game-2026-09-19-080004`, this happened at 08:00:05.617 and 08:00:09.371; both completed Game-module compilations followed later. This identifies the resource/module ordering problem independently of mission gameplay. + +Core's independently authored GameLib extension honors the already supplied `-noSplash` only together with the explicit successor `-errOrdinaryScenario core` or `chat` diagnostic argument. It skips these diagnostic splash layouts instead of asking the GUI to instantiate their unavailable Game components. Unflagged or visible startup delegates unchanged to vanilla. It preserves the vanilla splash sequence counter once per instance and logs the selected diagnostic behavior once. It adds no replacement layout, asset, dummy class, identity or error filter. + +The installed base lifecycle supports a deliberately absent root: `BaseLoadingAnim.Show()` requests `Load()` when null, `Unload()` deletes the root, and `SplashScreen.Update()` immediately returns when null. The extension handles repeated Load calls without creating UI or advancing its counter again. Native Show/Hide and script compilation still need a centralized ordinary run. A clean diagnostic run with this option would validate gameplay startup without splash UI, **not** normal visible splash loading. All errors from resources that are actually loaded remain failures. + +The official [startup parameters](https://community.bistudio.com/wiki/Arma_Reforger:Startup_Parameters) describe `-noSplash` as skipping splash screens. This implementation makes the explicit diagnostic honor that requested behavior at its GameLib layout-loading boundary; it does not claim an undocumented engine switch exists. + +The actual Load method is executed in a source-local C++ regression across both valid projects, absent/invalid flags, repeated calls and a recreated instance. No native GUI or engine is launched by that test. + +Offline identity is separate. The ordinary header run created a native local controller and reached successor admission, then withheld spawning because its identity could not bind. A supported local platform/session initialization path would need to supply an acceptable native identity; `-noBackend` is not evidence of such initialization. This change does not initialize accounts, contact the backend, relax admission or invent identities. The installed utility also has a non-dedicated name-derived PeerTool fallback, so its return is not necessarily a verified platform identity. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-game-startup.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-game-startup.md new file mode 100644 index 0000000..2514892 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-game-startup.md @@ -0,0 +1,95 @@ +# Ordinary game startup validation + +`tools/headless_game.py` prepares a bounded **ordinary game** run using the installed stable `ArmaReforgerSteam.exe`, rather than Workbench. It loads either Core or the full Chat dependency chain and the authored successor scenario header. It does not activate any WORKBENCH smoke plugin or add a server flag. + +Example, only when other runners have stopped: + +```sh +python3 tools/headless_game.py --compat /tmp/erri-headless-compat --profile /tmp/erri-game-profile --project core --timeout 180 +``` + +Use `--project chat` for the companion dependency chain. The program constructs `-addonsDir /addons -addons -errOrdinaryScenario -profile -noBackend -noSound -noSplash -noThrow -disableCrashReporter -logconsole`. Engine arguments follow the official [Arma Reforger startup parameters](https://community.bistudio.com/wiki/Arma_Reforger:Startup_Parameters). `-errOrdinaryScenario` is our explicit diagnostic argument, handled by the successor launcher described below. The server-only `-server` parameter is deliberately absent. The official startup-parameter page was checked again on 2026-09-19: it documents `-noSplash` for skipping splash screens and `-noThrow` for disabling error dialogs. Neither option promises to omit layout resource loading or to ignore logged errors. + +## Isolation + +- Read-only `/proc` enumeration refuses **any** existing ArmaReforgerSteam/SteamDiag game instance before launch, including a Wine/Proton launcher command or truncated process name. Unreadable process state fails closed. It does not stop the existing game. +- The disposable cloned prefix must already exist outside Steam. The same `.erri-workbench.lock` used by the Workbench runner prevents concurrent use. Existing Wine, Proton, Gamescope and Windows process candidates carrying that prefix also cause refusal. Readable native process metadata excludes unrelated services; ambiguous candidates fail closed. The read-only `--inspect-processes` mode reports all process blockers without launching, locking, configuring audio or creating profiles. Do not use the actual Steam compatdata prefix or user game profile. +- The game profile is separate from source, Steam and the prefix tree. An existing directory must have this runner's exact private-profile marker. Unexpected symlinks/addons are rejected; only the installed vanilla data link is created. This does not import the user's game profile or workshop subscription folder. +- Gamescope uses its headless backend; no main/right-monitor window is requested. `-noSound`, a unique muted null sink and routing only the run's identified audio streams prevent test output. No default sink or unrelated application stream is changed. +- Cleanup targets only the launched process group and the locked disposable prefix. Only the null sink module created for this run is unloaded. Cleanup errors are retained as failures; source/log sealing requires confirmed prefix cleanup. + +This program never calls Steam account, friend, workshop, login or profile APIs. It does not modify Steam configuration. `-noBackend` disables the game backend; it is not a claim that the proprietary Steam-enabled executable performs no platform initialization internally. + +## What constitutes success + +A successful run requires all of: + +1. A native `Module: Game` log with neither `WORKBENCH` nor `ENF_WB` in its defines. +2. The selected native mission header and actual `GetSystemsConfig()` both match `MissionSystems.conf`, followed by the normal successor preparation transition `phase 0 -> 1`, proving the ordinary game loaded and initialized the mission. +3. Another 15 seconds (configurable 5–120) without native errors, startup failure or leaked `ERR SMOKE` fixture output. +4. The launched processes stopped, with unchanged addon bytes and exact final raw-log provenance. + +Timeout, process exit before readiness, unexpected multiple log sessions, any native engine/script error or unverified module defines fails. It does not infer success from an executable starting or a blank window. + +The ordinary game log may require a disclaimer/menu interaction or may reject offline startup in a particular installed build. This runner does not click past dialogs, change account state, weaken checks, or silently switch to Workbench. Such a run remains incomplete and its captured log should determine the next bounded action. + +The source snapshot is captured before process launch and sealed after cleanup, using the existing provenance helpers. `runner.json`, `game-startup-report.json` and `headless-launch.log` accompany the raw game session. The result is `game-started`, **not** `smoke-completed`; existing release qualification therefore cannot count it as a completed escape/restart fixture. Existing archive tooling can retain it as additional evidence, subject to its ordinary error checks and provenance validation. + +## Current evidence + +Thirty source-local tests exercise process refusal (including inaccessible `/proc` data), prefix/profile separation, exact game arguments and readiness/error gates. They import the runner without launching processes, audio, Steam or the engine. The first host launch is preserved in [game-2026-09-19-072609](evidence/game-2026-09-19-072609/report.json). It failed on a vanilla intro-splash unknown-class error before Game compilation. GameLib defines included ENF_WB, so the executable choice and startup resource path remain under investigation. No ordinary-game startup pass is claimed. + +The intended gate is production script compilation/startup validation with WORKBENCH undefined. It is not ordinary player input, a completed escape, manual vehicle use, multiplayer/dedicated-server behavior, an FPS benchmark. + +## Installed executable selection and first failed attempt + +The first Diag attempt, `logs_2026-09-19_07-26-09`, initialized GameLib with `ENF_WB` and `ENABLE_DIAG`. Its vanilla IntroSplashScreen then reported `Unknown class SCR_WidgetExportRuleRoot` before Game-module compilation completed. The runner retained failure; it did not mask the resource error or count startup. + +Read-only installed binary inspection distinguishes three executables: + +| Executable | Bytes | SHA-256 | +|---|---:|---| +| ArmaReforgerSteam.exe | 37,272,632 | `1d221a990fa16c78fe02f685a7ba1330be115ca93cd3b641e67e5d3f1b40d9c9` | +| ArmaReforgerSteamDiag.exe | 40,060,472 | `51f941dee28bda7865e2428d7fc92fcbe7c5c7ff666caf642c0ff23c2aced457` | +| ArmaReforger_BE.exe | 1,489,648 | `f1d9117d6c503857fc28ad8be2c828e1ae6124d3055b1fae13ad7e99e3f01d82` | + +The regular and Diag programs are x86-64 PE executables; the separate BE launcher is a much smaller x86 PE. The runner selects the installed regular game directly. It does not invoke the BE launcher or silently fall back to another program. + +Diag contains `ENF_WB` and `ENABLE_DIAG` strings in the script-initialization constant block; regular contains neither. Both contain the same module/defines log format, so the existing explicit module-evidence gate remains appropriate. Combined with the actual Diag GameLib log, this supports a built-in Diag configuration explanation, not an addon-defined WORKBENCH macro. The regular attempt below confirms its GameLib runtime defines lack WORKBENCH/ENF_WB; a completed Game-module compile is still required. Binary strings alone are not a compilation result. + +The installed splash layout contains SCR_WidgetExportRuleRoot at lines15–18, while that class is authored in `scripts/Game/UI/Components/SCR_WidgetExportRule.c:82`. The log loads the layout after GameLib compilation but before Game completes. This establishes the observed module-order mismatch; it does not prove that regular execution avoids it. No layout override, class stub, error filter, or native acceptance relaxation is included. + +The regular executable was attempted in `logs_2026-09-19_07-32-31`. GameLib compiled without WORKBENCH/ENF_WB. The splash layout still reported the same unknown class at 07:32:32.696 despite `-noSplash` being present in the logged command. `Compiling Game scripts` followed at 07:32:32.770, but no completed `Module: Game` or mission readiness was captured before fail-fast cleanup. This is failed startup evidence, not an ordinary-game compilation pass. + +Installed `scripts/Game/UI/Components/SCR_WidgetExportRule.c:82` declares `SCR_WidgetExportRuleRoot` outside any WORKBENCH guard; only its helper methods are guarded later. Thus ordinary-build exclusion of that class is not supported by the source. The observed layout load precedes Game compilation, which is consistent with a module-order issue but does not establish its engine-internal cause. There is no supported alternative splash-bypass flag established by this audit; the existing documented `-noSplash` remains. No asset stub, installed-resource edit, or log filter is proposed. + +Read-only evidence SHA-256: extracted vanilla `SCR_WidgetExportRule.c` = `3a4b5dc3a8669bf20d903277d249d41ee3ae7e1e74d2c329ed31d435624fa4b5`; raw regular-run `console.log` from `logs_2026-09-19_07-32-31` = `20684f6328c7e955d1f08edf16e470e19efc71284856701b43ed31811693536f`. + + +## Optional failure diagnostic grace + +`--failure-grace 30` keeps a failed ordinary run alive for at most 30 seconds after the first observed native/startup error so downstream Game compilation or mission-startup diagnostics can reach the raw log. The default is `0`, preserving immediate failure cleanup. Only integer values 0–30 are accepted before any launch or audio mutation. + +The first failure stays latched. Repeated errors never reset its timestamp, and later Game compilation/readiness cannot turn the run into a success. The grace expires at the earlier of first failure plus the configured grace or the original absolute run timeout, measured with a monotonic clock. Process exit ends observation immediately. Cleanup, source snapshots, post-stop sealing and raw-log hashing use the same path as ordinary failure. + +`runner.json` records `failure_grace_seconds`, `failure_observed_during_polling` and `first_failure_elapsed_seconds` (relative to the run's monotonic start, or null). `game-startup-report.json` preserves the final raw error counts and marks an earlier observed failure even if the process later truncated/replaced its log; it never invents error lines. Any later readiness remains failed and does not qualify a release. Safety/preflight failures and cleanup errors do not receive this logging grace. + +The twelve additional source-local tests exercise default fail-fast behavior, repeated-error deadlines, readiness before/after error, absolute-timeout truncation, early process exit, log-replacement failure retention, continuous clean settle behavior, exit at the settle boundary, CLI defaults and bound rejection. They use synthetic observations and launch no native process. The extended capture in [074505](evidence/game-2026-09-19-074505/report.json) confirms completed Game compilation and preserves the subsequent guard-spawn crash. + + +## External crash reporter + +The runner adds documented `-disableCrashReporter` to disable automatic external crash reporting. `-noBackend` controls backend HTTP communication, and did not prevent the separate reporter in ordinary run `logs_2026-09-19_07-45-05`: its raw log records `Crash reporter started`, `Sending analytical data` and `Crash Analytics: OK`. The official [Crash Report documentation](https://community.bistudio.com/wiki/Arma_Reforger:Crash_Report) names `-disableCrashReporter` for stopping automatic sending; the installed regular executable contains that exact parameter. This changes reporting behavior only: local errors, crash logs and failed results remain available. The runner does not use `-silentCrashReport` or its old name `-noCrashDialog`, which automatically send reports without a dialog according to the official [startup parameters](https://community.bistudio.com/wiki/Arma_Reforger:Startup_Parameters). No test has intentionally induced another crash to validate the option. + + +## Header-based ordinary launch candidate + +Direct `-world Worlds/ERR_Everon.ent` did compile the ordinary Game module (5,728 files without WORKBENCH/ENF_WB) in `logs_2026-09-19_07-45-05`, created a real local controller and reached the strict identity gate. It then crashed on the first vanilla USSR squad leader spawn. Its world-systems log named no config; the comparable Workbench run explicitly loaded BaseGameModeSystems. `MissionSystems.conf` inherits BaseGameModeSystems, which inherits ChimeraSystemsConfig including PawnEntitySystem, character animation/damage/control systems and others. Missing configured systems is therefore a grounded cause to investigate, not a proven native crash diagnosis. No identity workaround is included. + +The ordinary runner now starts the normal main menu and explicitly requests `-errOrdinaryScenario core` or `chat`. Core owns the opt-in `ERR_OrdinaryScenarioLaunch.c`; Chat adds only its own header/addon selection override, preserving the dependency direction. Both are absent from WORKBENCH compilation and inert without the explicit argument. The launcher queues one attempt per game instance, validates the selected installed successor header/addon pair and only calls the native transition from an idle main menu. Active worlds and pending native transitions are never replaced. World cleanup cancels an outstanding callback. No click, user identity, audit callback or backend state is synthesized. + +The exact installed API is `GameStateTransitions.RequestScenarioChangeTransition(ResourceName missionOrWorld, ResourceName worldSystemsConfig, string addonList)`: its documentation accepts a mission header or world. Vanilla `game.c:1246` uses it in `PlayGameConfig`. Core passes `{AD62322D5213C440}Missions/ERR_Everon_Base.conf`; Chat passes `{C1E20667DCE324ED}Missions/ERR_Everon.conf`; both specify `{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf`. Once a successor world starts, the diagnostic only inspects its active header and actual `GetSystemsConfig()`; the runner requires that verification plus ordinary module/phase/settle evidence. Existing splash errors still permanently fail the run, even if downstream header verification succeeds. + +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. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-identity-diagnostics.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-identity-diagnostics.md new file mode 100644 index 0000000..f89d5bc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-identity-diagnostics.md @@ -0,0 +1,18 @@ +# Ordinary offline identity diagnosis + +Installed `RplMode` values are None=0, Client=1, Listen=2 and Dedicated=3. The observed regular offline run's mode=0 therefore does not enter the dedicated-server branch of `SCR_PlayerIdentityUtils`. A native local controller exists; the remaining issue is identity conversion/binding, not absence of a player object. + +The installed utility calls `BackendApi.GetPlayerIdentityId` and only attempts its non-dedicated PeerTool name fallback when the returned string is **empty**. A nonempty null UUID sentinel or malformed string bypasses that fallback. This is a possible explanation, not yet the observed raw result. The installed UUID type remains a string: invalid-format strings are considered null, and both empty and all-zero strings are null despite not being string-equal. The installed `int.ToString(8, true)` uses hexadecimal formatting (the boolean means `hex`), so decimal width growth is not a supported explanation for the fallback result. + +The optional admission diagnostic now records raw cached identity string length, emptiness, UUID null/format status, equality to the null UUID sentinel, returned helper length/format status and the actual Dedicated comparison. Raw length=-1 denotes an unavailable backend API object. It is compiled outside WORKBENCH and executes only for the explicit `errOrdinaryScenario core/chat` diagnostic. It logs neither identity contents nor player name contents, does not call authentication/initialization methods, creates no replacement identity and leaves strict `Players().Bind` behavior unchanged. + +Interpretation of the next native sample: + +- rawLength>0, rawNullSentinel=1: native backend supplied the initialized null UUID; vanilla's empty-string test bypasses its fallback. +- rawLength>0, rawNull=1, rawNullSentinel=0: a nonempty invalid/native sentinel value bypasses fallback. +- rawEmpty=1, dedicated=0, helperLength>0, helperFormatValid=0: vanilla returned its fallback string, but UUID validation rejected its format. +- rawEmpty=1, dedicated=0, helperLength=0: the expected fallback did not produce a string; inspect native/local initialization rather than inferring from player-name length. + +None of these observations authorizes using a name-derived or generated ordinary player identity. A valid production fix requires evidence for a supported native local platform/session identity path and its reconnect/account guarantees. Offline diagnostic admission remains failed until that exists; no backend contact or identity policy change is included here. + +Native `game-2026-09-19-081359` confirms the first case: `rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0`. The normal local audit callback occurred; the helper returned the native null sentinel unchanged. A narrowly scoped standalone round-local roster key is being designed separately; network identity behavior remains unchanged. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-launch-callback-fix.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-launch-callback-fix.md new file mode 100644 index 0000000..24afbdd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-launch-callback-fix.md @@ -0,0 +1,9 @@ +# Ordinary launcher callback ownership + +The first ordinary compilation of the header launcher rejected callbacks on `ArmaReforgerScripted`: native `Game` is not a `Managed` callback owner. `ERR_OrdinaryScenarioLaunchRequest : Managed` now owns the single queued attempt and captures the already selected project, header and addon. The game retains that helper and cancels it before delegating unchanged world cleanup to `super`. + +The helper refuses duplicate queueing and marks its attempt finished before checking or requesting a native transition. Cancellation both marks it finished and removes the callback, so a retained/stale callback cannot launch another world. The existing explicit CLI gate, main-menu/active-world/transition guards, exact addon/header validation, header/system verification and unchanged native transition call remain. Chat's existing header-selection overrides do not change. No player/audit/authentication state is touched. + +[080004](evidence/game-2026-09-19-080004/report.json) verifies ordinary Game compilation without WORKBENCH/ENF_WB, one Core header request, native MissionSystems initialization, header verification and the normal preparation-to-prison transition. The previous callback-owner compile error is absent and no guard-spawn crash is captured in this bounded run. This verifies the compiled helper and exercised transition; cancellation races and repeated requests were not triggered by the native run. + +The overall run remains failed: two vanilla intro-splash `SCR_WidgetExportRuleRoot` errors are retained, and player identity binding fails so the local spawn is withheld. No identity bypass, manual input, complete escape or multiplayer success is claimed. Source bytes were unchanged, the private runner confirmed cleanup, and the failure remains archived. No engine was launched while authoring the callback fix itself. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-splash-source-hashes.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-splash-source-hashes.json new file mode 100644 index 0000000..efde4e6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/ordinary-splash-source-hashes.json @@ -0,0 +1,7 @@ +{ + "scripts/GameLib/LoadingScreens/SplashScreen.c": "2df52f7be83c69b056f0022e27b47cb39af5d797577cdd529b99fa07cc385cf5", + "scripts/GameLib/gameLib.c": "a7bc8fe46847237d6dbc0a2ca67bcaf8a52933bd0e1672988da6c7a607e52964", + "scripts/Game/UI/Components/SCR_WidgetExportRule.c": "3a4b5dc3a8669bf20d903277d249d41ee3ae7e1e74d2c329ed31d435624fa4b5", + "UI/layouts/Menus/MainMenu/IntroSplashScreen.layout": "832072a8c803126c9e71d1a78b1442fe9f907e4907848049b84f9cb981c832ea", + "UI/layouts/Menus/LoadingScreen/ScenarioLoadingScreen.layout": "c98568661b22fcecc1ef7115c8fce24b989346e50282226a7cd881a10969ac49" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.json new file mode 100644 index 0000000..7e91895 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.json @@ -0,0 +1,539 @@ +{ + "basis": "Read-only original package path inventory. Category assignment is an inference from file names and directories, not a code audit or proof of feature equivalence. All original script entries have a tracked responsibility; none is marked complete solely from this mapping.", + "acceptance": "docs/acceptance.json", + "features": [ + { + "id": "alternate_starts", + "title": "Helicopter-crash and hideout starts", + "scope": "later", + "status": "pending", + "original_scripts": [ + "Scripts/Game/Components/ESCT_HelicrashHelicopterComponent.c", + "Scripts/Game/Components/Start/ESCT_HelicrashStartComponent.c", + "Scripts/Game/Components/Start/ESCT_HideoutStartComponent.c", + "Scripts/Game/Entities/ESCT_HelicrashLocationHolder.c" + ], + "replacement_files": [], + "remaining": "Author separate layouts and progression rules after the prison release." + }, + { + "id": "spectators", + "title": "Spectators and follow cameras", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Camera/Components/ESCT_AssignTargetManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_AttachToPlayerManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_LookAtTargetManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_OrbitDistanceManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_OrbitPlayerManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_SpectatorUIManualCameraComponent.c", + "Scripts/Game/Components/Editor/ESCT_SpectatorMenuLayoutEditorComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_SpectatorComponent.c", + "Scripts/Game/GameMode/Components/ESCT_AmbientCameraDirectorComponent.c", + "Scripts/Game/UI/ScreenEffects/ESCT_SpectatorBleedingScreenEffect.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_Observer.c" + ], + "remaining": "Verify remote streaming, target changes, death/reconnect and camera presentation on real clients." + }, + { + "id": "environment", + "title": "Time, weather, lights and night options", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/AI/ScriptedNodes/Conditions/ESCT_AIDecoIsSunset.c", + "Scripts/Game/Actions/ESCT_LightUserAction.c", + "Scripts/Game/Actions/ESCT_SwitchLightUserAction.c", + "Scripts/Game/Components/ESCT_IndoorLampComponent.c", + "Scripts/Game/Components/ESCT_IndoorLampSwitchProxyComponent.c", + "Scripts/Game/Editor/Containers/Actions/ESCT_ToggleLocalEditorLimitedNightModeToolbarAction.c", + "Scripts/Game/GameMode/ESCT_NightModeGameModeComponent.c", + "Scripts/Game/GameMode/Misc/ESCT_TimeOfDay.c", + "Scripts/Game/Misc/ESCT_Weather.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_EnvironmentTab.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_TimeService.c", + "docs/mission-time.md", + "addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c", + "docs/environment.md" + ], + "remaining": "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." + }, + { + "id": "presentation_audio", + "title": "Voice, music, feedback and effects", + "scope": "later", + "status": "pending", + "original_scripts": [ + "Scripts/Game/Components/ESCT_BarrelDamageManager.c", + "Scripts/Game/Components/ESCT_BarrelSoundEffectComponent.c", + "Scripts/Game/Components/FlareMine/ESCT_ProjectileSpawnerComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_EscapistsFeedbackComponent.c", + "Scripts/Game/Components/Radio/ESCT_RadioSoundComponent.c", + "Scripts/Game/EffectModule/ESCT_RocketBarrageEffectsModule.c", + "Scripts/Game/GameMode/Components/ESCT_VoiceoverComponent.c", + "Scripts/Game/Misc/ESCT_BarrelFlammableHitZone.c", + "Scripts/Game/Misc/ESCT_EscapistsHint.c", + "Scripts/Game/Music/ESCT_ApproachHelipadMusic.c", + "Scripts/Game/Music/ESCT_DefendRadioMusic.c", + "Scripts/Game/Music/ESCT_FlyAwayMusic.c", + "Scripts/Game/Systems/ESCT_VoiceoverSystem.c", + "Scripts/Game/VON/ESCT_VONController.c" + ], + "replacement_files": [], + "remaining": "Review which feedback is required for clear play; author replacements without importing original audio or UI assets." + }, + { + "id": "medical", + "title": "Health, unconsciousness and casualty handling", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Actions/ESCT_LoadCasualtyVehicleUserAction.c", + "Scripts/Game/Components/Damage/ESCT_HelicopterDamageManagerComponent.c", + "Scripts/Game/Components/ESCT_MedicalStorageArsenalComponent.c", + "Scripts/Game/Components/ESCT_PlayerDamageManagerComponent.c", + "Scripts/Game/Components/ESCT_StaticHospitalComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_WithstandComponent.c", + "Scripts/Game/Components/SupportStations/ESCT_LoadCasualtyVehicleSupportStationComponent.c", + "Scripts/Game/Enums/ESCT_EHealthType.c", + "Scripts/Game/Misc/ESCT_Health.c", + "Scripts/Game/Misc/ESCT_PlayerHitZone.c", + "Scripts/Game/UI/HUD/ESCT_UnconsciousInfoDisplay.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_Actors.c", + "addons/core/Scripts/Game/ERR/ERR_GameMode.c" + ], + "remaining": "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." + }, + { + "id": "enemy_coordination", + "title": "Enemy coordination, support and threat assessment", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/AI/Behavior/ActivityFeatures/ESCT_AIActivityCallForSupportFeature.c", + "Scripts/Game/AI/Behavior/ActivityFeatures/ESCT_AIActivityIllumFlareFeature.c", + "Scripts/Game/AI/Behavior/ESCT_AICallForSupportActivity.c", + "Scripts/Game/AI/Behavior/ESCT_AICallSupportToBehavior.c", + "Scripts/Game/AI/Behavior/ESCT_AIVehicleBehavior.c", + "Scripts/Game/AI/Components/ESCT_AIGroupInfoComponent.c", + "Scripts/Game/AI/Components/ESCT_AIGroupUtilityComponent.c", + "Scripts/Game/AI/Reaction/ESCT_AIGoalReaction.c", + "Scripts/Game/AI/ScriptedNodes/Generated/EscapistsSendGoalMessage.c", + "Scripts/Game/AI/ScriptedNodes/Generated/EscapistsSendInfoMessage.c", + "Scripts/Game/AI/ScriptedNodes/Generated/EscapistsSendOrder.c", + "Scripts/Game/AI/ScriptedNodes/Groups/ESCT_AICallSupport.c", + "Scripts/Game/AI/ScriptedNodes/Groups/ESCT_AICallSupportTo.c", + "Scripts/Game/AI/ScriptedNodes/Messages/ESCT_AIMessage.c", + "Scripts/Game/Components/ESCT_EditableSupportComponent.c", + "Scripts/Game/Components/ESCT_SupportCallerComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliBehaviourBaseComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliFlyByComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliLoiterComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliStrikeFireComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliStrikeMovementComponent.c", + "Scripts/Game/Entities/ESCT_AIGroup.c", + "Scripts/Game/Enums/ESCT_ESupportStationType.c", + "Scripts/Game/Enums/Support/ESCT_ESupportState.c", + "Scripts/Game/Enums/Support/ESCT_ESupportType.c", + "Scripts/Game/GameMode/Components/ESCT_WaypointManager.c", + "Scripts/Game/Misc/ESCT_AirstrikeConfig.c", + "Scripts/Game/Support/ESCT_SupportInfo.c", + "Scripts/Game/Support/ESCT_SupportPicker.c", + "Scripts/Game/Support/ESCT_SupportPresentationConfig.c", + "Scripts/Game/Support/ESCT_SupportSystemConfig.c", + "Scripts/Game/Support/SupportTypes/ESCT_HeliLoiterSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_HeliStrikeSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_IlluminationMortarBarrageSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_LightVehicleSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_MortarBarrageBase.c", + "Scripts/Game/Support/SupportTypes/ESCT_MortarBarrageSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_QRFSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_QRFVehicleSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_RocketArtillerySupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_SmokeMortarBarrageSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_SpecOpsSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_SupportBase.c", + "Scripts/Game/Systems/ESCT_SupportSystem.c", + "Scripts/Game/Tasks/SupportEntities/ESCT_BaseTaskSupportEntity.c", + "Scripts/Game/Tasks/SupportEntities/ESCT_DefendRadioTaskSupportEntity.c", + "Scripts/Game/ThreatAssessment/ESCT_ThreatAssessmentConfig.c", + "Scripts/Game/Utility/ESCT_GroupDirector.c" + ], + "replacement_files": [ + "addons/ai/Scripts/Game/ERR/ERR_HQ.c", + "addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c" + ], + "remaining": "HQ alone coordinates physical forces. Complete support scheduling, mortar firing, aircraft, transport/rearming and losses without spawning responses." + }, + { + "id": "ambient", + "title": "Ambient patrols, vehicles and civilians", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_AmbientEventBase.c", + "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_HeliFlybyEvent.c", + "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_VehiclePatrolEvent.c", + "Scripts/Game/AmbientEvents/ESCT_AmbientEventInfo.c", + "Scripts/Game/AmbientEvents/ESCT_AmbientEventPicker.c", + "Scripts/Game/AmbientEvents/ESCT_AmbientSystemConfig.c", + "Scripts/Game/Components/ESCT_AmbientPatrolSpawnPointComponent.c", + "Scripts/Game/Components/ESCT_AmbientVehicleSpawnPointComponent.c", + "Scripts/Game/Components/ESCT_EditableAmbientEventComponent.c", + "Scripts/Game/Components/Locations/ESCT_CivilianPresenceComponent.c", + "Scripts/Game/Enums/AmbientEvent/ESCT_EAmbientEventType.c", + "Scripts/Game/GameMode/Components/ESCT_AmbientVehicleComponent.c", + "Scripts/Game/GameMode/Components/ESCT_CivilianManagerComponent.c", + "Scripts/Game/Systems/ESCT_AmbientEventSystem.c", + "Scripts/Game/Systems/ESCT_AmbientPatrolSystem.c", + "Scripts/Game/Systems/ESCT_AmbientVehicleSystem.c" + ], + "replacement_files": [], + "remaining": "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." + }, + { + "id": "factions", + "title": "Faction, group and asset catalogs", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/EntityCatalog/ESCT_EntityCatalogManagerComponent.c", + "Scripts/Game/EntityCatalog/EntityCatalogEntryData/ESCT_EntityCatalogEntryData.c", + "Scripts/Game/Enums/ESCT_EFactionType.c", + "Scripts/Game/Enums/ESCT_EInsurgentsOption.c", + "Scripts/Game/Enums/ESCT_ELookupExclusionType.c", + "Scripts/Game/Enums/ESCT_EMilitaryBranchType.c", + "Scripts/Game/Enums/ESCT_EUnitRole.c", + "Scripts/Game/Factions/ESCT_Faction.c", + "Scripts/Game/Factions/ESCT_FactionLookupValue.c", + "Scripts/Game/Factions/ESCT_FactionManager.c", + "Scripts/Game/Factions/ESCT_PlayerFactionInfo.c", + "Scripts/Game/Factions/FactionLookup/ESCT_CharacterLookup.c", + "Scripts/Game/Factions/FactionLookup/ESCT_FactionLookup.c", + "Scripts/Game/Factions/FactionLookup/ESCT_GroupLookup.c", + "Scripts/Game/GameMode/Misc/ESCT_MilBranchInfo.c", + "Scripts/Game/Utility/ESCT_EntityCatalogHelper.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c", + "addons/core/Configs/ERR/VanillaFactions.conf" + ], + "remaining": "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." + }, + { + "id": "prison", + "title": "Prison layout, locks and initial equipment", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Actions/ESCT_LockedDoorUserAction.c", + "Scripts/Game/Actions/ESCT_LockpickDoor.c", + "Scripts/Game/Components/ESCT_EquipmentSlotArsenalPrisonComponent.c", + "Scripts/Game/Components/ESCT_LockedDoorComponent.c", + "Scripts/Game/Components/ESCT_PrisonDoorComponent.c", + "Scripts/Game/Components/ESCT_WeaponRackArsenalPrisonComponent.c", + "Scripts/Game/Components/Start/ESCT_PrisonComponent.c", + "Scripts/Game/Components/Start/ESCT_StartAreaComponent.c", + "Scripts/Game/Entities/Locations/ESCT_StartArea.c", + "Scripts/Game/Enums/ESCT_EStartType.c", + "Scripts/Game/GameMode/Misc/ESCT_StartAreaSelector.c", + "Scripts/Game/Tasks/ESCT_LockpickTask.c" + ], + "replacement_files": [ + "addons/core/Prefabs/ERR/Prison.et", + "addons/core/Scripts/Game/ERR/ERR_Actions.c" + ], + "remaining": "Manual access, equipment for twelve players, layouts, threat balance and start placement need validation." + }, + { + "id": "extraction", + "title": "Extraction vehicle and round results", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Components/ESCT_EscapeHelicopterComponent.c", + "Scripts/Game/Entities/Locations/ESCT_Helipad.c", + "Scripts/Game/GameMode/Components/ESCT_WinLoseHandlerComponent.c", + "Scripts/Game/GameOverScreen/ESCT_EGameOverTypes.c", + "Scripts/Game/UI/GameOverScreens/ESCT_GameOverScreenEscapistsUIComponent.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_ExtractionService.c", + "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c", + "addons/core/Configs/ERR/GameOverScreens.conf" + ], + "remaining": "Physical twelve-character occupancy, local identity/results, initial aircraft settling, ground loading and vanilla casualty removal have native evidence. Manual piloting/boarding, real reconnect, empty-server flight, remote rescue contention and loss/restart acceptance remain." + }, + { + "id": "objectives_intel", + "title": "Radio objectives, tasks and discovery", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Actions/ESCT_RadioAction.c", + "Scripts/Game/Actions/ESCT_ReceiveRadioMessageAction.c", + "Scripts/Game/Actions/ESCT_TuneRadioFrequencyAction.c", + "Scripts/Game/Components/ESCT_LocationMapUIComponent.c", + "Scripts/Game/Components/ESCT_StaticInsurgentRadioStationComponent.c", + "Scripts/Game/Components/ESCT_StaticRadioStationComponent.c", + "Scripts/Game/Entities/ESCT_DefendRadioTaskPresentation.c", + "Scripts/Game/Entities/ESCT_Radio.c", + "Scripts/Game/Entities/ESCT_RadioSlotEntity.c", + "Scripts/Game/Entities/Locations/ESCT_RadioStation.c", + "Scripts/Game/GameMode/Components/ESCT_TaskAssignerComponent.c", + "Scripts/Game/Systems/ESCT_KnownLocationsSystem.c", + "Scripts/Game/Tasks/ESCT_DefendRadioTask.c", + "Scripts/Game/Tasks/ESCT_RadioTask.c", + "Scripts/Game/Tasks/ESCT_Task.c", + "Scripts/Game/Tasks/ESCT_TaskInfoConfig.c", + "Scripts/Game/Tasks/ESCT_TriggerTask.c", + "Scripts/Game/UI/Components/ESCT_EscapistsMapUIBase.c", + "Scripts/Game/UI/Escapists/ESCT_MapEscapistsUI.c", + "Scripts/Game/UI/HUD/ESCT_DefendTaskDisplay.c", + "Scripts/Game/Utility/ESCT_TaskFuncs.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_Objectives.c", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c", + "addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c", + "addons/core/Scripts/Game/ERR/ERR_ObjectiveDetails.c" + ], + "remaining": "Independent radio defence and native task-detail refresh are implemented. Validate visible task/map usability, simultaneous real clients, discovery replication and complete manual objective route." + }, + { + "id": "scavenging", + "title": "Physical equipment, storage and scavenging", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Actions/ESCT_OpenVehicleStorageAction.c", + "Scripts/Game/Actions/ESCT_ResourceContainerVehicleLoadAction.c", + "Scripts/Game/Actions/ESCT_ResourceContainerVehicleUnloadAction.c", + "Scripts/Game/Actions/ESCT_ResourceEntityRefundAction.c", + "Scripts/Game/Components/ESCT_EditableStorageComponent.c", + "Scripts/Game/Components/ESCT_EditableVehicleStorageComponent.c", + "Scripts/Game/Components/ESCT_EquipmentSlotArsenalComponent.c", + "Scripts/Game/Components/ESCT_LocationStorageComponent.c", + "Scripts/Game/Components/ESCT_StorageArsenalComponent.c", + "Scripts/Game/Components/ESCT_WeaponRackArsenalComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationStorageManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationWeaponRackManagerComponent.c", + "Scripts/Game/Entities/ESCT_EquipmentSlotEntity.c", + "Scripts/Game/Entities/ESCT_StorageSlotEntity.c", + "Scripts/Game/Entities/ESCT_WeaponRack.c", + "Scripts/Game/Entities/ESCT_WeaponRackSlotEntity.c", + "Scripts/Game/Enums/ESCT_EMilitaryCrateType.c", + "Scripts/Game/GameMode/Loadout/ESCT_EArsenalGameModeType.c", + "Scripts/Game/GameMode/Misc/ESCT_EquipmentInfo.c", + "Scripts/Game/Misc/ESCT_ArsenalItem.c", + "Scripts/Game/Misc/ESCT_ArsenalItemDisplayData.c", + "Scripts/Game/State/ESCT_EquipmentSlotState.c", + "Scripts/Game/State/ESCT_StorageState.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_SiteService.c", + "addons/core/Prefabs/ERR/SupplyCache.et" + ], + "remaining": "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." + }, + { + "id": "vehicles", + "title": "Usable vehicles, locks, alarms and navigation", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Actions/ESCT_BreakIntoVehicleAction.c", + "Scripts/Game/Actions/ESCT_CompartmentHoldAction.c", + "Scripts/Game/Actions/ESCT_GetInUserAction.c", + "Scripts/Game/Actions/ESCT_OpenVehicleDoorUserAction.c", + "Scripts/Game/Components/ESCT_CarAlarmComponent.c", + "Scripts/Game/Components/ESCT_CharacterSpawnVehicleAssistantComponent.c", + "Scripts/Game/Components/ESCT_VehicleForceEjectComponent.c", + "Scripts/Game/Components/ESCT_VehicleOccupantReactionComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationVehicleManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationVehiclePatrolManagerComponent.c", + "Scripts/Game/Entities/ESCT_VehicleSpawnPoint.c", + "Scripts/Game/Global/ESCT_VehicleDirector.c", + "Scripts/Game/Misc/ESCT_VehicleHitZone.c", + "Scripts/Game/State/ESCT_PatrolVehicleState.c", + "Scripts/Game/State/ESCT_VehicleSpawnPointState.c", + "Scripts/Game/Utility/ESCT_RoadNavigation.c", + "Scripts/Game/Vehicle/ESCT_VehicleControllerComponent.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_SiteService.c", + "docs/ground-transport.md" + ], + "remaining": "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." + }, + { + "id": "population", + "title": "Locations, compositions and population ownership", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Components/ESCT_LocationItemComponent.c", + "Scripts/Game/Components/ESCT_LocationPatrollerComponent.c", + "Scripts/Game/Components/ESCT_PopulatedBuildingComponent.c", + "Scripts/Game/Components/ESCT_StaticLocationComponent.c", + "Scripts/Game/Components/ESCT_StaticOutpostComponent.c", + "Scripts/Game/Components/Locations/CompositionComponents/ESCT_CheckpointCompositionComponent.c", + "Scripts/Game/Components/Locations/CompositionComponents/ESCT_LocationCompositionComponent.c", + "Scripts/Game/Components/Locations/ESCT_BaseCharacterManager.c", + "Scripts/Game/Components/Locations/ESCT_LocationCharacterManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationItemManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationMilBuildingManager.c", + "Scripts/Game/Components/Locations/ESCT_LocationPatrolManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationTurretManagerComponent.c", + "Scripts/Game/Entities/ESCT_DisableLocationEntity.c", + "Scripts/Game/Entities/ESCT_RandomLocationHolder.c", + "Scripts/Game/Entities/Locations/ESCT_Checkpoint.c", + "Scripts/Game/Entities/Locations/ESCT_City.c", + "Scripts/Game/Entities/Locations/ESCT_Location.c", + "Scripts/Game/Entities/Locations/ESCT_LocationBase.c", + "Scripts/Game/Enums/ESCT_ELocationSpawnReason.c", + "Scripts/Game/Enums/ESCT_ELocationType.c", + "Scripts/Game/GameMode/Misc/ESCT_LocationConfig.c", + "Scripts/Game/GameMode/Misc/ESCT_LocationPreparer.c", + "Scripts/Game/LocationState/ESCT_EntityState.c", + "Scripts/Game/LocationState/ESCT_LocationState.c", + "Scripts/Game/Misc/ESCT_LocationPatrolPoint.c", + "Scripts/Game/State/ESCT_CharacterState.c", + "Scripts/Game/Systems/ESCT_LocationStateSystem.c", + "Scripts/Game/Systems/ESCT_LocationSystem.c", + "Scripts/Game/Utility/ESCT_LocationCatalog.c", + "Scripts/Game/Utility/ESCT_LocationFuncs.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_SiteDefinition.c", + "addons/core/Scripts/Game/ERR/ERR_SiteService.c", + "addons/core/Prefabs/ERR/FieldCover.et" + ], + "remaining": "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." + }, + { + "id": "lifecycle", + "title": "Player identity, spawning and reconnect", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Character/ESCT_CharacterControllerComponent.c", + "Scripts/Game/Character/ESCT_ChimeraCharacter.c", + "Scripts/Game/Components/ESCT_CharacterInitComponent.c", + "Scripts/Game/Components/ESCT_SpawnPosition.c", + "Scripts/Game/Components/PlayerController/ESCT_EscapistsNetworkComponent.c", + "Scripts/Game/Entities/ESCT_CharacterSpawnPoint.c", + "Scripts/Game/Entities/ESCT_SpawnPoint.c", + "Scripts/Game/Enums/ESCT_ESpawnState.c", + "Scripts/Game/GameMode/Components/ESCT_OrphanEscapistHandlerComponent.c", + "Scripts/Game/GameMode/Components/ESCT_SpawnLogic.c", + "Scripts/Game/GameMode/Misc/ESCT_TrackablePlayer.c", + "Scripts/Game/Global/ESCT_CharacterHelper.c", + "Scripts/Game/Global/ESCT_Player.c", + "Scripts/Game/Global/ESCT_SpawnHelpers.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c", + "addons/core/Scripts/Game/ERR/ERR_SpawnLogic.c", + "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." + }, + { + "id": "setup", + "title": "Mission setup, configuration and administration", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Enums/ESCT_EEditableEntityLabel.c", + "Scripts/Game/GameMode/Components/ESCT_EscapistsConfigComponent.c", + "Scripts/Game/GameMode/Misc/ESCT_GeneralConfig.c", + "Scripts/Game/Misc/ESCT_EditableLabelConfig.c", + "Scripts/Game/Misc/ESCT_MissionHeader.c", + "Scripts/Game/Misc/ESCT_SetupConfig.c", + "Scripts/Game/Misc/ESCT_Skill.c", + "Scripts/Game/UI/Components/ESCT_SliderComponent.c", + "Scripts/Game/UI/Components/ESCT_SpinboxComponent.c", + "Scripts/Game/UI/Components/ESCT_ToolboxComponent.c", + "Scripts/Game/UI/Menus/ESCT_ClientWaitScreen.c", + "Scripts/Game/UI/Menus/ESCT_SetupMenu.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_DifficultyTab.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_MainTab.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_MenuTabBase.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_MiscTab.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_AdminService.c", + "addons/core/Scripts/Game/ERR/ERR_Settings.c" + ], + "remaining": "Core administration/settings and saved environment changes pass local native checks, including two restart rounds. Complete ordinary startup/admission, remote authorization, player-facing pre-round setup and difficulty choices." + }, + { + "id": "mission", + "title": "Mission state, restart and base framework", + "scope": "first-release", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Enums/ESCT_EGameState.c", + "Scripts/Game/GameMode/Components/ESCT_GameModeBaseComponent.c", + "Scripts/Game/GameMode/Components/ESCT_GameStartComponent.c", + "Scripts/Game/GameMode/Components/ESCT_GameStateManagerComponent.c", + "Scripts/Game/GameMode/Components/ESCT_RestartTimeoutComponent.c", + "Scripts/Game/GameMode/ESCT_EscapistsGameMode.c", + "Scripts/Game/GameMode/ESCT_EscapistsManager.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_GameMode.c", + "addons/core/Scripts/Game/ERR/ERR_MissionRules.c" + ], + "remaining": "Separate remaining objective/lifecycle policies, test mission failure reporting and multiplayer restart/cleanup." + }, + { + "id": "utilities", + "title": "General helpers, editor labels and shared types", + "scope": "review", + "status": "partial", + "original_scripts": [ + "Scripts/Game/Actions/ESCT_DisableAudioWarningAction.c", + "Scripts/Game/Actions/ESCT_HoldAction.c", + "Scripts/Game/ESCT_Constants.c", + "Scripts/Game/Enums/ESCT_EEditorMode.c", + "Scripts/Game/Enums/ESCT_EGroupSize.c", + "Scripts/Game/Global/ESCT_ActionHelper.c", + "Scripts/Game/Global/ESCT_ComponentHelper.c", + "Scripts/Game/Global/ESCT_EntityHelper.c", + "Scripts/Game/Global/ESCT_GroupHelper.c", + "Scripts/Game/Global/ESCT_Identifier.c", + "Scripts/Game/Global/ESCT_Logger.c", + "Scripts/Game/Global/ESCT_Misc.c", + "Scripts/Game/Misc/ESCT_BoolValue.c", + "Scripts/Game/Misc/ESCT_CameraPosition.c", + "Scripts/Game/Misc/ESCT_EntitySearch.c", + "Scripts/Game/Misc/ESCT_FloatVal.c", + "Scripts/Game/Misc/ESCT_IntVal.c", + "Scripts/Game/Misc/ESCT_MilBuildingSearch.c", + "Scripts/Game/Misc/ESCT_TargetSearch.c", + "Scripts/Game/Utility/ESCT_CumulativeWeightPicker.c", + "Scripts/Game/Utility/ESCT_DisplayFuncs.c", + "Scripts/Game/Utility/ESCT_Math.c", + "Scripts/Game/Utility/ESCT_UI.c" + ], + "replacement_files": [ + "addons/core/Scripts/Game/ERR/ERR_Actors.c" + ], + "remaining": "Use vanilla utilities or small independent helpers as each consumer is replaced. A filename match does not establish equivalent behavior." + } + ], + "resource_work": "The 474 original prefabs, 31 layers, 24 layouts, six worlds and other original resources are not included. Author required replacements using vanilla assets; resource counts do not imply one-for-one replacements." +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.md new file mode 100644 index 0000000..47c3c32 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-feature-coverage.md @@ -0,0 +1,28 @@ +# Original feature coverage + +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. + +| Responsibility | State | Original scripts | Remaining work | +| --- | --- | ---: | --- | +| Helicopter-crash and hideout starts | pending (later) | 4 | Author separate layouts and progression rules after the prison release. | +| Spectators and follow cameras | partial (first-release) | 10 | Verify remote streaming, target changes, death/reconnect and camera presentation on real clients. | +| 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. Complete support scheduling, mortar firing, aircraft, transport/rearming and losses without spawning responses. | +| 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. | +| Extraction vehicle and round results | partial (first-release) | 5 | Physical twelve-character occupancy, local identity/results, initial aircraft settling, ground loading and vanilla casualty removal have native evidence. Manual piloting/boarding, real reconnect, empty-server flight, remote rescue contention and loss/restart acceptance remain. | +| Radio objectives, tasks and discovery | partial (first-release) | 21 | Independent radio defence and native task-detail refresh are implemented. Validate visible task/map usability, simultaneous real clients, discovery replication and complete manual objective route. | +| 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. | +| Mission setup, configuration and administration | partial (first-release) | 16 | Core administration/settings and saved environment changes pass local native checks, including two restart rounds. Complete ordinary startup/admission, 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. | + +The original’s world compositions, UI resources and audio are not migration inputs. The successor requires newly authored replacements or vanilla systems. The inventory does not grant permission to reuse them. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-resource-inventory.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-resource-inventory.json new file mode 100644 index 0000000..d59ccb2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/original-resource-inventory.json @@ -0,0 +1,335 @@ +{ + "scope": "Read-only installed original package path inventory; no original source or resource contents copied. Names identify replacement responsibilities, not licensed migration inputs.", + "addon_guid": "5F16D7E4A1CBE075", + "total_paths": 35699, + "resource_counts_by_extension": { + ".acp": 16, + ".bt": 2, + ".c": 299, + ".conf": 89, + ".edds": 45, + ".emat": 12, + ".ent": 6, + ".et": 474, + ".imageset": 1, + ".layer": 31, + ".layout": 24, + ".nmn": 18, + ".ntile": 34672, + ".ptc": 2, + ".sig": 2, + ".wav": 6 + }, + "script_paths": [ + "Scripts/Game/AI/Behavior/ActivityFeatures/ESCT_AIActivityCallForSupportFeature.c", + "Scripts/Game/AI/Behavior/ActivityFeatures/ESCT_AIActivityIllumFlareFeature.c", + "Scripts/Game/AI/Behavior/ESCT_AICallForSupportActivity.c", + "Scripts/Game/AI/Behavior/ESCT_AICallSupportToBehavior.c", + "Scripts/Game/AI/Behavior/ESCT_AIVehicleBehavior.c", + "Scripts/Game/AI/Components/ESCT_AIGroupInfoComponent.c", + "Scripts/Game/AI/Components/ESCT_AIGroupUtilityComponent.c", + "Scripts/Game/AI/Reaction/ESCT_AIGoalReaction.c", + "Scripts/Game/AI/ScriptedNodes/Conditions/ESCT_AIDecoIsSunset.c", + "Scripts/Game/AI/ScriptedNodes/Generated/EscapistsSendGoalMessage.c", + "Scripts/Game/AI/ScriptedNodes/Generated/EscapistsSendInfoMessage.c", + "Scripts/Game/AI/ScriptedNodes/Generated/EscapistsSendOrder.c", + "Scripts/Game/AI/ScriptedNodes/Groups/ESCT_AICallSupport.c", + "Scripts/Game/AI/ScriptedNodes/Groups/ESCT_AICallSupportTo.c", + "Scripts/Game/AI/ScriptedNodes/Messages/ESCT_AIMessage.c", + "Scripts/Game/Actions/ESCT_BreakIntoVehicleAction.c", + "Scripts/Game/Actions/ESCT_CompartmentHoldAction.c", + "Scripts/Game/Actions/ESCT_DisableAudioWarningAction.c", + "Scripts/Game/Actions/ESCT_GetInUserAction.c", + "Scripts/Game/Actions/ESCT_HoldAction.c", + "Scripts/Game/Actions/ESCT_LightUserAction.c", + "Scripts/Game/Actions/ESCT_LoadCasualtyVehicleUserAction.c", + "Scripts/Game/Actions/ESCT_LockedDoorUserAction.c", + "Scripts/Game/Actions/ESCT_LockpickDoor.c", + "Scripts/Game/Actions/ESCT_OpenVehicleDoorUserAction.c", + "Scripts/Game/Actions/ESCT_OpenVehicleStorageAction.c", + "Scripts/Game/Actions/ESCT_RadioAction.c", + "Scripts/Game/Actions/ESCT_ReceiveRadioMessageAction.c", + "Scripts/Game/Actions/ESCT_ResourceContainerVehicleLoadAction.c", + "Scripts/Game/Actions/ESCT_ResourceContainerVehicleUnloadAction.c", + "Scripts/Game/Actions/ESCT_ResourceEntityRefundAction.c", + "Scripts/Game/Actions/ESCT_SwitchLightUserAction.c", + "Scripts/Game/Actions/ESCT_TuneRadioFrequencyAction.c", + "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_AmbientEventBase.c", + "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_HeliFlybyEvent.c", + "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_VehiclePatrolEvent.c", + "Scripts/Game/AmbientEvents/ESCT_AmbientEventInfo.c", + "Scripts/Game/AmbientEvents/ESCT_AmbientEventPicker.c", + "Scripts/Game/AmbientEvents/ESCT_AmbientSystemConfig.c", + "Scripts/Game/Camera/Components/ESCT_AssignTargetManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_AttachToPlayerManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_LookAtTargetManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_OrbitDistanceManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_OrbitPlayerManualCameraComponent.c", + "Scripts/Game/Camera/Components/ESCT_SpectatorUIManualCameraComponent.c", + "Scripts/Game/Character/ESCT_CharacterControllerComponent.c", + "Scripts/Game/Character/ESCT_ChimeraCharacter.c", + "Scripts/Game/Components/Damage/ESCT_HelicopterDamageManagerComponent.c", + "Scripts/Game/Components/ESCT_AmbientPatrolSpawnPointComponent.c", + "Scripts/Game/Components/ESCT_AmbientVehicleSpawnPointComponent.c", + "Scripts/Game/Components/ESCT_BarrelDamageManager.c", + "Scripts/Game/Components/ESCT_BarrelSoundEffectComponent.c", + "Scripts/Game/Components/ESCT_CarAlarmComponent.c", + "Scripts/Game/Components/ESCT_CharacterInitComponent.c", + "Scripts/Game/Components/ESCT_CharacterSpawnVehicleAssistantComponent.c", + "Scripts/Game/Components/ESCT_EditableAmbientEventComponent.c", + "Scripts/Game/Components/ESCT_EditableStorageComponent.c", + "Scripts/Game/Components/ESCT_EditableSupportComponent.c", + "Scripts/Game/Components/ESCT_EditableVehicleStorageComponent.c", + "Scripts/Game/Components/ESCT_EquipmentSlotArsenalComponent.c", + "Scripts/Game/Components/ESCT_EquipmentSlotArsenalPrisonComponent.c", + "Scripts/Game/Components/ESCT_EscapeHelicopterComponent.c", + "Scripts/Game/Components/ESCT_HelicrashHelicopterComponent.c", + "Scripts/Game/Components/ESCT_IndoorLampComponent.c", + "Scripts/Game/Components/ESCT_IndoorLampSwitchProxyComponent.c", + "Scripts/Game/Components/ESCT_LocationItemComponent.c", + "Scripts/Game/Components/ESCT_LocationMapUIComponent.c", + "Scripts/Game/Components/ESCT_LocationPatrollerComponent.c", + "Scripts/Game/Components/ESCT_LocationStorageComponent.c", + "Scripts/Game/Components/ESCT_LockedDoorComponent.c", + "Scripts/Game/Components/ESCT_MedicalStorageArsenalComponent.c", + "Scripts/Game/Components/ESCT_PlayerDamageManagerComponent.c", + "Scripts/Game/Components/ESCT_PopulatedBuildingComponent.c", + "Scripts/Game/Components/ESCT_PrisonDoorComponent.c", + "Scripts/Game/Components/ESCT_SpawnPosition.c", + "Scripts/Game/Components/ESCT_StaticHospitalComponent.c", + "Scripts/Game/Components/ESCT_StaticInsurgentRadioStationComponent.c", + "Scripts/Game/Components/ESCT_StaticLocationComponent.c", + "Scripts/Game/Components/ESCT_StaticOutpostComponent.c", + "Scripts/Game/Components/ESCT_StaticRadioStationComponent.c", + "Scripts/Game/Components/ESCT_StorageArsenalComponent.c", + "Scripts/Game/Components/ESCT_SupportCallerComponent.c", + "Scripts/Game/Components/ESCT_VehicleForceEjectComponent.c", + "Scripts/Game/Components/ESCT_VehicleOccupantReactionComponent.c", + "Scripts/Game/Components/ESCT_WeaponRackArsenalComponent.c", + "Scripts/Game/Components/ESCT_WeaponRackArsenalPrisonComponent.c", + "Scripts/Game/Components/Editor/ESCT_SpectatorMenuLayoutEditorComponent.c", + "Scripts/Game/Components/FlareMine/ESCT_ProjectileSpawnerComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliBehaviourBaseComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliFlyByComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliLoiterComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliStrikeFireComponent.c", + "Scripts/Game/Components/Heli/ESCT_HeliStrikeMovementComponent.c", + "Scripts/Game/Components/Locations/CompositionComponents/ESCT_CheckpointCompositionComponent.c", + "Scripts/Game/Components/Locations/CompositionComponents/ESCT_LocationCompositionComponent.c", + "Scripts/Game/Components/Locations/ESCT_BaseCharacterManager.c", + "Scripts/Game/Components/Locations/ESCT_CivilianPresenceComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationCharacterManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationItemManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationMilBuildingManager.c", + "Scripts/Game/Components/Locations/ESCT_LocationPatrolManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationStorageManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationTurretManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationVehicleManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationVehiclePatrolManagerComponent.c", + "Scripts/Game/Components/Locations/ESCT_LocationWeaponRackManagerComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_EscapistsFeedbackComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_EscapistsNetworkComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_SpectatorComponent.c", + "Scripts/Game/Components/PlayerController/ESCT_WithstandComponent.c", + "Scripts/Game/Components/Radio/ESCT_RadioSoundComponent.c", + "Scripts/Game/Components/Start/ESCT_HelicrashStartComponent.c", + "Scripts/Game/Components/Start/ESCT_HideoutStartComponent.c", + "Scripts/Game/Components/Start/ESCT_PrisonComponent.c", + "Scripts/Game/Components/Start/ESCT_StartAreaComponent.c", + "Scripts/Game/Components/SupportStations/ESCT_LoadCasualtyVehicleSupportStationComponent.c", + "Scripts/Game/ESCT_Constants.c", + "Scripts/Game/Editor/Containers/Actions/ESCT_ToggleLocalEditorLimitedNightModeToolbarAction.c", + "Scripts/Game/EffectModule/ESCT_RocketBarrageEffectsModule.c", + "Scripts/Game/Entities/ESCT_AIGroup.c", + "Scripts/Game/Entities/ESCT_CharacterSpawnPoint.c", + "Scripts/Game/Entities/ESCT_DefendRadioTaskPresentation.c", + "Scripts/Game/Entities/ESCT_DisableLocationEntity.c", + "Scripts/Game/Entities/ESCT_EquipmentSlotEntity.c", + "Scripts/Game/Entities/ESCT_HelicrashLocationHolder.c", + "Scripts/Game/Entities/ESCT_Radio.c", + "Scripts/Game/Entities/ESCT_RadioSlotEntity.c", + "Scripts/Game/Entities/ESCT_RandomLocationHolder.c", + "Scripts/Game/Entities/ESCT_SpawnPoint.c", + "Scripts/Game/Entities/ESCT_StorageSlotEntity.c", + "Scripts/Game/Entities/ESCT_VehicleSpawnPoint.c", + "Scripts/Game/Entities/ESCT_WeaponRack.c", + "Scripts/Game/Entities/ESCT_WeaponRackSlotEntity.c", + "Scripts/Game/Entities/Locations/ESCT_Checkpoint.c", + "Scripts/Game/Entities/Locations/ESCT_City.c", + "Scripts/Game/Entities/Locations/ESCT_Helipad.c", + "Scripts/Game/Entities/Locations/ESCT_Location.c", + "Scripts/Game/Entities/Locations/ESCT_LocationBase.c", + "Scripts/Game/Entities/Locations/ESCT_RadioStation.c", + "Scripts/Game/Entities/Locations/ESCT_StartArea.c", + "Scripts/Game/EntityCatalog/ESCT_EntityCatalogManagerComponent.c", + "Scripts/Game/EntityCatalog/EntityCatalogEntryData/ESCT_EntityCatalogEntryData.c", + "Scripts/Game/Enums/AmbientEvent/ESCT_EAmbientEventType.c", + "Scripts/Game/Enums/ESCT_EEditableEntityLabel.c", + "Scripts/Game/Enums/ESCT_EEditorMode.c", + "Scripts/Game/Enums/ESCT_EFactionType.c", + "Scripts/Game/Enums/ESCT_EGameState.c", + "Scripts/Game/Enums/ESCT_EGroupSize.c", + "Scripts/Game/Enums/ESCT_EHealthType.c", + "Scripts/Game/Enums/ESCT_EInsurgentsOption.c", + "Scripts/Game/Enums/ESCT_ELocationSpawnReason.c", + "Scripts/Game/Enums/ESCT_ELocationType.c", + "Scripts/Game/Enums/ESCT_ELookupExclusionType.c", + "Scripts/Game/Enums/ESCT_EMilitaryBranchType.c", + "Scripts/Game/Enums/ESCT_EMilitaryCrateType.c", + "Scripts/Game/Enums/ESCT_ESpawnState.c", + "Scripts/Game/Enums/ESCT_EStartType.c", + "Scripts/Game/Enums/ESCT_ESupportStationType.c", + "Scripts/Game/Enums/ESCT_EUnitRole.c", + "Scripts/Game/Enums/Support/ESCT_ESupportState.c", + "Scripts/Game/Enums/Support/ESCT_ESupportType.c", + "Scripts/Game/Factions/ESCT_Faction.c", + "Scripts/Game/Factions/ESCT_FactionLookupValue.c", + "Scripts/Game/Factions/ESCT_FactionManager.c", + "Scripts/Game/Factions/ESCT_PlayerFactionInfo.c", + "Scripts/Game/Factions/FactionLookup/ESCT_CharacterLookup.c", + "Scripts/Game/Factions/FactionLookup/ESCT_FactionLookup.c", + "Scripts/Game/Factions/FactionLookup/ESCT_GroupLookup.c", + "Scripts/Game/GameMode/Components/ESCT_AmbientCameraDirectorComponent.c", + "Scripts/Game/GameMode/Components/ESCT_AmbientVehicleComponent.c", + "Scripts/Game/GameMode/Components/ESCT_CivilianManagerComponent.c", + "Scripts/Game/GameMode/Components/ESCT_EscapistsConfigComponent.c", + "Scripts/Game/GameMode/Components/ESCT_GameModeBaseComponent.c", + "Scripts/Game/GameMode/Components/ESCT_GameStartComponent.c", + "Scripts/Game/GameMode/Components/ESCT_GameStateManagerComponent.c", + "Scripts/Game/GameMode/Components/ESCT_OrphanEscapistHandlerComponent.c", + "Scripts/Game/GameMode/Components/ESCT_RestartTimeoutComponent.c", + "Scripts/Game/GameMode/Components/ESCT_SpawnLogic.c", + "Scripts/Game/GameMode/Components/ESCT_TaskAssignerComponent.c", + "Scripts/Game/GameMode/Components/ESCT_VoiceoverComponent.c", + "Scripts/Game/GameMode/Components/ESCT_WaypointManager.c", + "Scripts/Game/GameMode/Components/ESCT_WinLoseHandlerComponent.c", + "Scripts/Game/GameMode/ESCT_EscapistsGameMode.c", + "Scripts/Game/GameMode/ESCT_EscapistsManager.c", + "Scripts/Game/GameMode/ESCT_NightModeGameModeComponent.c", + "Scripts/Game/GameMode/Loadout/ESCT_EArsenalGameModeType.c", + "Scripts/Game/GameMode/Misc/ESCT_EquipmentInfo.c", + "Scripts/Game/GameMode/Misc/ESCT_GeneralConfig.c", + "Scripts/Game/GameMode/Misc/ESCT_LocationConfig.c", + "Scripts/Game/GameMode/Misc/ESCT_LocationPreparer.c", + "Scripts/Game/GameMode/Misc/ESCT_MilBranchInfo.c", + "Scripts/Game/GameMode/Misc/ESCT_StartAreaSelector.c", + "Scripts/Game/GameMode/Misc/ESCT_TimeOfDay.c", + "Scripts/Game/GameMode/Misc/ESCT_TrackablePlayer.c", + "Scripts/Game/GameOverScreen/ESCT_EGameOverTypes.c", + "Scripts/Game/Global/ESCT_ActionHelper.c", + "Scripts/Game/Global/ESCT_CharacterHelper.c", + "Scripts/Game/Global/ESCT_ComponentHelper.c", + "Scripts/Game/Global/ESCT_EntityHelper.c", + "Scripts/Game/Global/ESCT_GroupHelper.c", + "Scripts/Game/Global/ESCT_Identifier.c", + "Scripts/Game/Global/ESCT_Logger.c", + "Scripts/Game/Global/ESCT_Misc.c", + "Scripts/Game/Global/ESCT_Player.c", + "Scripts/Game/Global/ESCT_SpawnHelpers.c", + "Scripts/Game/Global/ESCT_VehicleDirector.c", + "Scripts/Game/LocationState/ESCT_EntityState.c", + "Scripts/Game/LocationState/ESCT_LocationState.c", + "Scripts/Game/Misc/ESCT_AirstrikeConfig.c", + "Scripts/Game/Misc/ESCT_ArsenalItem.c", + "Scripts/Game/Misc/ESCT_ArsenalItemDisplayData.c", + "Scripts/Game/Misc/ESCT_BarrelFlammableHitZone.c", + "Scripts/Game/Misc/ESCT_BoolValue.c", + "Scripts/Game/Misc/ESCT_CameraPosition.c", + "Scripts/Game/Misc/ESCT_EditableLabelConfig.c", + "Scripts/Game/Misc/ESCT_EntitySearch.c", + "Scripts/Game/Misc/ESCT_EscapistsHint.c", + "Scripts/Game/Misc/ESCT_FloatVal.c", + "Scripts/Game/Misc/ESCT_Health.c", + "Scripts/Game/Misc/ESCT_IntVal.c", + "Scripts/Game/Misc/ESCT_LocationPatrolPoint.c", + "Scripts/Game/Misc/ESCT_MilBuildingSearch.c", + "Scripts/Game/Misc/ESCT_MissionHeader.c", + "Scripts/Game/Misc/ESCT_PlayerHitZone.c", + "Scripts/Game/Misc/ESCT_SetupConfig.c", + "Scripts/Game/Misc/ESCT_Skill.c", + "Scripts/Game/Misc/ESCT_TargetSearch.c", + "Scripts/Game/Misc/ESCT_VehicleHitZone.c", + "Scripts/Game/Misc/ESCT_Weather.c", + "Scripts/Game/Music/ESCT_ApproachHelipadMusic.c", + "Scripts/Game/Music/ESCT_DefendRadioMusic.c", + "Scripts/Game/Music/ESCT_FlyAwayMusic.c", + "Scripts/Game/State/ESCT_CharacterState.c", + "Scripts/Game/State/ESCT_EquipmentSlotState.c", + "Scripts/Game/State/ESCT_PatrolVehicleState.c", + "Scripts/Game/State/ESCT_StorageState.c", + "Scripts/Game/State/ESCT_VehicleSpawnPointState.c", + "Scripts/Game/Support/ESCT_SupportInfo.c", + "Scripts/Game/Support/ESCT_SupportPicker.c", + "Scripts/Game/Support/ESCT_SupportPresentationConfig.c", + "Scripts/Game/Support/ESCT_SupportSystemConfig.c", + "Scripts/Game/Support/SupportTypes/ESCT_HeliLoiterSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_HeliStrikeSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_IlluminationMortarBarrageSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_LightVehicleSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_MortarBarrageBase.c", + "Scripts/Game/Support/SupportTypes/ESCT_MortarBarrageSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_QRFSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_QRFVehicleSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_RocketArtillerySupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_SmokeMortarBarrageSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_SpecOpsSupport.c", + "Scripts/Game/Support/SupportTypes/ESCT_SupportBase.c", + "Scripts/Game/Systems/ESCT_AmbientEventSystem.c", + "Scripts/Game/Systems/ESCT_AmbientPatrolSystem.c", + "Scripts/Game/Systems/ESCT_AmbientVehicleSystem.c", + "Scripts/Game/Systems/ESCT_KnownLocationsSystem.c", + "Scripts/Game/Systems/ESCT_LocationStateSystem.c", + "Scripts/Game/Systems/ESCT_LocationSystem.c", + "Scripts/Game/Systems/ESCT_SupportSystem.c", + "Scripts/Game/Systems/ESCT_VoiceoverSystem.c", + "Scripts/Game/Tasks/ESCT_DefendRadioTask.c", + "Scripts/Game/Tasks/ESCT_LockpickTask.c", + "Scripts/Game/Tasks/ESCT_RadioTask.c", + "Scripts/Game/Tasks/ESCT_Task.c", + "Scripts/Game/Tasks/ESCT_TaskInfoConfig.c", + "Scripts/Game/Tasks/ESCT_TriggerTask.c", + "Scripts/Game/Tasks/SupportEntities/ESCT_BaseTaskSupportEntity.c", + "Scripts/Game/Tasks/SupportEntities/ESCT_DefendRadioTaskSupportEntity.c", + "Scripts/Game/ThreatAssessment/ESCT_ThreatAssessmentConfig.c", + "Scripts/Game/UI/Components/ESCT_EscapistsMapUIBase.c", + "Scripts/Game/UI/Components/ESCT_SliderComponent.c", + "Scripts/Game/UI/Components/ESCT_SpinboxComponent.c", + "Scripts/Game/UI/Components/ESCT_ToolboxComponent.c", + "Scripts/Game/UI/Escapists/ESCT_MapEscapistsUI.c", + "Scripts/Game/UI/GameOverScreens/ESCT_GameOverScreenEscapistsUIComponent.c", + "Scripts/Game/UI/HUD/ESCT_DefendTaskDisplay.c", + "Scripts/Game/UI/HUD/ESCT_UnconsciousInfoDisplay.c", + "Scripts/Game/UI/Menus/ESCT_ClientWaitScreen.c", + "Scripts/Game/UI/Menus/ESCT_SetupMenu.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_DifficultyTab.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_EnvironmentTab.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_MainTab.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_MenuTabBase.c", + "Scripts/Game/UI/Menus/SetupMenuTabs/ESCT_MiscTab.c", + "Scripts/Game/UI/ScreenEffects/ESCT_SpectatorBleedingScreenEffect.c", + "Scripts/Game/Utility/ESCT_CumulativeWeightPicker.c", + "Scripts/Game/Utility/ESCT_DisplayFuncs.c", + "Scripts/Game/Utility/ESCT_EntityCatalogHelper.c", + "Scripts/Game/Utility/ESCT_GroupDirector.c", + "Scripts/Game/Utility/ESCT_LocationCatalog.c", + "Scripts/Game/Utility/ESCT_LocationFuncs.c", + "Scripts/Game/Utility/ESCT_Math.c", + "Scripts/Game/Utility/ESCT_RoadNavigation.c", + "Scripts/Game/Utility/ESCT_TaskFuncs.c", + "Scripts/Game/Utility/ESCT_UI.c", + "Scripts/Game/VON/ESCT_VONController.c", + "Scripts/Game/Vehicle/ESCT_VehicleControllerComponent.c" + ], + "installed_package_metadata": { + "id": "5F16D7E4A1CBE075", + "name": "Escapists", + "version": "1.6.30", + "game_version": "1.8.0.10", + "dependency_ids": [ + "66AAB0873717CEF0", + "66AD0B6D6E7A6A97" + ] + }, + "package_index_source": "Escapists_5F16D7E4A1CBE075/data.pak" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/performance-comparison.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/performance-comparison.md new file mode 100644 index 0000000..bc5ef1f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/performance-comparison.md @@ -0,0 +1,91 @@ +# Equivalent-workload performance comparison + +`tools/compare_performance.py` validates and summarizes supplied CSV recordings. It does not collect frames, run an engine, authenticate measurements, demonstrate a faster successor, or grant acceptance. No real measurements accompany this tool. Its regression inputs are explicitly synthetic and exist only in temporary test directories. + +Run: + +```sh +python3 tools/compare_performance.py path/to/comparison.json > path/to/comparison-report.json +python3 tests/test_performance_comparison.py +``` + +Invalid or incomplete input exits with status 2 and a reason on stderr. A valid arithmetic report exits 0, with `acceptance: "not_evaluated"` regardless of measured/synthetic origin or positive/negative differences. Do not overwrite your manifest or CSV inputs by redirecting output to them. + +## Collect real recordings later + +Use the same hardware, engine version, capture tool/version, renderer/display mode, settings, map, timed route, player count, physical AI count, vehicle count and total entity count for both variants. Record the original scenario and successor's addon IDs and exact revision/build identity separately. Keep other workloads stable and document relevant drivers, CPU/power settings, resolution, graphics quality, VSync, frame cap, simulation settings, network topology and server settings in the settings object. Version the route specification, camera path and timing; use that stable route ID in metadata. A shared route name without a reproducible route is insufficient evidence. + +Collect at least three independently executed paired repeats, alternating which variant runs first. Each capture must include at least 30 seconds of warm-up and 60 seconds of measurement, with identical declared durations across all runs. Hold declared populations constant during warm-up and measurement. Record every frame/tick, elapsed interval, current populations and AI simulation duration using the same profiler/instrumentation. Preserve raw capture files, full logs and collection notes next to the normalized CSVs. If the available profiler cannot export AI load and populations with each interval, add or choose suitable instrumentation before using this schema; do not fill the columns with guesses, interpolate missing frames, or manufacture stable counts. + +Client frame-time comparisons and dedicated server tick comparisons are separate datasets. Their interval rates are both expressed per second in the report, but server tick rate is not rendered client FPS. Headless Workbench may only be compared against identically configured headless Workbench; such results cannot establish ordinary-client performance. The current scripted hidden fixtures teleport actors and use a capped renderer, so their existing logs are not suitable benchmark inputs. + +An offline metadata check cannot prove that two captures are authentic or that all meaningful conditions were held constant. Review raw captures, population traces, route adherence, variance and repeatability before any performance acceptance decision. Positive deltas alone do not establish statistical significance. Keep the performance acceptance gate pending until real equivalent workloads have been measured and reviewed. + +## Manifest schema, version 1 + +The top-level JSON object has exactly `schema_version` (integer 1), `sample_origin` (`"synthetic"` or `"measured"`) and `runs` (array). Each repeat ID must appear exactly twice: once as `baseline`, once as `successor`; at least three paired IDs are required. Use `"measured"` only for actual captured intervals. Duplicate JSON keys, non-finite values, missing/extra schema fields, reused CSV paths, changing build/addon identities within a variant and unequal conditions are rejected. + +Each entry in `runs` has this shape. This is an illustrative record, **not a measurement or a complete accepted manifest**; replace placeholders with collection records and supply all six or more independent run entries: + +```json +{ + "variant": "baseline", + "repeat_id": "pair-01", + "artifact_id": "RECORD_EXACT_BUILD_OR_REVISION", + "addon_ids": ["RECORD_LOADED_ADDON_IDS"], + "engine_version": "RECORD_ENGINE_VERSION", + "hardware": { + "cpu": "RECORD_CPU", + "gpu": "RECORD_GPU_OR_NO_GPU_FOR_SERVER", + "ram_gib": 32, + "os": "RECORD_OS_BUILD", + "driver": "RECORD_DRIVER_OR_SERVER_NOT_APPLICABLE" + }, + "workload": { + "map": "RECORD_MAP_RESOURCE_ID", + "route": "RECORD_VERSIONED_ROUTE_SPECIFICATION", + "players": 12, + "ai": 36, + "vehicles": 4, + "entities": 1000, + "settings": { + "RECORD_ALL_RELEVANT_SETTINGS": "replace this placeholder" + }, + "warmup_seconds": 30, + "duration_seconds": 60 + }, + "capture": { + "kind": "client_frame", + "environment": "client", + "tool": "RECORD_PROFILER_OR_INSTRUMENTATION", + "version": "RECORD_CAPTURE_TOOL_VERSION" + }, + "sample_file": "baseline-pair-01.csv" +} +``` + +Paths resolve relative to the manifest (absolute paths also work). `artifact_id` and `addon_ids` identify the intentional difference between baseline and successor; each variant keeps its own identity fixed through all repeats. `engine_version`, `hardware`, `workload` and `capture` must match exactly across every recording, including warm-up/duration. `settings` is a nonempty JSON object whose internal field names are collector-defined; document all relevant settings rather than relying on this nonempty-object check for completeness. `players` is a positive integer, the other populations are nonnegative integers, and total entities must cover at least declared players + AI + vehicles. Use a consistent entity-count definition excluding no populations silently. + +Capture kinds are `client_frame` and `server_tick`. Environments are `client`, `dedicated_server` and `workbench_headless`. A dedicated server cannot provide client frames. Hardware fields must be recorded even if one is explicitly not applicable. JSON whitespace and object-key order do not affect equality. + +## CSV schema + +The exact header and column order are: + +```text +frame_index,elapsed_ms,frame_time_ms,players,ai,vehicles,entities,ai_simulation_ms +``` + +- `frame_index` starts at 1 and increases by one without gaps or duplicates. +- `elapsed_ms` is the cumulative endpoint of the frame/tick, relative to the start of capture at 0; it must strictly increase. +- `frame_time_ms` is that entire interval's duration, finite and at least 0.001 ms. Its difference from adjacent elapsed endpoints, and cumulative total versus elapsed, must agree within 0.1 ms. Preserve sufficient precision when normalizing raw exports. +- Population columns are integer observations and must match declared counts in every row, including warm-up. Entity count includes the actors/vehicles. +- `ai_simulation_ms` is finite nonnegative AI profiling time for that interval. It may exceed wall interval time if the documented profiler sums concurrent worker durations. Baseline and successor must use the same definition/instrumentation. + +Record through the first frame endpoint at or beyond `warmup_seconds + duration_seconds`; include that final boundary-crossing frame and stop there. Ending early or adding rows after that endpoint is rejected. Only whole frames starting at/after warm-up and ending at/before the measurement boundary contribute metrics. Boundary-crossing intervals remain in the raw capture but are excluded symmetrically from metrics. At least 120 complete measured intervals must cover **at least 99% of the declared measurement duration**. A stall crossing either warm-up or the final boundary that leaves lower coverage rejects the entire comparison; a short fragment cannot stand in for the declared workload. The report exposes `measurement_coverage_fraction` and each excluded boundary interval's full duration and overlap with the measurement window, alongside included sample counts and seconds. Preserve rejected captures as evidence of the stall; do not trim or move boundaries after seeing results merely to make a recording qualify. + +## Report interpretation + +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. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/player-lifecycle.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/player-lifecycle.md new file mode 100644 index 0000000..7ea5160 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/player-lifecycle.md @@ -0,0 +1,29 @@ +# Player lifecycle and pending admission + +The successor keeps one round-owned life record per authenticated account. A connection number is only the current binding to that record. A new life can enter during prison, radio search or radio defence; extraction and terminal phases refuse new admission. Successful initial assignment spends the life. Cancelling an unassigned preload never restores or spends a life. + +Native reconnect reservation and handoff remain separate from new-character admission. A returning account may reclaim its surviving reserved actor through Reforger's reconnect system. A dead actor remains a spent life; unconsciousness is not death. Reserved living actors remain participants while their connections are absent. These policies are implemented, but real remote reconnect and reservation-expiry acceptance remains unfinished. + +## Placement + +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. + +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. + +## Finalization and cleanup + +The server records each initial free-spawn admission in a ticket bound to the mission instance, account, connection, controller, native request, exact request data object and created actor. Immediately before native assignment it rechecks current phase, account binding, connection, spent life, controller and request ownership, absence of another controlled entity, actor health and placement. Horizontal drift is limited to 0.6m and vertical drift to 1m, allowing ordinary settling while refusing displaced or fallen preloads. The reserved location is checked against current terrain and physical occupancy again. + +A refused ticket permits cleanup only of its owned unpossessed actor. An unknown or repeated request cannot claim an arbitrary actor for deletion. Stop, disconnect and closed-admission phases remove reservations, cancel the native repeated finalization callback and remove their pending actors. Pending/retry metadata is cleared before cancellation emits a response, so the response's failure callback cannot schedule a fresh admission. Cleanup rechecks actual player control: `ERR_Actors.DeleteSpawned` refuses any entity currently controlled by a player, regardless of its original ownership. + +The native handler interception applies only to successor game modes or an existing handler whose owning respawn system still carries successor spawn logic during teardown. Other scenarios retain vanilla behavior. Delayed entity-loss observation also checks the captured controller and ignores a living actor that was reacquired before the callback runs. + +## Validation status + +`python3 tools/check.py` includes `tests/test_player_admission_policy.py`. It executes the actual source-local finalization and life-policy bodies plus the actual reservation rejection predicate through the existing C++ policy harness. Coverage includes every phase/life/connectivity/controller/request/identity combination, missing identities, displacement boundaries, radial distance, vertical reservation separation and own-reservation exclusion. The harness substitutes vector arithmetic and opaque identity equality; it does not emulate Enfusion collision, replication, native spawning or reconnect behavior. + +`ERR_NativeLifecycleProbe` is an opt-in WORKBENCH fixture integrated by the central runner as `-errBaseSmoke 1 -errSmokeOutcome lifecycle`. It checks native prison capacity, physical character occupancy, actual local-controller handler rejection, exact request ownership, deferred deletion, cancellation without another life, delayed observer metadata protection and a native displaced actor. Movement checks wait 750ms and deletion checks wait 1000ms rather than assuming immediate native updates. Synthetic ticket creation is confined to WORKBENCH and never changes the real prisoner's life record or possession. + +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. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/prisoner-loadout.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/prisoner-loadout.md new file mode 100644 index 0000000..cc51377 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/prisoner-loadout.md @@ -0,0 +1,36 @@ +# Successor prisoner starting kit + +Core uses `{3FF693715C9F8928}Prefabs/ERR/Prisoner.et` as its player character. This is a new successor resource with its own metadata and catalog reference. It derives directly from vanilla `{836E7E39AAC5888B}Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et`, whose parent is `{37578B1666981FCE}Prefabs/Characters/Core/Character_Base.et`. + +The previous `Character_US_Unarmed.et` derived from `Character_US_BaseLoadout.et`, which authored radio, map, compass, binoculars, watch, E-tool, flares, flashlight and medical inventory. The successor avoids that equipped parent and explicitly authors: + +| Starting item | Count per prisoner | +| --- | ---: | +| Patrol cap | 1 | +| Rolled-up BDU jacket | 1 | +| BDU trousers | 1 | +| US combat boots | 1 | +| Watch | 1 | +| US field dressing | 2 | +| Tourniquet | 1 | +| Morphine | 1 | + +The jacket itself includes a non-equipment dummy belt. There is no starting weapon, ammunition, map, compass, radio, binoculars, E-tool, flare, flashlight, backpack or vest. Prison and route stock are unchanged: the prison still contains five pistols, eight magazines and one shared map. Equipment scarcity now comes from that authored stock and scavenging. This change does not assert that five starting weapons are sufficient for every play style. + +The prefab preserves inherited vanilla damage, consciousness, inventory, saline/tourniquet treatment slots, character actions and vehicle access. It does not change game-mode health settings or the all-incapacitated outcome policy. Inspected vanilla core treatment slots are inactive until used; they are not a source of extra carried medicine. Runtime inventory assertions must confirm this on the installed version. + +All explicitly referenced vanilla resources were verified against the installed `addons/data/resourceDatabase.rdb`. The audit used the installed US character inheritance and clothing prefabs; no original Escapists implementation was copied. The equipped BaseLoadout parent has been removed from the successor character's inheritance, while normal vanilla character systems remain. + +## Validation + +`python3 tools/check.py` passes resource isolation and reference checks with 23 successor resources. Native compilation and the new `ERR_NativePrisonerProbe` are pending until the central runner archives a result. + +The opt-in probe uses one actual local player's prisoner and eleven disposable physical characters at reserved clear prison positions. After native initialization it checks each inventory against the explicit kit, rejects any unexpected carried resource, and checks that health, treatment and vehicle-access components remain. It then moves the actual player near an authored supply cache, transfers one existing radio document into the reduced clothing inventory, verifies physical ownership changed without duplication, and returns the same document. The eleven temporary actors are deleted and the actual player's body and spent life are preserved. + +This validates native storage compatibility; it does not simulate twelve network clients or prove manual inventory UI interaction. Picking up the borrowed document can trigger ordinary discovery knowledge in the disposable fixture, so the runner must finish with an explicit test reset instead of continuing a normal escape round. No replacement document is spawned. + +Native inventory initialization, resource inheritance, actual medicine effects, manual clue pickup, 12-player balance and multiplayer remain separate acceptance gates. Run ordinary Core and companion escape/restart regressions after the native kit fixture, because changing the player prefab affects every player spawn and test character. + +Native validation also observes the vanilla identification record (`PersonalBelongings_US.et`) on the possessed player. The installed identity manager generates this on possession, death or unconsciousness; it is deliberately retained and verified once. The eleven unpossessed, healthy fixture actors have no such generated item. This does not add a map, radio, weapon or mission clue. + +Native run `native-2026-09-19-063949` passed all 155 combined assertions with zero engine errors. All twelve physical characters fit inside the prison and passed kit and clue-transfer checks. Native `GetItems` can return the same item reference more than once; the probe counts unique live entities, retains distinct items of the same prefab, and verified exactly one generated identity item on the controlled player. This does not establish twelve-client networking or player balance. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-defence.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-defence.md new file mode 100644 index 0000000..933a17a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-defence.md @@ -0,0 +1,33 @@ +# Radio defence objective + +Core's `ERR_RadioDefenceService` owns radio authorization, physical defender selection, continuous transmission time and completion. `ERR_GameMode` wires its events into mission progression; companion addons do not advance the objective. The service runs only on the server. Native tasks remain the replicated presentation of its progress. + +A radio can be tuned once during `RADIO_SEARCH`, only if it is registered with the mission, is a radio site, has been identified, and a conscious prisoner is within five metres. The prisoner must be the current body of a connected, already-spawned round participant and belong to the configured player faction. An AI character, reserved disconnected body, spectator, hostile controlled character or replacement body outside the roster cannot authorize a transmission. + +Once tuned, at least one eligible conscious prisoner must remain strictly inside the 60-metre radius. The service samples native player/character state on the existing one-second server tick. Multiple defenders share one timer: losing one defender does not reset progress while another remains. Losing the last eligible defender resets all accumulated time. Death, unconsciousness, distance, faction, current connection/roster identity and an empty server are checked on each sample. Backward or invalid sample times cannot manufacture completion. + +The existing `/esc mission radio show|set N` command and 30–1800 second bounds are unchanged. Unlike the next-round mission clock settings, this duration remains live: increasing it preserves elapsed continuous occupancy and lengthens the remaining time; lowering it can complete a sufficiently long current transmission at the next server sample. A settings-save failure keeps the old value. + +## Interface and events + +The service exposes `State`, `Location`, `Occupied`, `DefenderCount`, `Since`, `DurationSeconds`, `SecondsRemaining(now)`, `DefenceRadius()` and `TuneRadius()`. GameMode retains its `TuneRadio`, `DefenceOccupied` and `DefenceSecondsRemaining` forwarding methods. These service/progress methods are server-side; clients consume the native replicated task description rather than reading the service. + +- `OnStarted(location)` fires once when a validated radio begins. GameMode changes the phase to `RADIO_DEFENCE`; if that transition fails it stops the service. +- `OnProgressChanged(service)` fires when state, defender count, start timestamp or configured duration changes. Ordinary elapsed ticks do not emit redundant events. Consumers read the snapshot through the service getters. +- `OnCompleted(location)` fires once after the service latches completion. GameMode verifies the completed service and current phase, reveals the extraction site and changes to `EXTRACTION`. + +The completion latch is set before either observer event runs. Nested ticks, repeated ticks or repeated tuning therefore cannot emit another completion. Mission stop and phase changes beyond radio defence cancel an incomplete service; a stopped service cannot restart. Completed state remains latched through cleanup. + +## Validation scope + +`tests/test_radio_defence_policy.py` runs the actual Enforce policy bodies in the existing C++ harness. It covers the phase/discovery/authorization matrix, exact five- and 60-metre boundaries, defender handover, interruption, zero eligible defenders, backward time and exact duration completion. These local checks and the existing repository checks pass; they are not Enforce compilation. + +`ERR_NativeRadioDefenceProbe` is a WORKBENCH-only asynchronous fixture run before normal Core smoke tuning. Construct it with the current mode, real controlled prisoner and identified radio. `Tick(now)` returns `0` while pending, `1` only after all assertions and physical restoration pass, or `-1` on failure. The caller must invoke `Stop()` on cancellation, timeout and mission stop. Stop is idempotent: it detaches the fixture's event listeners, stops its isolated services, restores the saved radio duration and the real player's original transform/consciousness, and deletes its own second character. No fixture-owned recurring callqueue survives cancellation. + +The fixture keeps native world advancement separate from its deterministic service samples. Teleports, consciousness changes, faction changes and death are followed by a minimum 750 ms wait before querying physical state. Recovery additionally polls the actual living/conscious controller state for at most twelve seconds per recovery step, without repeating the state-change command or changing health to force success. Those deadlines do not move when another poll is scheduled. Normal success waits for deferred player restoration to settle and verifies the restored setting, controller state and position. + +One character is the actual local player's body. The second is a newly spawned physical character whose connection membership is simulated by a WORKBENCH-only defender source. Its sampled connection count is also simulated for the empty-server case. Both actors use native faction, controller, damage and position queries. They occupy separate positions to avoid overlapping bodies during knockdown and recovery. Diagnostics record actual radio/player positions and measured distance, controller life state and unconsciousness, plus the current phase, registered radio, roster binding, faction and authorization result. The five-metre tuning limit is checked against observed positions. Physical defence exclusion requests 60.5 metres and verifies at least 60 metres; the exact 60-metre policy boundary remains covered by the policy regression. + +The isolated service tests ordinary AI and unregistered/hostile rejection, multiple defenders sharing one interval, unconscious/dead defender loss, empty-server reset, live duration changes, stop/terminal cancellation and duplicate or re-entrant completion. Its explicit timestamps test exact timer boundaries; they are not evidence of elapsed multiplayer or real-time transmission duration. The production service and the live mission phase are unchanged by the isolated probes. After successful cleanup, normal Core smoke tunes the live radio and performs the existing real delayed transmission, interruption and recovery sequence. + +Recent native runs exposed fixture timing failures after physical mutation and during recovery. Those failures remain archived. The archived [050515](evidence/native-2026-09-19-050515/report.json) run completes the asynchronous radio fixture and ordinary escape twice, with 340 total assertions and no script/VM exceptions. Seven inherited resource errors still prevent a clean runtime pass. Scripted controller changes are not medical-treatment or revive validation. The fixture does not demonstrate two remote clients, real disconnection/reconnect timing, remote task synchronization or long-duration multiplayer behavior. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-document-loss.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-document-loss.md new file mode 100644 index 0000000..9a52085 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-document-loss.md @@ -0,0 +1,19 @@ +# Complete radio-document loss + +Everon keeps two independent caches with two targeted radio documents each. The clue route remains unchanged: recovered documents advance the existing replicated location knowledge and update objectives and map markers. Finite stock is never replenished. + +A conscious participant can also identify the actual radio station from within eight horizontal metres, with at most eight metres of height difference and an unobstructed native visibility trace. The ordinary five-second site tick performs discovery through `ERR_LocationComponent.Discover(0, 100)`, so both unknown (0) and partial (1) knowledge become identified (2) through existing events. No hidden station coordinates are published before the player discovers it. Approaching the real station remains a playable route after all four documents are destroyed, even if neither cache can provide clues. + +The server validates the currently controlled player entity, connected account and roster life, player faction, active mission phase, registered site, distance and visibility. AI, detached bodies and spectators cannot identify a site. Radio authoring accepts at most eight metres; optional sites retain their sixty-metre maximum; prison and extraction proximity discovery remain disabled. Escape cannot directly reveal the radio. + +The extraction map marker and objective copy now explicitly describe the initial helicopter pickup site. It is a location marker, not live helicopter tracking. + +## Native fixture, not yet run + +Run the Core fixture with `--smoke radio-document-loss` or `--smoke radio-document-loss-partial` after applying the integration snippets. The partial variant first transfers one real document into the real player's inventory with the isolated reveal chance set to zero, waits for ordinary discovery to produce knowledge 1, then destroys all four original document entities. The unknown variant destroys all four before any recovery. Both verify native weak references clear, cache/player inventories contain no target documents, and querying preparation does not replenish stock. A nearby unpossessed actor and a distant real player must not reveal the station. A wall inserted before a close approach must prevent discovery; removing it lets the normal site tick identify the station exactly once. The real participant must then pass ordinary tuning authorization and enter radio defence. The fixture ends with an explicit test defeat/reset; it does not claim a completed escape, manual play or multiplayer validation. + +Only disposable fixture stock and test entities are deleted. The production path neither spawns replacement documents nor changes inventories. No original assets or mission files were changed. Source-policy tests execute actual discovery-bound methods after mechanical translation; native participant/trace behavior still requires the fixture run. + +Native run `native-2026-09-19-070733` passes 58 combined assertions with zero engine or script errors for initially unknown radio knowledge. The previous failed trace diagnostic `070446` had clear sight but inconsistent offline identity lookup. Discovery now uses the audited roster’s canonical current-actor validation, shared with radio authorization. The partial-knowledge run remains separate. + +The partial-knowledge fixture now also passes in [071654](evidence/native-2026-09-19-071654/report.json): 60 assertions and no native errors. It obtains one real document's knowledge before all four documents are destroyed, then verifies the same finite, close-discovery recovery path. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-feedback.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-feedback.md new file mode 100644 index 0000000..ebb687c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/radio-feedback.md @@ -0,0 +1,11 @@ +# Radio interruption feedback + +The game mode replicates one presentation state: inactive, waiting, transmitting, or interrupted. Its existing server phase transitions and radio tick derive this from the authoritative defence service. The presentation state never advances or resets defence progress and adds no timer. A state change causes replication; unchanged ticks do not. + +Entering radio defence publishes waiting before the first occupancy sample. A valid conscious defender changes it to transmitting. Losing all valid defenders after transmission began changes it to interrupted and keeps that message until transmission resumes. Leaving the defence phase clears the state, including completion and defeat. An initial empty radio area stays waiting rather than claiming a previous transmission failed. + +The existing player guide polls the replicated mode once per second and compares its previous message before showing a hint. Its radio instruction now includes the state, so interruption and resumption produce fresh guidance without countdown chatter. Clients do not read the server-owned radio service. The task's existing detailed countdown remains unchanged. + +`tests/test_radio_feedback_policy.py` executes the production state policy with exhaustive valid previous states and occupancy/phase combinations, plus repeated empty samples, recovery and round reset. The existing opt-in Core native fixture adds seven checks across tuning, real defender occupancy, unconsciousness, recovery, leaving the area and completion. Native assertions are prepared but not run in this isolated change. They verify authority state and instruction copy, not delivery to a remote client or rendered hints. Remote reception, late joining during interruption and round restart remain multiplayer acceptance checks. + +Native integration passes in [073806](evidence/native-2026-09-19-073806/report.json): two complete Core escape/restart rounds, 564 total assertions and zero native errors. Both rounds verify each feedback state and the exact player-guide copy through interruption, recovery, leaving and completion. Actual remote replication/presentation remains pending. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/recovery.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/recovery.md new file mode 100644 index 0000000..9904ca6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/recovery.md @@ -0,0 +1,11 @@ +# Incapacitated survivors and administrator abandonment + +Core observes the controlled, living bodies of participants who have already used their life. A conscious participant can help; an incapacitated participant remains a survivor. A disconnected or temporarily unpossessed living body remains reserved and is not counted as an available rescuer. Dead bodies and spectators do not count. This observation does not change health, consume another life, advance a phase or end a round. + +When no controlled survivor is conscious and at least one is incapacitated, the replicated mission status and native objective description explain that recovery remains possible and an administrator may abandon the round. Reconnection is mentioned when a living reserved body exists. The message clears when the condition changes; identical samples do not emit duplicate events. No additional death timer is imposed. Blood loss may still require treatment: the message is not a promise that every casualty will wake unaided. + +`/esc mission abandon` is restricted to the existing server-validated administrator command channel. It accepts only the exact command during an active mission, records a specific result reason and enters the ordinary defeat/cleanup/restart path. Unauthorized, malformed, preparation and repeated terminal requests do not change the round. This gives administrators an explicit way to end a hopeless round while preserving recoverable and reconnecting survivors. + +The `recovery` WORKBENCH fixture exercises actual controller incapacitation, the shared status, observer event deduplication, survival beyond the ordinary 30-second all-dead grace, restoration without replacing the actor, unauthorized/malformed requests and authorized abandonment. Controller state changes in that fixture establish mission policy only. The separate `medical` fixture tests actual blood loss and native treatment recovery without directly restoring consciousness. Neither fixture establishes remote-client replication, manual treatment actions or multiplayer acceptance. + +Native run `native-2026-09-19-064406` passed all 54 combined assertions with zero engine errors. The fixture restored consciousness once, then tested authorized abandonment during a second active all-incapacitated warning. Terminal cleanup removed the status and counts. This is local policy evidence; multiplayer replication and manual treatment remain unqualified. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/release-qualification.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/release-qualification.md new file mode 100644 index 0000000..c70d25f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/release-qualification.md @@ -0,0 +1,57 @@ +# Release qualification audit + +Run `python3 tools/release_check.py`. The command is read-only and returns **1** when any release gate is missing, malformed, failed, pending or lacks valid evidence. A passing audit returns **0**. It does not change acceptance status, create a package, publish an addon or prove the contents of a human-written test report. + +The current repository is intentionally refused: all seventeen first-release acceptance cases remain pending. Clean environment/restart development evidence exists after narrowing the faction catalogs, but further production changes require a current-source full-loop qualification. Scripted development successes cannot override missing release evidence; historical native failures remain archived. + +## Required ledger entries + +The checker requires every existing first-release case by its stable name, from `independent_native_build` through `own_identity_release_package`. Removing a difficult case cannot qualify a release. Unknown case names are rejected rather than accepted as replacements. Valid statuses are exactly `pending`, `passed` and `failed`; missing statuses and malformed entries are errors throughout both `cases` and `development_checks`. + +Every required first-release case and the `clean_native_runtime` development gate must be `passed` with a nonempty evidence list. Evidence paths must identify nonempty regular files inside this repository using canonical relative POSIX paths. Absolute paths, traversal, symlinks, directories, missing files, duplicate paths and whitespace-only evidence are refused. Duplicate JSON keys and nonstandard JSON numbers are refused too. + +Other development checks may remain pending or failed, including intentionally failed historical fixtures. Historical passed checks still need safe nonempty evidence, but their source manifests are not required to match today's sources. Older failures and older passing evidence should remain archived rather than being rewritten to satisfy the gate. + +## Explicit native qualification + +Both `cases.independent_native_build` and `development_checks.clean_native_runtime` require two additional explicit fields when passed: + +```json +{ + "status": "pending", + "evidence": [ + "docs/evidence/QUALIFYING-RUN/report.json", + "docs/evidence/QUALIFYING-RUN/source-sha256.json" + ], + "native_report": "docs/evidence/QUALIFYING-RUN/report.json", + "source_manifest": "docs/evidence/QUALIFYING-RUN/source-sha256.json" +} +``` + +This is an illustrative shape, not an acceptance update; the placeholder files do not exist. Only record passed status after the corresponding acceptance work has actually passed. + +The report and manifest must belong to the same evidence archive. Future native qualification also requires the fixed `source-provenance.json`, `launch-source-sha256.json`, `launch-source.json`, `runner.json.txt` and `console.log.txt` files beside them. The explicit paths must also appear in that entry's evidence list. The report must name a nonempty raw native log in the same archive. The checker independently analyzes that log with the shared native report parser and rejects missing metrics, type changes, fabricated counters or error lists that disagree with the raw log. Qualification requires every round requested by the successfully completed runner and at least one passing assertion, with no captured script/runtime, engine-severity `(E)` or `(F)` or missing end-screen errors. These are local native prerequisites; the separate multiplayer, gameplay, workload and packaging cases remain mandatory. + +The source manifest must match the complete current authored addon file set and each SHA-256 hash. Changed files, added files, missing files and extra stale manifest entries all invalidate qualification. The shared `tools/source_manifest.py` helper is also used by `tools/archive_native.py`, so archival and qualification use the same inventory. Unknown resource file formats are included automatically. Generated addon-root resource databases, `.pak`/`.log` files, and `.build`, `.local`, `__pycache__`, `profiles` directories are excluded; these locations are build/runtime state and must not contain authored source resources. Source symlinks are refused. + +## Launch and stopped-run provenance + +The hidden runner captures the complete addon manifest **before starting the engine process**. When its new native session directory appears, it writes the already captured bytes as `launch-source-sha256.json` plus `launch-source.json` metadata. The metadata records a unique launch ID, source root, command, capture timestamp and SHA-256 of the exact manifest bytes. It never reconstructs launch source state from files encountered later. + +After terminating its owned processes, the runner hashes the final addon tree and exact raw `console.log` bytes. Its `runner.json` binds the launch ID/manifest hash, process start and stop timestamps, final source digest, raw log digest and completion result. A changed final source tree makes the runner fail as `source-changed`; captured engine failures remain preserved separately. + +Archive only a stopped run. `archive_native.py` validates launch metadata against runner metadata, rejects source changes between launch and stop or between launch and archival, verifies the stopped raw log digest, and copies the original launch manifest bytes into `source-sha256.json`. It also retains the launch files and writes `source-provenance.json` with `kind: "launch_snapshot"`. Qualification verifies all those relationships again, requires the report to analyze that exact sealed `console.log.txt`, and rejects a recomputed clean report attached to a different raw log. + +For a session created by an older runner without launch metadata, an explicit historical import is available: + +```sh +python3 tools/archive_native.py /path/to/stopped-old-session historical-name --allow-legacy-archive-time-source +``` + +That import writes `kind: "archive_time_only"` and `qualification: "historical_only"`; its manifest describes the files at archive time, without asserting they were loaded by the old session. Such evidence cannot satisfy future native qualification, even if its current-source hashes and smoke counters happen to match. Missing/partial/corrupt launch evidence cannot be downgraded to legacy by this flag. Already existing historical archives and their native reports remain unchanged and readable; historical development entries still do not require current launch provenance. + +These checks prevent accidental stale-source and old-log mixing. They are not cryptographic authentication or continuous filesystem surveillance: edits made and reverted entirely between the start/stop snapshots cannot be detected, and a person can still alter all evidence consistently. Do not edit tested sources while the process runs; preserve collection records and review semantic acceptance. The checker makes no release-readiness claim merely from an existing screenshot, report filename or old source manifest. + +## Regression checks + +`python3 tests/test_release_check.py` exercises forty-six focused cases in temporary directories, including a fully qualifying synthetic ledger, omitted requirements, a failed clean-runtime gate despite all cases being passed, malformed structures/statuses, empty files, unsafe paths and symlinks, changed/added/deleted addon files, stale manifests, falsified report metrics, retained native errors, truncated logs, historical evidence, launch/stop/raw-log binding, source mutation, explicit legacy import and read-only behavior. Synthetic test fixtures are never copied into the real acceptance ledger. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/runtime-testing.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/runtime-testing.md new file mode 100644 index 0000000..c9f2273 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/runtime-testing.md @@ -0,0 +1,101 @@ +# Runtime testing + +## Keep the desktop unobstructed + +Use terminal/file checks by default. Do not repeatedly launch Workbench or game windows on the main monitor. A visible editor should use the user's selected spare output. The user authorized the right-hand display (HDMI-A-1, 1920×1080 on this machine). Keep primary DP-3 free of test windows. A KDE rule matching `steam_app_1874910` places both editor and in-editor game windows on screen 2 before mapping and disables fullscreen. The previous configuration was backed up to `~/.config/kwinrulesrc.erri-backup`. The rule is named `erri-workbench-right-monitor` and can be removed independently in KDE Window Rules. + +A later test found that Workbench can restore geometry after placement and still extend onto the main display. Automated local tests therefore now use a dedicated headless Gamescope display and a cloned disposable Wine prefix. The graphical application remains native Workbench; this is not a dedicated-server test. No performance comparison may use these headless results as equivalent to an ordinary client workload. + +The additional session guard is `tools/desktop/kwin-right-monitor.js`; it minimizes matching test windows if HDMI-A-1 is unavailable. The original title-only guard missed the separate game window, so use the application-class match and initial-placement rule together. Do not claim placement is verified merely because the editor window moved. Verify every new game/dialog window. The API is documented by [KDE](https://develop.kde.org/docs/plasma/kwin/api/). + +Existing missions and the original workspace are read-only references. Never save their open editor documents during successor validation. All authored successor content and fixes belong in this repository. + +## Native setup + +Use matching stable Arma Reforger and Arma Reforger Tools installations. Keep original Escapists and its extensions unloaded. Register `addons` as an addon search directory, and open `addons/chat/addon.gproj`. Open `Worlds/ERR_Everon.ent` in the World Editor. `ERR_ValidateWorldPlugin` logs the authored locations' terrain heights; `-errPlay 1` allows that diagnostic plugin to enter play mode when deliberately invoked. + +The command-line conventions follow the [official startup parameter documentation](https://community.bistudio.com/wiki/Arma_Reforger:Startup_Parameters): Workbench uses `-gproj`, `-addonsDir`, `-load` and `-plugin`. Workbench's `-load` is distinct from the game's `-world`. Launching a visible editor is an explicit test step, not part of `tools/check.py`. + +## Acceptance sessions + +Record the game/Tools versions, repository tree hash, addon list, player count, AI/vehicle counts, settings, map positions and complete logs for every run. Start from an isolated profile. + +1. Join with 1, 2 and 12 players; verify one controlled prisoner each. Join late during every phase. Reconnect with the same identity both within and after native reconnect reservation expiry. Voluntary departure must not create a free extra life. Test reused transient player IDs. +2. Test conscious, unconscious, revived and dead players; forbidden respawn requests; spectators; nobody connected; all survivors dead; partial extraction; defeat; restart. Voluntary reconnect reservation and spectator following are implemented; actual remote-client verification remains required. +3. Pick the prison lock, leave the enclosure, scavenge physical folders, reveal/identify the radio, hold its area for the full continuous defence period, locate the helicopter and cross the escape boundary aboard it. Test every interrupted stage and a destroyed extraction vehicle. Check that moving or collecting objective objects cannot move the objective. +4. Observe a player, interrupt a radio hop, remove/capture a relay, let a contact expire, lose a support group and deplete support ammunition. Verify orders reach only existing forces, are not duplicated and do not use undelivered knowledge. Aircraft/mortar/logistics cases remain blocked until their controllers are migrated. +5. Repeat restarts and long empty/occupied server periods. Compare entity, AI group, callback, waypoint, inventory and journal counts. Check JIP marker state and shared-map ownership/visibility. + +## Performance + +Use equivalent player/AI/vehicle workloads, settings, routes and hardware for old and successor runs. Include warm-up, repeat runs and collect frame times/server FPS with populations held constant. Record median and lower-percentile FPS plus AI simulation load and entity counts. Reducing AI population is not evidence of a faster equivalent system. No FPS improvement is claimed before those measurements exist. + +Do not publish while an acceptance entry is pending or failed. Source-policy regression passes are not multiplayer or performance evidence. + +## Opt-in scripted integration smoke + +In local Workbench only, `-errSmoke 1` enables `ERR_NativeSmoke` alongside the validation plugin and `-errPlay 1`. Use a disposable profile: the test changes its intel and defence settings, makes the test player invulnerable, takes a scene screenshot and teleports the player and helicopter. It never runs in a release game build or dedicated server. It exercises real spawn, prison action, guaranteed physical cache documents, inventory-driven discovery, radio range, continuous occupancy, interrupted defence and physical helicopter seating. Automatic round restart reruns it. + +Run `python3 tools/native_report.py --require-completions 2` to summarize assertions and retain script errors as failures. Stop the isolated test process after the required cycles. Do not interpret completion as manual piloting, multiplayer or performance acceptance. + +`tools/reference_guard.py snapshot` and `verify` can compare the original workspace's source/resource contents around a validation session. Keep the baseline outside the original workspace. + +Use `tools/native_command.py workbench --exe --profile --smoke victory` to print the test command, or `--smoke lost-helicopter` for extraction-vehicle loss. `--smoke player-death` kills the real prisoner, checks one-life identity rules and camera activation, then waits for all-dead defeat and restart. The helicopter-loss case deletes the empty test helicopter during extraction and expects native mission defeat. `tools/archive_native.py ` retains raw logs, screenshots and current source hashes without overwriting earlier evidence. Stop the test before archiving and archive before changing the tested addon sources. Its nonzero exit preserves native failures. + +## Windowless local runner on Linux + +Clone a working Tools compatdata directory into a disposable path outside Steam, preserving symlinks (`cp -a --reflink=auto`). Never point the runner at the user's live Wine prefix. With Gamescope and Proton Experimental installed: + +```sh +python3 tools/headless_workbench.py --compat /tmp/erri-headless-compat --profile /tmp/erri-workbench-profile --smoke radio-network --rounds 2 +``` + +The runner uses Gamescope's headless backend, retains full GPU rendering on a private display, and terminates only its new process group. It rejects a concurrent editor using the same test profile, stops after failure/timeout/completion, and returns a nonzero status for any recorded native errors. `radio-network` exercises real radio equipment and interrupted delivery before the normal death/spectator test. + +The user requested muted test audio. The runner creates/reuses only `erri_tests_silent`, a muted null output, sets a separate PulseAudio application ID, and verifies/reroutes/mutes test-owned streams during execution. It does not change the system default sink or other application streams. + +## Core isolation + +Pass `--project core --smoke victory` to `headless_workbench.py` to compile only Core and vanilla and run the separate base fixture. The full integration fixture still defaults to `--project chat`. Core now owns document recovery and objective markers; optional Intel distribution and the shared field map must not be required to advance the mission. Inspect the **Loaded addons** log section, not **Available addons**, when checking actual isolation. + +## Deliberate startup failure + +Use `--project core --smoke startup-failure --rounds 1` only for the negative-path fixture. It changes the test's in-memory faction catalog to an invalid combination, verifies that services stop and no players/sites/stock spawn, checks the administrator-visible reason and rejects further progression. The normal startup ERROR is expected in this test and is preserved in the native report. No source configuration or external mission is modified. This fixture does not restart, so exactly one round is required. + +The Core victory fixture also holds its actual player character unconscious for 35 seconds at the radio, longer than the all-dead grace period. It checks that the physical survivor still prevents defeat, cannot advance radio progress, retains control/camera, and resumes defence after consciousness is restored without receiving another life. This uses the native controller's consciousness transition; it does not validate treatment animations, medical item consumption, bleeding or a remote revive action. + +## Alternate scavenging route and visual discovery + +Use `--project core --smoke cache-loss --rounds 2 --timeout 480` with the hidden runner. The fixture deletes the southern supply crate before taking any documents, then completes escape using the western cache. It verifies that neither deleted nor depleted stock is recreated, including across the usual preparation query. Both repeated rounds must independently start with fresh configured sites. + +Core victory and cache-loss fixtures also inspect the three outpost barriers for upright placement and actual collision. At the medical stash they test unconsciousness, distance, a temporary physical wall, clear visibility and one discovery event. Only the fixture adds/removes that isolated wall; production discovery changes knowledge without changing scenery. The cache-loss variant uses the alternate documents, while the normal victory variant uses the original southern cache. + +`--project core --smoke site-survey --rounds 1` prints a bounded terrain and obstacle survey for three areas without changing existing scenery. Candidate grid checks are placement diagnostics, not navigability or encounter-balance acceptance. Existing authored successor objects can now appear as obstacles in a repeated survey. + +## Extraction capacity, results and startup rollback + +Use `--project core --smoke extraction-capacity --rounds 1` for twelve physical native occupants and isolated partial-result identities. It also checks hidden native result widgets and clock settings/progression. Synthetic roster bindings do not simulate a network connection. The fixture explicitly ends its own test round; it is not evidence of natural all-dead defeat. + +Use `--project core --smoke early-helicopter-loss --rounds 2` for helicopter loss during prison while a living player remains, then automatic restart. `extraction-startup-failure` substitutes an unsuitable vanilla transport in memory; `extraction-boundary-failure` uses a zero boundary radius with the real helicopter. Both startup cases require `--rounds 1`, withhold players, and verify authored population/stock/scenery rollback. Their deliberate startup errors remain in the report. + +The ordinary Core victory fixture also validates the mission clock. To test nondefault startup values, first stop the private runner, snapshot all three private-profile settings files (`profile/rereintroduced.json`, `.bak`, `.tmp`) byte-for-byte, then seed a valid primary settings file with `startTimeMinutes: 375` and `timeMultiplier: 4`. Complete two rounds, archive the input and results, and restore all three files exactly after the runner stops. Never modify a live or user profile. The default run separately checks that saving different next-round values does not alter the running clock. Remote clock agreement and long day/night transitions remain acceptance work. + +## Radio service, task details and finite ground transport + +The normal Core victory/cache-loss flow includes an isolated radio-service probe before actual tuning. It creates one additional physical character but simulates its connection membership and advances explicit service timestamps to exercise handover, unconsciousness/death, hostile affiliation, empty-server reset, live duration changes and duplicate completion. It restores the live character/configuration before the ordinary real-tick defence sequence. This is not two connected clients. + +The Core fixture also opens hidden native task list/detail widgets and checks their text through prison, discovery, transmission/interruption and extraction. An existing details panel must refresh as the underlying task description changes. Local widget text is not remote replication or manual UI usability acceptance. + +Use `--project core --smoke transport-loss --rounds 1` for physical UAZ driver/passenger occupancy, engine start, fuel depletion and permanent loss. The fixture then stops the site service and explicitly requests its own test reset. `--smoke transport-survey --rounds 1` temporarily omits vehicles only in its in-memory fixture definition, then surveys nearby terrain/geometry without removing scenery; it is authoring diagnostics, not a playable mission configuration. + +Add `--station-teardown-diagnostics` to the hidden runner for bounded Workbench-only logging of support-station deletion validation. It forwards `-errStationTeardownDiag 1`, preserves all vanilla validation/errors, and neither repairs nor suppresses the catalog issue. [Native error investigation](native-errors.md) records the established resource mismatch and unconfirmed teardown hypothesis. + +The offline [performance comparison tool](performance-comparison.md) checks paired captures and equivalent workloads before computing frame-time/FPS differences. It has only synthetic regression coverage so far; no real benchmark results have been collected. [Release qualification](release-qualification.md) now checks current native source hashes and raw logs as well as the acceptance ledger. Both tools leave current release/performance acceptance pending. + +## Pending player admission + +Use `--project core --smoke lifecycle --rounds 1` for the bounded physical slot, delayed finalization and cleanup probe. The fixture uses the real local controller plus explicitly owned synthetic pending actors; it does not create remote connections or grant/reset lives. See [player lifecycle](player-lifecycle.md). + +## Objective panel destruction + +Use `--project core --smoke objective-ui --rounds 1` for the short native close/rebind/reopen and isolated task-deletion check. It restores the actual mission task assignment and requests its own terminal test reset. See [objective widget lifecycle](objective-widget-lifecycle.md). Every new headless session captures pre-launch addon hashes and a stopped log seal; archive it before changing addon sources. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/site-authoring.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/site-authoring.md new file mode 100644 index 0000000..eddf3f6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/site-authoring.md @@ -0,0 +1,41 @@ +# Authoring base mission sites + +Core loads `Configs/ERR/EveronSites.conf` through the scenario component on its game mode prefab. Definitions describe initial content; `ERR_SiteService` owns physical entities; `ERR_GameMode` alone advances the escape. + +## Current Everon route + +| Site | Position (X/Z) | Initial content | +| --- | --- | --- | +| Prison | 6090 / 7160 | New prison composition; 5 PM pistols, 8 magazines and a field map; guard squad | +| Southern supply cache | 6150 / 7050 | 8 AK-74 rifles, 16 loose magazines, 12 dressings, 2 radio documents; guard squad | +| Western supply cache | 5960 / 7220 | 4 AK-74 rifles, 8 loose magazines, 6 dressings, 2 radio documents; guard squad | +| Medical stash | 6340 / 7400 | 12 dressings, 6 saline bags, 6 morphine injectors, 3 maps; unguarded | +| Radio station | 6500 / 7200 | Radio objective and guard squad | +| Eastern guard outpost | 6740 / 7300 | 2 AK-74 rifles, 10 loose magazines, 2 binoculars, 4 dressings, 3 static sandbag barriers; guard squad | +| Extraction | 7000 / 7500 | Extraction marker, vanilla helicopter and guard squad | + +Escape reveals both supply caches by name. Each independently contains enough physical documents to identify the radio; losing one before recovering any clues leaves the other route available. Caches are about 238 metres apart, roughly 125 and 143 metres from the prison. The medical stash and outpost are optional detours. Once the escape has begun, conscious players within 25 metres of the medical stash or 35 metres of the outpost can discover it through a clear native line-of-sight trace. Unknown objective sites cannot be revealed by proximity. + +The seven sites have 117 explicitly authored stock entities and six six-person guard squads. Vanilla weapons may contain their own magazines or attachments, so recursive inventory totals are larger. The optional AI addon adds its existing finite mortar crew separately. All enemies are initial physical forces; alerts do not spawn reinforcements. + +All content is newly authored composition data or references to installed vanilla resources. Five finite crates use a vanilla weapon-crate model with 120 litres of storage, an 80 kg limit and 120/40/40 cm maximum item dimensions. They have a generic inventory manager and no arsenal or restocking controller. The Map companion may substitute its shared map for authored vanilla maps; essential progression stays in Core. The new sandbag resource has static collision and no destruction controller; destruction behavior is not implemented. + +## Definition fields and limits + +Each `ERR_SiteDefinition` has a unique `Id`, a nonempty `Label` of at most 64 characters, `Kind`, composition `Prefab`, world `Position`, optional guard group and offset, and optional container and offset. `Stock` entries specify a prefab and finite count. Objective-document entries require `TargetId` naming a radio site. `RevealOnEscape` exposes a supply location after prison escape. `DiscoverRadius` defaults to zero. Optional DEPOT/OUTPOST sites permit up to 60 metres; a RADIO site permits up to eight metres for close physical identification if documents were lost. Everon authors an eight-metre radio radius. A current conscious participant with the matching account, roster actor and player faction must approach within the radius, stay within eight metres vertically, and have an unobstructed trace to the station. Identification uses the existing discovery event and works from knowledge 0 or 1 without creating documents. Prison and extraction proximity discovery remain disabled; `RevealOnEscape` remains restricted to optional sites. The extraction marker labels the initial pickup site, not the current moving helicopter. + +`Props` places finite scenery with a prefab, ground-relative offset and angles. There may be at most 12 props per site and 64 overall, with offsets at most 40 metres long. Runtime footprint checks reject obstructed placement rather than clearing existing scenery. Height offsets are applied after terrain sampling. Prop templates must supply appropriate static collision and replication; the service does not construct destruction controllers. + +The first release requires exactly one prison, radio and extraction site. Definitions are bounded to 32 sites, eight guard groups and 256 authored stock entities, with at most 64 of any stock entry. A starting map is required. `MinimumRadioSources` is two in Everon (authoring range 1–8); each qualifying prison or escape-revealed site must contain at least two radio documents, and qualifying sites must be at least 100 metres apart. Duplicate IDs, dangling/wrong-kind document targets, missing containers and insufficient independent clue routes fail validation before spawning. + +## Ownership, discovery and failures + +Preparation has pending, ready and failed results. Each item is spawned once; rejected inventory insertion retries use that same physical entity. Accepted requests are not resubmitted while awaiting confirmation. The mission stays in preparation until every authored item is present in its destination inventory. A bounded timeout rolls back the authored entities and keeps player spawning disabled instead of starting with incomplete objectives. + +Once ready, checking preparation again returns the existing result. It does not recreate stock, destroyed containers or guards. Guards register once with the mission so the optional HQ coordinates existing forces. Discovery scans run at most every five seconds and skip known sites; they check conscious player state, horizontal distance, an eight-metre vertical bound and native world/entity visibility. Knowledge changes publish the server-side `OnLocationDiscovered(location, previous, current)` event once per transition. Replicated knowledge and names drive local map labels; the event itself is not a client RPC. + +End-of-round world teardown disposes of mission entities; mission stop cancels activation and strategic services. Full entity-count and multiplayer ownership soak tests remain necessary. + +The new sites were chosen with a read-only native terrain/obstruction survey. Across four-metre terrain samples, elevation ranges are 0.375 metres (western cache), 0.15625 metres (medical) and 0.6875 metres (outpost). Runtime checks also reject obstructed crate and prop footprints. This does not establish navmesh access, rendered presentation, fair encounters or manual playability. See the native regression results in [validation](validation.md); medical treatment and multi-client inventory contention remain unverified. + +Guard population can use `Guarded 1` to select the injected faction catalog's group prefab. An explicit `Guards` resource remains available for specialized compositions, but its runtime faction must match the catalog's enemy faction. Changing faction keys does not retag incompatible assets. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/site-patrols.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/site-patrols.md new file mode 100644 index 0000000..eab97b6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/site-patrols.md @@ -0,0 +1,35 @@ +# Finite site patrols + +Two existing six-member site squads receive native repeating ground routes: the western supply cache and eastern outpost. Four other guarded sites retain their initial Defend orders, including the prison gate guards. No group, member, ammunition or route replacement occurs on an alert, casualty or later tick. + +`ERR_SiteDefinition.Patrol` is optional. A route requires an existing guarded depot/outpost, 2–6 non-null points, ground offsets within 60 metres of its guard anchor, and at least 12 metres between every pair of points. The Move prefab's native completion radius is 5 metres. Ground height is sampled at each point. These authoring bounds do not prove navmesh connectivity or obstacle clearance. + +The authored loops are offsets `(18,0,0), (18,0,24), (-6,0,24), (-6,0,0)` from their guard anchors. Western anchor: X5976/Z7220; eastern anchor: X6756/Z7300. They avoid the authored western crate/parked UAZ and eastern cover footprint on paper. Native traversal and visual/manual route suitability remain pending; terrain coordinates alone are insufficient evidence. + +SiteService creates and owns four Move waypoints and one Cycle per route during its one permitted preparation. The native cycle inserts its own children and itself; only the Cycle is initially enqueued. Partial resource failure rolls back the site population and all route entities. Stop clears the cycle's children, removes only owned patrol waypoints from the group queue, and deletes those entities. Stop is idempotent. A foreign Search waypoint is preserved by route cleanup; mission shutdown separately stops HQ and the groups. + +Existing HQ behavior remains authoritative. Its delivered order inserts Search at queue index zero. Its release removes only that Search, so the pre-existing native cycle can resume. No production HQ code changes are needed. + +## Resource provenance + +The identities were read from the installed vanilla `addons/data/resourceDatabase.rdb`: + +- `{750A8D1695BD6998}Prefabs/AI/Waypoints/AIWaypoint_Move.et` +- `{35BD6541CBB8AC08}Prefabs/AI/Waypoints/AIWaypoint_Cycle.et` + +Installed vanilla `scripts/Game/Commanding/Commands/SCR_PatrolGroupCommand.c`, `scripts/Game/Components/Locations/SCR_AmbientPatrolSpawnPointComponent.c` and generated `AIWaypointCycle` API establish the SetWaypoints + enqueue-Cycle pattern. Cycle prefab sets RerunCounter -1. This is vanilla resource/API use; no original Escapists implementation was copied. + +## Native fixture integration and limits + +Compile Core and AI first. No engine run was performed by this implementation agent. + +1. Core: construct `new ERR_NativePatrolProbe(mode, "everon-outpost-1")` after site activation, then call `Tick(now)` with real world milliseconds. Return -1 means failure, 0 pending, 1 success. It subscribes to actual completion events, requires five ordered Move completions (crossing a cycle boundary) and >=8m displacement of an existing physical actor, with a 180s deadline. It does not teleport actors, complete waypoints artificially or spawn soldiers. It also validates both authored routes, queue uniqueness, bounded definitions and stationary prison orders. Run the same probe for `"everon-supply-2"` to validate both traversals. Call `Stop()` on abort; destructor also removes its listener. +2. AI: `new ERR_NativePatrolHQProbe(mode)`, same Tick convention, after an outpost route has been observed. Its WORKBENCH-only HQ adapter invokes the actual DeliverOrder and Release on an eligible, idle, registered outpost unit. It verifies Search becomes current, the baseline queue survives, then a patrol waypoint becomes current again after release. This is an intentionally simulated delivered-order trigger, not proof of radio transit or multiplayer timing. Existing perception/combat or a live HQ assignment causes failure rather than being erased. Call `Stop()` on abort. +3. After the HQ probe, run the outpost movement probe again to demonstrate physical traversal after release. The queue check alone is not physical-resumption proof. +4. Last, in a disposable mission, `ERR_NativePatrolProbe.StopChecks(mode)` verifies route cleanup preserves a separately owned Search and repeated Stop remains stopped. This intentionally stops site services; finish/reset the fixture immediately afterwards. + +The probes are opt-in under WORKBENCH. They do not change normal startup or force responses. Full AI fights, patrol losses, multiple remote players, long-session performance and manual stealth gameplay remain separate acceptance work. + +Native run `native-2026-09-19-070919` passes 295 combined assertions with zero engine or script errors. Both routes physically move existing guards and complete five native Move events in cyclic order, then retain unique queues and preserve a foreign Search through repeated route cleanup. Initial GetWaypoints snapshots contain repeated Move references; these disappear as native completions occur. The fixture retains bounded queue-growth and completion-order checks, deferring strict uniqueness until the first cycle has advanced. This observed startup behavior does not justify manually deduplicating the native queue. HQ preemption/resumption, manual route suitability and multiplayer remain separate. + +HQ integration now passes in [072838](evidence/native-2026-09-19-072838/report.json), 272 assertions and zero errors with all companions loaded. Actual delivered-order assignment preempts the existing outpost patrol; actual release preserves the route, and five subsequent ordered native completions and physical displacement demonstrate resumed movement. Radio delivery and remote clients remain separate acceptance gates. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/validation.md b/docs/evidence/dedicated-2026-09-19-083213/source/docs/validation.md new file mode 100644 index 0000000..80e6579 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/validation.md @@ -0,0 +1,248 @@ +# Validation evidence + +2026-09-19, local development environment. This remains a development prototype, not a release-qualified successor. + +## Repository checks + +`python3 tools/check.py` passes: five-addon isolation, acyclic dependencies, twenty-two source resource identities, exact successor/vanilla GUID references, production mission-rule boundaries, physical radio paths and failure handling, settings conversion, helicopter availability policy and mortar salvo policy. The latter two are helper tests, not operational support-controller evidence. + +The reference guard verified all 533 original workspace source/resource files against the pre-test snapshot. Existing missions were not edited or saved. Native tests use a separate profile and only the successor projects plus vanilla dependencies. Earlier successful visible runs were measured on the right display. A later launch restored an oversized main Workbench window despite placement rules; those tests were stopped. Automated tests now run on an isolated headless display and create no physical-desktop windows. + +## Native development sessions + +Workbench version: 1.8.0.13. The initial September 18 source snapshots remain in `native-initial-snapshot.json` and `native-followup-snapshot.json`. They established script compilation, native world loading and initial spawning only. + +Durable logs, screenshot captures, source hashes and a machine-readable report for `logs_2026-09-19_00-28-24` are in [native-2026-09-19-002824](evidence/native-2026-09-19-002824/report.json). That run completed two scripted rounds across an automatic restart, with 38 passing assertions. It exercised native prisoner spawn, the authored lock action, two real cache documents recovered into inventory, intel-driven identification, radio range rejection, interrupted and continuous defence, physical helicopter seating and the victory boundary. + +The diagnostic deliberately teleports the player and helicopter and makes the test player invulnerable. It does not establish manual escape/piloting, combat balance, multiplayer lifecycle or FPS improvement. Engine screenshots capture the rendered scene and do not prove the HUD/end-screen presentation. + +The original prison prototype had an unsuitable slope and a gate-opening mismatch. Read-only terrain and model-clearance scans selected an open site at 6090/7160. The gate now spans the three-metre opening. Walls have explicit hierarchy ownership, and equipment is placed on tables above vegetation. Final physical gate-passage and defeat checks are recorded separately below. + +## Remaining native issues + +The run is not a clean runtime pass. The report preserves errors rather than suppressing them: + +- Some restarts emit two catalog-manager errors associated with vanilla US and USSR medical-kit catalog objects. Read-only source inspection identified an inherited `SCR_BaseItemSupportStationComponent.OnDelete` validation path; the opt-in diagnostic now records the actual owner and manager state. The missing-manager teardown cause remains an inference until reproduced with that diagnostic. +- Vanilla vehicle resources emit unsupported fields: M151A2 `SlidingTrackMaterial`, and catalog-loaded BRDM2/BTR70 `Parent` entries. Validate the installed game/Tools resource compatibility before release. +- Vanilla UI slot/button warnings occur during end-screen setup, and inherited Everon initialization reports a radio-manager ordering warning. The successor creates its radio manager, but these warnings still need evaluation. + +The shared-map destruction exception and unsupported runtime destructible-wall errors from earlier prototypes no longer occur in the archived repeated-round run. + +No dedicated multiplayer, reconnect, spectator, twelve-player, operational support-controller, equivalent-workload performance or release-packaging acceptance has passed. The full acceptance ledger remains pending. + +## Final gate and victory regression + +[native-2026-09-19-003520](evidence/native-2026-09-19-003520/report.json) contains two completed rounds and 40 assertions, including `BaseDoorComponent.CanCharacterPass(0.6)` after unlocking. The actual result configuration returned "You escaped Everon" for the extracted player. The run had no script errors or virtual-machine exceptions. Seven inherited vehicle schema errors remain in the report, so its overall runtime result is deliberately nonzero. The source manifest matches the tested repository. + +A Workbench-only diagnostic briefly replaced the reflected end-screen class and caused an unknown-class resource error in an intermediate run. That diagnostic override was removed; the archived final run resolves the class and the victory title successfully. + +## Extraction loss and defeat restart + +[native-2026-09-19-003902](evidence/native-2026-09-19-003902/report.json) completed two helicopter-loss rounds and recorded 45 passing assertions, including startup of a third round before the test process stopped. Removing the empty extraction helicopter during extraction caused DEFEAT through the normal server tick, then the mission restarted and completed the same test again. The defeat end-screen configuration resolved without missing-screen errors. This is not an all-players-dead, unconsciousness, reconnect or multiplayer test. + +Four catalog-manager errors were recorded across the two restarts, alongside the inherited vehicle schema errors. The archive deliberately retains the failing overall native report. Both test processes were stopped; the user's pre-existing editor was left open. + +## Player death, identity roster and spectator restart + +[native-2026-09-19-011025](evidence/native-2026-09-19-011025/report.json) contains two completed death rounds with 20 passing assertions and no script/runtime exceptions. The fixture exercises native character death, transition into the local spectator camera, the all-dead grace interval, defeat and automatic restart. An isolated roster with a real living actor checks spent-life retention, disconnected survivor retention, duplicate identity rejection and reused connection IDs. It does not simulate an actual remote disconnect/reconnect. Seven inherited vehicle schema errors still fail the overall native report. + +This test ran on headless Gamescope at 1280×720/30Hz using a cloned disposable Proton prefix. The physical desktop contained only the user's pre-existing editor. `tools/headless_workbench.py` provides a bounded version of this runner, stopping on failure, timeout or the requested number of completions and preserving engine errors in its exit status. + +## Physical radio equipment and routing + +[native-2026-09-19-011738](evidence/native-2026-09-19-011738/report.json) completed two bounded headless rounds with 30 assertions and no script/runtime exceptions. Each authored six-person patrol now includes one vanilla RTO with a physical manpack. The test runs production uplink and downlink routes, then removes a receiving carrier's actual radio during transmission and verifies delivery fails. It does not insert a synthetic contact into HQ. Strategic response to native visual perception remains a separate test. Seven inherited vehicle schema errors remain. + +Both installed executable version resources report 1.8.0.13 (game Steam build 24903726; Tools build 24870687). The remaining schema errors are therefore not explained merely by different displayed version numbers. + +## Native sighting to HQ response + +[native-2026-09-19-012234](evidence/native-2026-09-19-012234/report.json) completed two headless rounds with 24 assertions. The real player was moved in front of a guard squad. Native perception generated a sighting; the production radio route delivered it to HQ; two different existing squads received downlinked orders and distinct search waypoints. The fixture did not inject HQ contacts or create response forces. Both rounds subsequently passed death, spectator and defeat. Two inherited catalog cleanup errors reappeared during restart; seven vehicle schema errors also remain. This is a scoped coordinator integration pass, not a clean native runtime pass. + +## Silent complete-loop regression + +[native-2026-09-19-013224](evidence/native-2026-09-19-013224/report.json) completed two headless escape rounds with 52 assertions and no script/runtime exceptions after the roster, spectator and radio-composition changes. Test audio was independently verified muted on the dedicated silent sink; other audio outputs were unchanged. Seven inherited vehicle schema errors remain. A preceding launch exited before gameplay with a host `double free or corruption` error; its raw diagnostics are retained in `native-2026-09-19-012838-host-crash` and are not counted as a successful run. + +## Physical mortar inventory checkpoint + +[native-2026-09-19-014052](evidence/native-2026-09-19-014052/report.json) completed two muted headless rounds with 30 assertions and no script/VM exceptions. Native inventories held exactly 27 HE shells across three crew plus a separate manpack operator. Deleting the shells did not replenish ammunition; deleting the gun and crew did not spawn replacements. Seven inherited vehicle schema errors remain. Firing, convoy rearming and multiplayer support acceptance are unverified. Further support migration is deferred while completing the base replacement. + +## Independent base escape + +[native-2026-09-19-015043](evidence/native-2026-09-19-015043/report.json) records two Core-only rounds and 26 assertions. The loaded-addon section contains engine core, vanilla Reforger and ERR_Core. Essential inventory-document recovery and discovered objective markers now belong to Core, with a separate base scenario identity. The scripted escape succeeds without AI, Intel, Chat or Map. Two catalog teardown errors and seven vehicle schema errors remain. This proves dependency separation and the exercised progression paths, not manual playability or multiplayer acceptance. + +[native-2026-09-19-015605](evidence/native-2026-09-19-015605/report.json) adds the native objective service: two Core-only rounds, 38 assertions, no script or VM exceptions. Tests verify prison task creation, previous-task completion, list-only search disclosure, changed instructions after radio discovery, countdown and reset after interrupted defence, physical extraction and restart. Seven inherited vehicle schema errors remain. These assertions inspect native task state; they do not establish the rendered UI quality or remote-client behavior. + +[native-2026-09-19-015947](evidence/native-2026-09-19-015947/report.json) checks the same Core changes with all companions loaded: one escape round, 26 assertions, no script/VM exceptions. Seven vehicle schema errors remain. The test retains physical document recovery, interrupted radio defence and actual helicopter occupancy while the core services own progression. + +[native-2026-09-19-020149](evidence/native-2026-09-19-020149/report.json) checks death/spectator/defeat with the new Core task lifecycle and companions loaded: one round, 10 assertions, no script/VM exceptions. Seven inherited vehicle schema errors remain. + +## Authored sites and finite scavenging + +[native-2026-09-19-022704](evidence/native-2026-09-19-022704/report.json) records two Core-only rounds with 62 assertions and no script/VM exceptions. The four configured sites prepare 52 physical stock entities; recursive inventory totals include native weapon attachments. The player transfers both targeted radio documents from the supply crate. Empty stock stays empty when preparation is queried again, and a destroyed crate remains absent. Radio progress, extraction and restart complete afterward. Both crate footprints pass bounded native model-clearance checks; the supply terrain sample spans 0.625 metres over six metres. Seven inherited vehicle schema errors remain. + +Earlier failed iterations are retained with their source hashes: attribute/callback compilation errors, unregistered storage, insufficient crate capacity, and use of a character-only inventory manager on a world container. The final controller uses the generic manager with explicit storage registration and an appropriately bounded weapon crate. These failures were corrected before the successful run; they are not hidden from the evidence archive. + +[native-2026-09-19-023120](evidence/native-2026-09-19-023120/report.json) repeats the new site flow with all companions loaded: two complete rounds and 52 assertions, including physical inventory transfers, interrupted radio defence and extraction. Templates now obtain location IDs entirely from definitions. The inherited catalog teardown pair and seven vehicle schema errors remain in the report, so this is not a clean runtime acceptance. + +[native-2026-09-19-023514](evidence/native-2026-09-19-023514/report.json) verifies radio integration after site ownership moved into Core: one muted headless round and 15 assertions, with no script/VM exceptions. All four authored six-person squads carry physical manpacks. Uplink and downlink work, and removing a receiving radio interrupts delivery. Native death, local spectator and all-dead defeat also pass. Seven inherited vehicle schema errors remain. + +## Injected base catalog and administration + +[native-2026-09-19-025539](evidence/native-2026-09-19-025539/report.json) completed two Core-only muted headless rounds and 92 assertions without script/VM exceptions. The physical prisoner and guard group match the injected catalog. Separate catalog mutations reject identical and unknown faction keys and a missing prisoner entry. Core's command service rejects unauthorized, malformed and out-of-range setting changes; valid commands save/read/restore the test duration. Escape, stock losses, objectives and restart still pass. Seven inherited vehicle schema errors remain. + +The command tests call the native server service directly. They do not prove remote RPC identity enforcement, command-panel usability or pre-spawn presentation. Earlier command extension ordering and compact conditional-return compilation failures are retained in `native-2026-09-19-025246-compile-failure` and `native-2026-09-19-025341-compile-failure`; both were corrected before this successful run. + +[native-2026-09-19-030156-expected-startup-failure](evidence/native-2026-09-19-030156-expected-startup-failure/report.json) contains four passing assertions for deliberately invalid faction setup. No players, sites or stock spawn; services stop; administrators can retrieve the cause; even an otherwise legal transition from preparation into prison is rejected. The fixture modifies only its in-memory catalog. The expected startup ERROR and seven inherited vehicle schema errors remain in the report. The preceding scoped run is retained in `native-2026-09-19-025951-expected-startup-failure`. This is failure-handling evidence, not clean runtime or remote UI acceptance. + +[native-2026-09-19-030347](evidence/native-2026-09-19-030347/report.json) completed two Core-only escape rounds and 102 assertions without script/VM exceptions. A native controller transition keeps the actual player unconscious at the radio for 35 seconds. The player still prevents all-dead defeat, cannot progress transmission, retains the same body and camera, and resumes defence from zero after consciousness is restored. The one-life rule remains spent. These checks repeat after restart alongside the catalog/administration checks. Seven inherited vehicle schema errors remain. This does not validate medical item use, treatment animation, bleeding or remote revive actions. + +[native-2026-09-19-030903](evidence/native-2026-09-19-030903/report.json) completed two companion-loaded rounds with 96 assertions and no script/VM exceptions. Existing HQ interval/squad/radius and Intel carrying/reveal aliases resolve through the Core command service; unauthorized journal access is rejected; HQ status is preserved. Both rounds also pass the catalog, base administration, physical intel, radio defence, helicopter escape and restart checks. Seven inherited vehicle schema errors remain. + +[native-2026-09-19-031256](evidence/native-2026-09-19-031256/report.json) records one companion-loaded death round and 32 assertions without script/VM exceptions. Native death retains the spent life, activates the local spectator camera and reaches all-dead defeat after the Core command initialization changes. Catalog and companion command checks also pass. Seven inherited vehicle schema errors remain; remote spectators and reconnects are still unverified. + +## Expanded scavenging route and spatial survey + +The read-only surveys in [031928](evidence/native-2026-09-19-031928-survey/report.json) and [032144](evidence/native-2026-09-19-032144-survey/report.json) inspected candidate terrain and obstacles. The initial 12-by-12-metre clearance requirement found no suitable candidates; using the actual 2.6-metre cache footprint found 19 western, 23 medical and 23 outpost candidates. Three low-slope sites were selected. No existing vanilla scenery or original missions were modified. + +The first expanded-route native compile failed on Enforce's unsupported compound assignment to an indexed vector value. [033036-failed](evidence/native-2026-09-19-033036-failed/report.json) retains that failure and its cascading compiler diagnostics. An explicit assignment fixed it. + +[033110](evidence/native-2026-09-19-033110/report.json) completed one Core-only cache-loss escape with 65 assertions and no script/VM exceptions. All seven sites and 117 authored stock items prepared successfully; deleting the southern crate before recovery left the western documents able to identify the radio and complete extraction. Named optional medical discovery rejected unconscious and distant players, then emitted one event after a conscious player approached. Both stock depletion and deleted containers stayed lost. Seven inherited vehicle schema errors remained. A later API check found two sandbag rotations used pitch instead of yaw; subsequent validation uses corrected upright barriers and actual collision traces. + +[033500-failed](evidence/native-2026-09-19-033500-failed/report.json) confirmed all three upright barriers had native collision, then failed the new blocked-discovery assertion. The fixture had placed the test wall by its end pivot, leaving the sight line at its edge. Existing native bounds showed the wall extends three metres from its origin; centering it across the sight line corrected the fixture. The failure is preserved rather than discarded. + + +[033719](evidence/native-2026-09-19-033719/report.json) completed two Core-only cache-loss escape/restart rounds with 148 passing assertions. All 117 stock items prepared each round. The three corrected outpost barriers were upright and native traces hit their collision. A centered physical wall prevented medical-site discovery; removing it allowed the conscious nearby player to reveal the named stash and emit one event. The alternate radio documents completed both rounds after the primary cache had been removed. There were no VM exceptions or failed smoke assertions. Two inherited catalog-manager script errors occurred during restart, alongside seven inherited vehicle schema errors, so the overall native report remains failed. These scoped checks do not establish manual navigation, medical treatment or multiplayer behavior. + + +[034344](evidence/native-2026-09-19-034344/report.json) completed one full-companion escape with 48 passing assertions and no script/VM exceptions. The expanded seven-site configuration prepares under HQ/Intel/Chat/Map; the southern cache's documents still complete the primary route with the existing command aliases, interrupted radio defence and physical extraction. Seven inherited vehicle schema errors remain. + + +[034556](evidence/native-2026-09-19-034556/report.json) completed the expanded guard-radio regression and death/defeat sequence with 37 passing assertions and no script/VM exceptions. All six physical six-person squads had manpacks; the selected production uplink/downlink delivered and deleting the receiver's actual radio interrupted an in-flight HQ order. The fixture also checked native death, local spectator activation and all-dead defeat. This does not prove every multi-hop route. Seven inherited vehicle schema errors remain. + +The three archives (033719, 034344 and 034556) match the 99 addon source/resource files at that historical checkpoint. All test processes were stopped. Source/resource checks pass for five isolated addons and 22 unique resources; the 533-file original-workspace reference guard remains unchanged. Manual gameplay, medical treatment, multiplayer, performance and clean-runtime release gates remain open. + +## Independent extraction and mission clock + +[040125](evidence/native-2026-09-19-040125/report.json) passed 60 capacity/partial-result assertions with twelve actual vanilla characters seated in separate positions in the authored Mi-8. The helicopter exposes seventeen pilot/passenger positions. The isolated roster distinguishes a dead occupant, a disembarked survivor, unconscious and reserved disconnected passengers, and a different identity reusing a connection ID. It freezes one outcome and does not replace lost transport. This fixture uses synthetic identities and explicitly requests its own test reset. + +[040443](evidence/native-2026-09-19-040443-expected-startup-failure/report.json) and [040657](evidence/native-2026-09-19-040657-expected-boundary-failure/report.json) each passed three negative-startup assertions. An unsuitable vanilla transport and an invalid extraction boundary respectively prevent gameplay, retain an admin-readable reason, withhold player spawns and remove the already-authored content. Both expected startup errors are preserved alongside inherited vehicle errors. + +[040928](evidence/native-2026-09-19-040928/report.json) passed 100 assertions with the integrated extraction, controller result and mission clock implementations. Real hidden vanilla result widgets update from the server-derived identity result and ignore stale winner IDs through isolated rebinding. The clock probe checks legacy settings migration without rewriting on load, explicit save/reload, invalid-value rejection, authorization, next-round-only changes and actual native clock advancement. No script/VM exceptions occurred; seven inherited vehicle schema errors remain. + +[041233](evidence/native-2026-09-19-041233/report.json) passed six assertions across two natural defeat/restart rounds. Removing the extraction helicopter during prison ends the mission while the actual prisoner remains alive and presents the specific loss reason. Two inherited catalog cleanup script errors and seven vehicle schema errors remain. + +These hidden, muted local tests establish the exercised service and native-object paths only. Remote delayed result replication, actual reconnects, twelve network clients, manual casualty loading/piloting, dedicated-server behavior and equivalent-workload performance remain unverified. + +[041445](evidence/native-2026-09-19-041445/report.json) completed two Core-only escape/restart rounds with 194 assertions and no script/VM exceptions. Both rounds applied the seeded **06:15 / 4x** settings and verified actual native clock advancement. Existing catalog/admin, stock, discovery, unconsciousness, radio and extraction checks still pass. The seeded input is archived as `test-settings.json`; all three private-profile settings files were restored byte-for-byte after the stopped run. Seven inherited vehicle schema errors remain. + +[042046](evidence/native-2026-09-19-042046/report.json) completed one companion-loaded escape with 48 assertions and no script/VM exceptions. Core, HQ, Intel, Chat and Map compile together; existing command aliases, physical documents, interrupted defence, extraction and the personal winner title still work. Seven inherited vehicle schema errors remain. + +Archives 040928, 041233, 041445 and 042046 match all 105 addon source/resource files at this checkpoint. Tests ran on the private hidden display with muted test audio and were stopped afterward. The original workspace's 533 tracked reference source/resource files remain unchanged. Repository policy/resource checks pass; clean-runtime, manual-play, multiplayer and performance release requirements remain open. + +## Base radio separation, native objective details and ground transport + +[042945](evidence/native-2026-09-19-042945-ui-refresh-failure/report.json) retained a real presentation failure: the native task description changed after radio discovery, while its already-open details widget remained stale. The list/details initialized correctly and showed no hidden task position. The successor now subscribes only its own open objective details to native display-data changes, with removal on task switch/detach. The later 044330 and 044608 runs pass the already-open detail update after discovery; their separate new radio fixture fails before completing the round, so whole-loop validation remains separate. + +[043410](evidence/native-2026-09-19-043410-parking-failure/report.json) rejected the first ground-transport parking position at 5960/7232 due to a native geometry obstruction. Preparation rolled back; the error was not suppressed. [043631](evidence/native-2026-09-19-043631-parking-survey/report.json) then surveyed 120 nearby positions with the transport temporarily omitted only in its fixture definition, finding 43 clear candidates without removing scenery. The selected southern position, 5960/7212, has a 0.625 m sampled terrain range over its six-metre square. This is placement evidence, not driving or navigation acceptance. + +[043806](evidence/native-2026-09-19-043806-transport-readiness-failure/report.json) retained a subsequent readiness failure after the parking point itself passed. The bounded diagnostic in [044028](evidence/native-2026-09-19-044028-transport-bounds-failure/report.json) showed native vehicle bounds extending 3.25 m from the surveyed center, exceeding the original 2.5 m allowance; actual origin displacement was only about 0.06 m. The configuration now requires an eight-metre cleared square and retains a 0.5 m margin around full native bounds. + +[044205](evidence/native-2026-09-19-044205/report.json) passes 23 native transport checks with no script/VM exceptions. Parking, five native driver/passenger positions, actual two-character occupancy, ordinary engine startup and finite fuel work. Native fuel starts at 58.5 L with 78 L capacity. Depleting fuel and deleting transport do not refill or recreate it, including repeated preparation/initialization queries. The fixture stops its site service and explicitly requests test reset. Seven inherited vehicle schema errors remain; this is not manual driving, road access or multiplayer acceptance. + +[044330](evidence/native-2026-09-19-044330-radio-fixture-failure/report.json) and [044608](evidence/native-2026-09-19-044608-radio-position-fixture-failure/report.json) preserve failures in a new radio-service fixture that immediately checked distance after moving its character. Switching to the native character teleport API alone did not resolve the check; the fixture is being made asynchronous so it observes applied native state before asserting it. These runs do not count as completed Core regressions. + +[044924](evidence/native-2026-09-19-044924/report.json) independently completes the established companion-loaded escape with 48 passing assertions and no script/VM exceptions. The production radio service accepts the identified nearby player, resets on departure, completes real-time continuous occupancy and advances to physical helicopter extraction. Existing command aliases, document recovery and personal results still work. Seven inherited vehicle schema errors remain. + +The offline performance comparator passes fifteen synthetic regressions and does not produce real benchmark evidence. Release qualification passes 46 validation regressions and correctly refuses the current ledger: all first-release cases remain pending and clean native runtime remains failed. Neither tool changes acceptance or publishes a package. + +[045450](evidence/native-2026-09-19-045450-radio-recovery-fixture-failure/report.json) confirms that deferred native movement resolves the distance assertions: the measured out-of-range position is 6.005 m from the radio and unconscious tuning is rejected. The next assertion fails during recovery. The test is being corrected to separate its overlapping characters and await native consciousness; no production authorization rule was weakened. + +[050158](evidence/native-2026-09-19-050158-lifecycle-compile-failure/report.json) preserves a compiler rejection of two ticket member names that collide with native type names. The members were renamed before further testing. + +[050240](evidence/native-2026-09-19-050240-lifecycle-reflection-failure/report.json) preserves the next integration failure: the WORKBENCH-only spawn-logic override needed to repeat its native container metadata. The corrected reflected class loads and starts an ordinary prisoner in [050403](evidence/native-2026-09-19-050403/report.json), which completes 54 lifecycle assertions without script/VM exceptions. Native geometry leaves 20 clear prison positions around the real prisoner; reserved slots remain distinct and inside the enclosure. A physical unowned body blocks its slot. Native finalization rejects spent-life and wrong-data requests, deletes only the owned unpossessed actor, preserves the actual prisoner, and rejects vertical displacement. The fixture explicitly ends its test; real remote preload, disconnect/reconnect and 12-client acceptance remain pending. Seven inherited vehicle schema errors remain. + +[050515](evidence/native-2026-09-19-050515/report.json) completes two Core escape/restart rounds with 340 assertions, no script/VM exceptions and seven inherited vehicle schema errors. The independent radio edge fixture now waits for real native recovery and passes physical defender handover, empty samples, hostile/unknown/dead actors, interrupted occupancy, live duration changes, cancellation and one-time completion. The ordinary real-time escape then succeeds twice through the new player-admission gate. Native task details update after discovery, advancing progress and interruption. Separate objective-close cleanup review follows; remote UI remains unverified. + +The opt-in station diagnostic identifies US/USSR medical-kit prefabs during `OnDelete/InitValidSetup` at restart. Both cached and global catalog references remain available in this run despite no current game mode, so the intermittent missing-manager error is not reproduced or declared fixed. + +Future native runs now snapshot addon files before process launch, compare sources after shutdown and seal the raw console log. Archival and release checks reject source/log mismatches. Older archives retain their original historical evidence; they cannot satisfy the new launch-provenance release requirement. + +[051249](evidence/native-2026-09-19-051249-companion-fixture-name-failure/report.json) preserves a companion compile failure from two WORKBENCH test helpers sharing a member name on the same extended game mode. The Core helper was renamed to avoid the pre-existing Chat radio-network probe. This is the first archive with mechanically verified pre-launch source, stopped source and raw-log hashes; the failed result remains failed. + +[051452](evidence/native-2026-09-19-051452/report.json) completes two Core escape/restart rounds with 374 assertions, no script/VM errors and seven inherited resource errors. Native objective close/rebind/reopen checks pass, including no retained task events or delayed overflow calls to the closed panel. The runner verifies identical pre-launch and stopped addon sources and seals the raw log. A subsequent ownership-flag change covers task deletion before panel closure and is checked separately by the short `objective-ui` fixture. + +[052140](evidence/native-2026-09-19-052140-deleted-task-callback-failure/report.json) preserves a remaining teardown failure: deleting an isolated native task clears its weak references and the panel detaches, but a delayed callback still reaches the retained test handler. The assertion remains failed while callback identity and queue state are investigated. + +[052352](evidence/native-2026-09-19-052352/report.json) completes the full companion escape with 48 assertions, no script/VM errors and verified launch/stopped-source/log hashes. The helper-name collision is fixed. Core admission, radio, physical intel, preserved admin aliases and extraction work with all companions. Seven inherited resource errors remain; the isolated task-deletion UI failure is separate and still open at this snapshot. + +[052621](evidence/native-2026-09-19-052621-deleted-task-callback-diagnostic/report.json) identifies the surviving callback as `UpdateAssignees`, invoked immediately when the real objective assignment is restored. Installed vanilla source declares all five task-event getters static; guarding their removal by a live task left the closed panel subscribed after task deletion. Cleanup now removes the static invoker subscriptions using retained successor-binding ownership. The unchanged delayed callback assertion is rerun rather than weakened. + +[052811](evidence/native-2026-09-19-052811/report.json) reaches all 30 UI assertions and completion after the static-event fix, but remains a failed runtime result: the added name-based queue diagnostic tries to inspect protected `CheckOverflow` and emits three VM exceptions. The normal function-based cancellation does not emit them. The invalid diagnostic is removed before final UI validation; its exceptions are retained in this archive and the preceding diagnostic run. + +[052932](evidence/native-2026-09-19-052932/report.json) completes the companion-loaded death/spectator/defeat fixture with 32 assertions, no script/VM exceptions and verified source/log provenance. Native damage kills the actual prisoner, activates the spectator camera and retains the spent life through the revised delayed observer callback. Seven inherited resource errors remain; remote reconnect and spectator streaming are still unverified. + +[053124](evidence/native-2026-09-19-053124/report.json) completes all 30 isolated UI assertions with no script/VM exceptions after removing the temporary name-based diagnostic. Real close/rebind/reopen, native weak-reference clearing after isolated task deletion, global event unsubscribe, delayed callback cancellation and restoration of the actual objective assignment all pass. Seven inherited resource errors remain. Its pre-launch/stopped source manifests match all 116 final addon files, and the stopped raw-log hash verifies. + +At this checkpoint, repository policy/resource checks, 15 synthetic performance-tool regressions and 46 release/provenance regressions pass. The actual release checker still refuses all 17 pending first-release cases plus failed clean native runtime. All private test runners are stopped. Manual equipment/medical/casualty gameplay, real multiplayer/preload/reconnect testing, operational support/logistics, equivalent-workload FPS measurements and release packaging remain unfinished. Historical archives describe their own source snapshots; they are not relabelled as final-source tests. + +## Native medicine and environment checkpoint + +[062406](evidence/native-2026-09-19-062406/report.json) passes 24 actual blood-loss and treatment assertions, including consumed dressing, one attached saline bag, duplicate rejection, native consciousness recovery and finite infusion completion. It retains the seven earlier inherited catalog errors. + +[063559](evidence/native-2026-09-19-063559/report.json) passes 67 environment and deliberately narrowed faction-catalog assertions, with **zero script/VM or engine errors**. The successor profiles preserve vanilla faction, item, medical and radio behavior but catalog only its UAZ and Mi8 vehicles. Clear/overcast/rain, leap dates and unchanged clock progression pass. Repeated-round teardown, current complete-loop regression, manual play and multiplayer remain separate checks. + +[063949](evidence/native-2026-09-19-063949/report.json) passes 155 combined assertions with zero engine errors. The revised 3m-spaced interior prison search accommodates one real controlled prisoner and eleven physical test characters. Each has the exact unique starting kit and can receive and return a real clue. Repeated inventory references are counted once by entity identity; distinct same-prefab objects remain distinct. This is physical placement and inventory evidence, not twelve-client multiplayer. + +[064406](evidence/native-2026-09-19-064406/report.json) passes 54 combined assertions with zero engine errors. Recovery status, stable event counts, survival beyond the all-dead grace, identity preservation and administrator authorization pass. Explicit abandonment while the all-incapacitated warning is active enters normal defeat and clears the warning during cleanup. + +[064716](evidence/native-2026-09-19-064716/report.json) retains an integration compile failure: a separate WORKBENCH modded layer could not expose its restart-probe field to the main fixture, and the patrol check passed an entity where a boolean was required. Both were corrected; [065233](evidence/native-2026-09-19-065233/report.json) compiles and reaches the patrol fixture, which stops on an unexpected repeated native queue reference. Its route interpretation remains under investigation rather than declaring traversal passed. + +[065351](evidence/native-2026-09-19-065351/report.json) passes two real environment/restart rounds, 107 assertions and **zero engine or script/VM errors**. Real mode settings save 2000-02-29 and Overcast, leave the current round untouched, and load/apply them in the next mode instance. Native clock progression remains unchanged; successful round two removes the private fixture files. Bounded station diagnostics show medical kits in backpack inventories outside the main world, consistent with catalog preview content; neither successor site ownership nor a teardown failure was observed in this run. Complete-loop regression and remote testing remain separate. + +[070733](evidence/native-2026-09-19-070733/report.json) passes 58 assertions with zero native errors after canonical participant validation is shared by discovery and radio authorization. The lost-document path deletes all four original clues, rejects distant/NPC/obstructed observers, and identifies the station once by actual close approach before authorized tuning. No replacement documents are created. + +[070919](evidence/native-2026-09-19-070919/report.json) passes 295 assertions with zero native errors. Preparation observes complete six-person membership of every original guard squad. Both existing patrol groups move and complete five ordered native Move events, crossing a cycle boundary, before route-only cleanup preserves a foreign Search. Startup queue enumeration repeats references that clear as waypoints complete; no production queue normalization was introduced. HQ preemption, manual gameplay and remote clients remain separate checks. + +[071654](evidence/native-2026-09-19-071654/report.json) passes 60 assertions with zero native errors. The partial-knowledge case transfers one real clue before losing all four documents, then verifies that close physical discovery still identifies the radio station and permits tuning. It does not duplicate documents or require zero prior knowledge. + +[072014](evidence/native-2026-09-19-072014/report.json) retains a casualty-loading readiness failure. Over ten seconds, the untouched parked Mi8 remains alive, upright and motionless, but its native helicopter simulation reports no ground contact. The real participant, helper, distance and visibility checks pass. Casualty loading is not yet qualified; physical landing-gear support is being investigated without accepting a stationary hover. + +[072609 ordinary game](evidence/game-2026-09-19-072609/report.json) preserves a failed private `ArmaReforgerSteamDiag.exe` launch. Its vanilla intro splash reports unknown `SCR_WidgetExportRuleRoot` before Game module compilation completes. GameLib reports `ENF_WB`; this run does not establish ordinary production compilation or mission startup. The runner stops only its own process group/prefix and confirms cleanup and unchanged addon bytes. + +[072700](evidence/native-2026-09-19-072700/report.json) retains an actual guard-cancellation failure: an initially empty fixture-owned automatic squad receives a late native dispatch after repeated preparation Stop. The ordinary six mission groups remain separate. This identifies an incomplete cancellation path; a one-time purge alone has not proved sufficient while the incomplete group remains alive. + +[072838](evidence/native-2026-09-19-072838/report.json) passes the companion HQ/patrol fixture: 272 assertions and zero native errors. The original outpost squad physically completes a route cycle, receives a real HQ Search through the delivered-order method, retains its patrol queue, and resumes physical cyclic movement after actual HQ release. No additional response force is created. This deliberately bypasses report radio transit and is not multiplayer proof. + +[073231 ordinary game](evidence/game-2026-09-19-073231/report.json) confirms that the regular executable omits editor/diagnostic GameLib defines, but reproduces the same vanilla intro-splash unknown-class error before Game compilation finishes. The failure remains fatal; further diagnostic collection must not turn it into a clean startup pass. + +[073313](evidence/native-2026-09-19-073313/report.json) preserves a compile failure in the new wheel-support helper: the native method is `Math3D.MatrixIdentity4`, not `MatrixIdentity`. After correction, [073423](evidence/native-2026-09-19-073423/report.json) compiles and proves that the sleeping, engine-off helicopter fails all three short wheel-support traces. Its wheel pivots resolve distinctly, but no supporting collision is found within the tight tolerance. This may be an initially unsettled vehicle on sloping ground; neither a stale contact flag nor a safely parked aircraft is assumed. Native placement/settling is being investigated. + +[073601](evidence/native-2026-09-19-073601/report.json) passes 68 native assertions with zero errors after retiring each cancelled instance's spawn intent before purging. The empty squad receives no dispatch/member; the partial squad keeps its one existing member and two prior dispatches unchanged for fifteen seconds while the independent control reaches six. Normal rollback deletes the seven captured actors and all three groups; another six seconds shows no delayed dispatch. Actual mission groups remain intact. + +[073806](evidence/native-2026-09-19-073806/report.json) passes two complete Core escape/restart rounds with 564 assertions and zero engine or script/VM errors. Both rounds exercise Core administration, canonical player admission, independent clue routes, real radio service boundaries, repeated unconsciousness/recovery, replicated-feedback source values and player-guide copy, native objective widgets, helicopter extraction and restart. New radio feedback moves through inactive/waiting/transmitting/interrupted/resumed/cleared states. Station teardown diagnostics remain enabled and no catalog error occurs. These are source-bound local scripted rounds; subsequent initial-helicopter placement changes, ordinary game, real clients and FPS remain separate. + +[074505 ordinary game](evidence/game-2026-09-19-074505/report.json) captures completed production Game compilation with no WORKBENCH/ENF_WB defines and no successor script compilation error. It remains a failed startup: the vanilla splash error persists, and the native executable crashes in `SpawnEntityPrefabEx` while expanding its first guard squad. The raw log reports no configuration for world-system initialization; the authored scenario header specifies vanilla MissionSystems. Launch/system configuration is therefore being investigated before another ordinary-game attempt. The private processes were stopped and source/log provenance verified; this is not a playable-startup pass. + +[074655](evidence/native-2026-09-19-074655/report.json) confirms the production one-shot placement wake: the original helicopter settles naturally, all three tire bottoms meet terrain within millimetres, native contact becomes true, fuel remains present, and only one wake occurs before prisoner spawning. Separate raised, tilted and moving aircraft are rejected. The complete run remains failed: its later casualty step stays conscious because the fixture disabled damage handling before its own resilience-damage request. The fixture is corrected to admit only that synchronous native request while retaining surrounding protection; no production health changes are made. + +[075014](evidence/native-2026-09-19-075014/report.json) preserves a native-removal fixture parse failure at a local variable named `reference`; it was renamed before further compilation. [075324 ordinary game](evidence/game-2026-09-19-075324/report.json) preserves a separate launcher compile failure: native `ArmaReforgerScripted` cannot own queued callbacks because it is not Managed. The queued transition is being moved into a managed helper; identity and mission admission are unchanged. + + +[075514](evidence/native-2026-09-19-075514/report.json) passes 87 casualty-service assertions with zero engine or script/VM errors. The original helicopter naturally settles after its one-shot initial wake, and separate unsafe-aircraft checks pass. The fixture's single admitted native damage operation incapacitates the actual controlled player; strict membership rejects the separate helper until the explicit helper-only adapter is enabled. External bench reservations and a physical wall prevent loading. Invoking the real action completion boundary then runs the local owner handshake, seats the living incapacitated player exactly once, releases the selected reservation and preserves identity. Duplicate completion and repeated Stop do not load or resolve again. The real controller takes the local fast path; helper identity is synthetic, action input is not held, legal phases are deliberately advanced, and the fixture requests reset. Remote RPC transit, pending-load deletion, manual play and multiplayer remain unverified. + +[080004 ordinary game](evidence/game-2026-09-19-080004/report.json) compiles production Game with neither WORKBENCH nor ENF_WB, requests the Core scenario header once, initializes vanilla MissionSystems, verifies the selected header and reaches `phase 0 -> 1`. No repeat of the earlier guard-spawn crash is captured. The run is still failed: two vanilla splash unknown-class errors remain and the local player cannot bind an identity, so spawn admission correctly stays closed. Header transition and mission preparation are observed, not clean startup, a controllable player or a completed escape. The runner confirms private-process cleanup and identical launch/stopped addon bytes; raw errors remain in the source-bound archive. This does not establish ordinary input, remote authentication, multiplayer or performance. + + +[080058](evidence/native-2026-09-19-080058/report.json) passes 66 native casualty-removal assertions with zero engine or script/VM errors. The existing `SCR_RemoveCasualtyUserAction` resolves the occupied Mi8 child bench, exterior `door_l01_door` context and native authored exit. The actual conscious caller passes action visibility/permission, then one direct completion call uses the stock `KickFromVehicle` path. A native exit event clears vehicle and seat occupancy; the still-living incapacitated test body settles within the unchanged observation bounds beside the exit, and the bench is accessible. Root horizontal error is 0.710329m and terrain clearance is 0.862961m after an earlier observation correctly fails the clearance bound. No post-boarding teleport, recovery or retry is introduced. Pre-removal isolated extraction occupancy passes; post-removal evidence concerns physical vacancy, not recalculating a frozen outcome. This fixture ends through its own reset and does not exercise held input, remote action transit or multiplayer. + +[080226](evidence/native-2026-09-19-080226/report.json) passes 37 companion-loaded native assertions with zero engine or script/VM errors. The actual mortar initializes four physical crew, a manpack operator and exactly 27 unique HE shells. Deleting that stock leaves it empty with zero confirmed shots; deleting the gun and crew leaves support permanently unavailable. This qualifies inventory identity deduplication and loss retention at the recorded source, not firing or later readiness/transfer changes. + +[game080528](evidence/game-2026-09-19-080528/report.json) verifies the narrowly gated diagnostic no-splash path, ordinary Game compilation, matching Core mission header/MissionSystems and preparation reaching PRISON without the earlier GUI errors or a captured crash. It remains failed on native offline identity binding: server, mode and local controller exist, but the returned identity is null. No identity bypass is applied. Normal visible splash UI and player input are not exercised. + +[080656](evidence/native-2026-09-19-080656/report.json) passes two complete Core escape/restart rounds, 564 assertions and zero engine or script/VM errors. This source includes the one-shot physical extraction-aircraft settling and the casualty service; normal base progression, inventory/discovery, radio interruption/recovery feedback, objective UI, boarding and result cleanup pass. It does not exercise held-input rescue, later ordinary admission diagnostics, later mortar changes or remote clients. + +[game081359](evidence/game-2026-09-19-081359/report.json) confirms the ordinary admission blocker precisely: native backend data is the well-formed 36-character all-zero UUID sentinel, which vanilla returns unchanged because it checks only string emptiness before its fallback. Mode is standalone None, a real local controller exists, and the unchanged strict roster rejects the null identity. The strengthened local-participant observer compiles without Workbench but correctly produces no pass marker. No authentication, identifier contents or name contents are logged. + +[081601](evidence/native-2026-09-19-081601/report.json) passes 89 native Core lifecycle assertions with zero engine or script/VM errors against revised prison placement and canonical participant checks. It remains a local fixture, not real remote preload/reconnect evidence. + +[081837](evidence/native-2026-09-19-081837/report.json) compiles the revised finite mortar readiness/transaction/firing code and new native firing probe with all companions. All 37 inventory/loss assertions pass with zero engine or script/VM errors. The journal confirms four original physical members and 27 completed shell requests before readiness; depletion and permanent loss remain correct. Actual transfer and projectile tests remain separate. diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/docs/vanilla-resources.json b/docs/evidence/dedicated-2026-09-19-083213/source/docs/vanilla-resources.json new file mode 100644 index 0000000..c4c65f3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/docs/vanilla-resources.json @@ -0,0 +1,105 @@ +{ + "Prefabs/Structures/Walls/Concrete/ConcreteWall_01/ConcreteWall_01_3m.et": "60E5729BEA18F875", + "Prefabs/Structures/BuildingParts/Doors/Door_Metal_A_RIGHT_EXT_COV_B.et": "67F17696FF278AE0", + "Prefabs/Items/Equipment/Radios/Radio_R107M.et": "54C68E438DD34265", + "Prefabs/MP/Modes/GameMode_Base.et": "0F307326459A1395", + "worlds/Eden/Eden.ent": "853E92315D1D9EFE", + "Prefabs/AI/SCR_AIWorld.et": "E0A05C76552E7F58", + "Prefabs/World/Game/PerceptionManager.et": "028DAEAD63E056BE", + "Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et": "589540B35EBA8CDC", + "Prefabs/MP/Managers/Loadouts/LoadoutManager_USxUSSR.et": "97EF4C1A41F63DDB", + "Configs/Systems/MissionSystems.conf": "C50579A2EC48E8EF", + "Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Unarmed.et": "2F912ED6E399FF47", + "Prefabs/Groups/OPFOR/Group_USSR_RifleSquad.et": "E552DABF3636C2AD", + "Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et": "DF5CCB7C0FF049F4", + "Prefabs/AI/Waypoints/AIWaypoint_SearchAndDestroy.et": "B3E7B8DC2BAB8ACC", + "Prefabs/AI/Waypoints/AIWaypoint_Defend.et": "93291E72AC23930F", + "Prefabs/Items/Misc/IntelligenceFolder_E_01/IntelligenceFolder_E_01.et": "6D56FED1E55A8F84", + "Configs/Map/MapPlain.conf": "A786DD4868598F15", + "Prefabs/Items/Core/Item_Base.et": "C95E11C60810F432", + "Assets/Items/Equipment/workspaces/paper_map.agr": "83675D0B0AB1B2C3", + "Assets/Items/Equipment/workspaces/player_map.asi": "56794534F6B8C3D7", + "Assets/Items/Equipment/Maps/Map_Paper_01/Map_Paper_01_folded.xob": "E443663E5241622A", + "Sounds/Items/_SharedData/PickUp/Items_PickUp_Map.acp": "13F8D0DE67678118", + "Prefabs/Weapons/Handguns/PM/Handgun_PM.et": "C0F7DD85A86B2900", + "Prefabs/Weapons/Magazines/Magazine_9x18_PM_8rnd_Ball.et": "8B853CDD11BA916E", + "Prefabs/Items/Equipment/Maps/Map_Paper_01/PaperMap_01_folded.et": "13772C903CB5E4F7", + "system/textures/defWhite.edds": "A64A8C63E0FBAE87", + "Configs/Navmesh/Navmesh_GM_Eden_Soldier.conf": "8BBC73472092902E", + "Configs/Navmesh/Navmesh_GM_Eden_Vehicle.conf": "0228A79846FD8A97", + "worlds/MP/Navmeshes/LowResEden.nmn": "5E19E60F26327356", + "Assets/Items/Equipment/Radios/Radio_R107M/Radio_R107M_01_item.xob": "77C9FCF3FB1246E9", + "Prefabs/Systems/Radio/RadioManager.et": "B8E09FAB91C4ECCD", + "Prefabs/MP/ScriptedChatEntity.et": "F69BC912AC8236F9", + "Prefabs/Structures/BuildingParts/Doors/Door_MetalGate_01_Short_LEFT_EXT_ST_B.et": "34B08027DBDE322A", + "Prefabs/Props/Furniture/Table_01.et": "53506DCB398C7EBE", + "Assets/Structures/Walls/Concrete/ConcreteWall_01_3m.xob": "0B96D139FEBCA006", + "Configs/GameOverScreen/BaseGameOverScreensConfig.conf": "651583FFFB7FC765", + "UI/layouts/HUD/GameOver/EndScreen/EndScreenContent_NoImage.layout": "C4507D07F3C54831", + "Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SL.et": "5436629450D8387A", + "Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_RTO.et": "612F43A4D5AE765F", + "Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AR.et": "23ADBBC31B6A3DC6", + "Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_AT.et": "1C78331E156A3D65", + "Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_SR.et": "333DA6244C7DA34C", + "Prefabs/Characters/Factions/OPFOR/USSR_Army/Character_USSR_LAT.et": "BF643BE4ADBDFDD3", + "Prefabs/Weapons/Mortars/2B14/Mortar_2B14.et": "D1FFE458E8AC4BDB", + "Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et": "98EC9C526AFBA282", + "Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et": "86E565387A634103", + "Prefabs/Items/Equipment/Radios/Radio_R148.et": "E1A5D4B878AA8980", + "Prefabs/Groups/OPFOR/Group_USSR_Base.et": "8DE0C0830FE0C33D", + "Prefabs/Tasks/BaseTask.et": "1D0F815858EE24AD", + "Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et": "EBBC859CCD94D96D", + "Prefabs/Weapons/Rifles/AK74/Rifle_AK74.et": "FA5C25BF66A53DCF", + "Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et": "BBB50A815A2F916B", + "Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_USSR_01.et": "C3F1FA1E2EC2B345", + "Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/EquipmentBoxWooden_Weapon_01.xob": "819ED3266EE5113B", + "Assets/Props/Military/AmmoBox/EquipmentBoxWooden_01/Data/EquipmentBoxWooden_Weapon_01_USSR.emat": "7D2E831AFA5CF50D", + "Assets/Props/Military/Sandbags/Data/Sandbags_01_Burlap_MLOD.emat": "2169E8EB73E1C127", + "Assets/Props/Military/Sandbags/Data/Sandbags_01_short_Burlap.emat": "31529E064AA7C917", + "Assets/Props/Military/Sandbags/Sandbag_01_short.xob": "268DBDABB3C94AD7", + "Prefabs/Items/Equipment/Binoculars/Binoculars_B8/Binoculars_B8.et": "243948B23D90BECB", + "Prefabs/Items/Medicine/MorphineInjection_01/MorphineInjection_01.et": "0D9A5DCF89AE7AA9", + "Prefabs/Items/Medicine/SalineBag_01/SalineBag_USSR_01.et": "527D7C5D2E476BDC", + "Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et": "259EE7B78C51B624", + "UI/layouts/Task/TaskListEntry.layout": "B71975032150BAFB", + "UI/layouts/Task/TaskListEntryDescription.layout": "552EB1921B5C548C", + "Prefabs/Characters/Factions/BLUFOR/US_Army/Character_US_Base.et": "836E7E39AAC5888B", + "Prefabs/Items/Equipment/Watches/Watch_SandY184A.et": "78ED4FEF62BBA728", + "Prefabs/Characters/HeadGear/Hat_Patrol_US_01/Hat_Patrol_US_01.et": "F545C1BE7C99954A", + "Prefabs/Characters/Uniforms/Jacket_US_BDU_rolledup.et": "3CCA7A9BB4FD3197", + "Prefabs/Characters/Uniforms/Pants_US_BDU.et": "604BB72BE8E023C2", + "Prefabs/Characters/Footwear/CombatBoots_US_01.et": "DAAFD15478BDE1C3", + "Prefabs/Items/Medicine/FieldDressing_01/FieldDressing_US_01.et": "A81F501D3EF6F38E", + "Prefabs/Items/Medicine/Tourniquet_01/Tourniquet_US_01.et": "D70216B1B2889129", + "Configs/Factions/BLUFOR.conf": "E7B7EA4823DD81F0", + "UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USA.edds": "EB7F65DBC9392557", + "Configs/Identities/FactionIdentity_US.conf": "B600946E9ACC17C2", + "UI/Textures/Flags/US-flag-base-3it.edds": "46FB2FB2C2125A3C", + "Assets/Props/Fabric/Flags/Data/Flag_1_2_USA.emat": "610803CC3F3D6649", + "Configs/Callsigns/Callsigns_US.conf": "CB7824D572DD0D5C", + "Configs/EntityCatalog/US/Characters_EntityCatalog_US.conf": "B56E8B4D4B195559", + "Configs/EntityCatalog/US/Groups_EntityCatalog_US.conf": "4E70E7C4C2C17D4A", + "Configs/EntityCatalog/US/WeaponTripod_EntityCatalog_US.conf": "0E4B62F186F97C43", + "Configs/EntityCatalog/US/InventoryItems_EntityCatalog_US.conf": "5F7EC52FC40A03E2", + "Configs/EntityCatalog/US/SupplyContainerItems_EntityCatalog_US.conf": "0BF36EFF9FFAF92B", + "Configs/Identities/Territories/FactionHomeTerritory_US.conf": "B548A5B264939A98", + "Configs/Factions/OPFOR.conf": "B122E3B10BB3404B", + "UI/Textures/Editor/EditableEntities/Factions/EditableEntity_Faction_USSR.edds": "40B12B0DF911B856", + "Configs/Identities/FactionIdentity_USSR.conf": "FBBCD73926989580", + "UI/Textures/Flags/USSR-flag-base-3it.edds": "50824EB9F2C215AB", + "Assets/Props/Fabric/Flags/Data/Flag_1_2_SovietArmy.emat": "B47B52D9DA68905D", + "Configs/Callsigns/Callsigns_USSR.conf": "958043CE1648EC43", + "Configs/EntityCatalog/USSR/Characters_EntityCatalog_USSR.conf": "3B679F1799D55F6F", + "Configs/EntityCatalog/USSR/Groups_EntityCatalog_USSR.conf": "37D5B75AAC3E72EA", + "Configs/EntityCatalog/USSR/WeaponTripod_EntityCatalog_USSR.conf": "DDF17C8C140BD1F2", + "Configs/EntityCatalog/USSR/InventoryItems_EntityCatalog_USSR.conf": "C53421647C3D0D2E", + "Configs/EntityCatalog/USSR/SupplyContainerItems_EntityCatalog_USSR.conf": "B4CA6761AC935808", + "Configs/Identities/Territories/FactionHomeTerritory_USSR.conf": "31FC78AF00523A99", + "Prefabs/MP/Managers/Factions/FactionManager_Base.et": "A242612865F2A48E", + "UI/Textures/DeployMenu/Loadout-BG/Loadout_US_BG.imageset": "F8AC305446D5D480", + "UI/Textures/DeployMenu/Loadout-BG/Loadout_BG_USSR.imageset": "21533F2089005056", + "Prefabs/Items/Medicine/SalineBag_01/SalineBag_US_01.et": "00E36F41CA310E2A", + "Prefabs/Items/Equipment/Radios/Radio_ANPRC77.et": "9B6B61BB3FE3DFB0", + "Prefabs/AI/Waypoints/AIWaypoint_Move.et": "750A8D1695BD6998", + "Prefabs/AI/Waypoints/AIWaypoint_Cycle.et": "35BD6541CBB8AC08" +} diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/helicopter_availability_regression.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/helicopter_availability_regression.py new file mode 100644 index 0000000..58e24bd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/helicopter_availability_regression.py @@ -0,0 +1,19 @@ +from pathlib import Path +from policy_harness import body,run +ROOT=Path(__file__).resolve().parents[1] +s=body(ROOT/'addons/ai/Scripts/Game/ERR/ERR_HelicopterAvailability.c','string Check(') +run('#include \n#include \nusing std::string;\nstruct Availability {float m_fGroundedSince=-1;\n'+s+'''}; +int main(){ + Availability a; + assert(a.Check(0,0,false,false,true,false,false,0,0).empty()); + assert(!a.Check(0,0,true,false,true,false,false,0,0).empty()); + assert(a.Check(20000,0,false,false,true,false,false,0,0).empty()); + assert(a.Check(79999,0,false,false,true,false,false,0,0).empty()); + assert(!a.Check(80000,0,false,false,true,false,false,0,0).empty()); + assert(a.Check(81000,0,false,false,true,true,false,0,0).empty()); + assert(a.Check(82000,0,false,false,true,false,true,0,0).empty()); + assert(!a.Check(82000,0,false,true,true,false,false,0,0).empty()); + assert(!a.Check(82000,0,false,false,false,false,false,0,0).empty()); +} +''') +print('PASS: migrated aircraft availability policy (controller migration still pending)') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/hq_network_regression.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/hq_network_regression.py new file mode 100644 index 0000000..e17614a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/hq_network_regression.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +"""Execute production bounded radio graph and hop-delivery state machine.""" +from pathlib import Path +import re, subprocess, tempfile +ROOT=Path(__file__).resolve().parents[1] +source=(ROOT/'addons/ai/Scripts/Game/ERR/ERR_HQNetwork.c').read_text() +def extract(signature): + a=source.index(signature);b=source.index('{',a);end=b+1;depth=1 + while depth:depth+=(source[end]=='{')-(source[end]=='}');end+=1 + return source[a:end] +def trans(s): + s=re.sub(r'//[^\n]*','',s).replace('protected ','').replace('null','nullptr') + s=s.replace('string.Format','Format').replace('string ', 'std::string ') + s=s.replace('Math.Round(distance).ToString()', 'std::to_string(int(distance))') + s=re.sub(r'\b(\w+)\.ToString\(\)',r'std::to_string(\1)',s) + for name in ['Math','vector']:s=s.replace(name+'.',name+'::') + for typ in ['IEntity','SCR_AIGroup','ERR_HQRoute','ERR_HQRadioNode','ERR_HQJournal']: + s=re.sub(r'\b'+typ+r' (\w+)',typ+r'* \1',s) + s=s.replace('array queue = {}','Arr queue').replace('array cell','Arr* cell').replace('array neighbors','Arr* neighbors') + s=s.replace('cell = {};','cell = new Arr();') + s=re.sub(r'foreach\s*\(int (\w+) : neighbors\)',r'for (auto \1 : *neighbors)',s) + for name in ['carrier','caller','node','route','journal','cell']: + s=s.replace(name+'.',name+'->') + s=re.sub(r'(Nodes|m_Nodes)\[([^\]]+)\]\.',r'\1[\2]->',s) + s=s.replace('Carrier.GetOrigin()', 'Carrier->GetOrigin()') + s=re.sub(r'\b(int|float|bool) (\w+);',r'\1 \2{};',s) + return s +headers=r''' +#include +#include +#include +#include +#include +#include +#include +struct vector{float v[3]{};float operator[](int i)const{return v[i];}static float DistanceXZ(vector a,vector b){return std::hypot(a[0]-b[0],a[2]-b[2]);}}; +vector V(float x,float z=0){return {{x,0,z}};} +namespace Math{int Floor(float x){return std::floor(x);}} +std::string Format(const char*,int x,int z){return std::to_string(x)+":"+std::to_string(z);} +templatestruct Arr:std::vector{int Count(){return this->size();}bool IsEmpty(){return this->empty();}void Clear(){this->clear();}void Insert(T x){this->push_back(x);}void InsertAt(T x,int i){this->insert(this->begin()+i,x);}}; +templatestruct Map:std::map{void Clear(){this->clear();}bool Contains(K k){return this->count(k);}bool Find(K k,V& v){if(!Contains(k))return false;v=this->at(k);return true;}V Get(K k){if(!Contains(k))return {};return this->at(k);}void Insert(K k,V v){(*this)[k]=v;}}; +struct SCR_AIGroup{bool enemy=true;};struct IEntity{vector pos;bool alive=true;int radio=1;bool captured=false;vector GetOrigin(){return pos;}}; +struct ERR_HQRadioNode{IEntity* Carrier{};SCR_AIGroup* Group{};int UnitId{},Capability{};bool Valid(bool manpack=false){return Carrier&&Carrier->alive&&!Carrier->captured&&Carrier->radio>=(manpack?2:1);}std::string Label(){return "unit "+std::to_string(UnitId);}}; +struct ERR_HQJournal{Arr events;void Write(std::string kind,std::string text,int){events.Insert(kind+" "+text);}}; +''' +routefields='Arr Nodes;bool Downlink{},Sending{},Failed{};int Cursor{},MessageId{};float Due{},StartedAt=-1;vector SentFrom;std::string Payload;' +networkfields='Arr m_Nodes;Arr m_Parents,m_Depths;Map m_Indices;Map*> m_Cells;bool Overflow{};' +route='struct ERR_HQRoute{'+routefields+'\n'+'\n'.join(trans(extract(x)) for x in ['int Advance(', 'protected string SenderLabel(', 'protected int Fail('])+'};\n' +network='struct Network{'+networkfields+'\n'+'\n'.join(trans(extract(x)) for x in ['void Clear(', 'protected string Cell(', 'void Add(', 'void Build(', 'ERR_HQRoute Route('])+'};\n' +tests=r''' +int main(){ + Network network;SCR_AIGroup group;IEntity c[5];for(int i=0;i<5;i++)c[i].pos=V(i*500); + c[0].radio=2;for(int i=0;i<5;i++)network.Add(&c[i],&group,37+i,c[i].radio);network.Build(); + assert(network.Route(&c[0])->Nodes.Count()==1);assert(network.Route(&c[3])->Nodes.Count()==4);assert(!network.Route(&c[4])); + ERR_HQJournal journal;auto up=network.Route(&c[2]);assert(up->Nodes.Count()==3); + assert(up->Advance(0,&journal)==0);assert(up->Advance(1999,&journal)==0);assert(up->Advance(2000,&journal)==0); + c[2].alive=false;assert(up->Advance(4000,&journal)==0);c[0].alive=false;assert(up->Advance(6000,&journal)==1); + assert(journal.events.back().find("HQ received")!=std::string::npos); // cannot recall an emitted uplink + for(auto& carrier:c)carrier.alive=true; + auto lost=network.Route(&c[2]);assert(lost->Advance(0,&journal)==0);c[1].radio=0;assert(lost->Advance(2000,&journal)==-1);assert(lost->Advance(4000,&journal)==-1); + c[1].radio=1;auto moving=network.Route(&c[2]);moving->Advance(0,&journal);c[1].pos=V(499);assert(moving->Advance(2000,&journal)==-1);c[1].pos=V(500); + auto down=network.Route(&c[2],true);assert(down->Nodes[0]->Carrier==&c[0]);assert(down->Advance(0,&journal)==0); + assert(down->Advance(2000,&journal)==0);assert(down->Advance(4000,&journal)==0);assert(down->Advance(6000,&journal)==1); + auto captured=network.Route(&c[2],true);captured->Advance(0,&journal);c[0].captured=true;assert(captured->Advance(2000,&journal)==-1);c[0].captured=false; + auto timeout=network.Route(&c[2]);timeout->Advance(0,&journal);assert(timeout->Advance(30001,&journal)==-1); + Network disconnected;disconnected.Add(&c[1],&group,1,1);disconnected.Build();assert(!disconnected.Route(&c[1])); + Network boundary;c[1].pos=V(501);boundary.Add(&c[0],&group,1,2);boundary.Add(&c[1],&group,2,1);boundary.Build();assert(!boundary.Route(&c[1])); + network.Clear();assert(!network.Route(&c[0])); + Network crowded;std::vector many(2050);for(auto& carrier:many){carrier.radio=2;crowded.Add(&carrier,&group,1,2);}assert(crowded.Overflow&&crowded.m_Nodes.Count()==2048); + crowded.Build();assert(crowded.Overflow); // bounded dense graph work + std::cout<<"PASS: real-carrier shortest-hop paths, 500m boundary, three-hop cap, no-manpack failure, hop timing, emitted-message survival, radio loss, capture, motion, timeout, reset and network bounds\n"; +} +''' +with tempfile.TemporaryDirectory(prefix='eai-hq-network-') as tmp: + cpp=Path(tmp)/'test.cpp';exe=Path(tmp)/'test';cpp.write_text(headers+route+network+tests) + subprocess.run(['g++','-std=c++17','-Wall','-Wextra',str(cpp),'-o',str(exe)],check=True) + subprocess.run([str(exe)],check=True) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/mortar_salvo_regression.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/mortar_salvo_regression.py new file mode 100644 index 0000000..588f874 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/mortar_salvo_regression.py @@ -0,0 +1,21 @@ +from pathlib import Path +from policy_harness import body,run +ROOT=Path(__file__).resolve().parents[1] +s=body(ROOT/'addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c','static vector Offset(').replace('Math.','Math::') +run('''#include +#include +struct vector { float x,y,z;}; +vector Vector(float x,float y,float z){return {x,y,z};} +namespace Math {constexpr float DEG2RAD=0.01745329252;float Sqrt(float n){return std::sqrt(n);}float Sin(float n){return std::sin(n);}float Cos(float n){return std::cos(n);}} +constexpr int ROUNDS=8;constexpr float RADIUS_METRES=40; +'''+s+''' +int main(){for(int site=0;site<4;site++)for(int order=0;order<10;order++){ + float previous=0; + for(int shot=0;shot<8;shot++){ + auto a=Offset(site,order,shot),b=Offset(site,order,shot); + assert(a.x==b.x&&a.z==b.z&&a.y==0); + float radius=std::hypot(a.x,a.z);assert(radius>previous&&radius<=40.0001);previous=radius; + } +}} +''') +print('PASS: migrated salvo offsets are deterministic, spread and bounded (firing controller pending)') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/policy_harness.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/policy_harness.py new file mode 100644 index 0000000..8d5739c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/policy_harness.py @@ -0,0 +1,14 @@ +"""Execute actual Enforce policy bodies as C++, without claiming engine coverage.""" +from pathlib import Path +import subprocess,tempfile,re +ROOT=Path(__file__).resolve().parents[1] +def body(path,signature): + s=path.read_text();a=s.index(signature);b=s.index('{',a);i=b+1;depth=1 + while depth: + depth+=(s[i]=='{')-(s[i]=='}');i+=1 + return s[a:i] +def run(code): + with tempfile.TemporaryDirectory(prefix='err-policy-') as tmp: + p=Path(tmp);(p/'check.cpp').write_text(code) + subprocess.run(['g++','-std=c++17','-Wall','-Werror',str(p/'check.cpp'),'-o',str(p/'check')],check=True) + subprocess.run([str(p/'check')],check=True) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_admin_setting_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_admin_setting_policy.py new file mode 100644 index 0000000..c7b9f1b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_admin_setting_policy.py @@ -0,0 +1,35 @@ +"""Exercise actual Core alias, integer parsing and settings-boundary bodies. +Native dispatch/storage and remote ownership remain separate tests. +""" +from policy_harness import ROOT,body,run +admin=ROOT/'addons/core/Scripts/Game/ERR/ERR_AdminService.c' +settings=ROOT/'addons/core/Scripts/Game/ERR/ERR_Settings.c' +rules='\n'.join(body(path,sig) for path,sig in ((admin,'static string CoreSetting('),(admin,'static bool Integer('),(settings,'static bool Valid('))) +rules=(rules.replace('string ', 'std::string ').replace('out int ', 'int& ') + .replace('text.Length()', 'int(text.size())').replace('.IsEmpty()', '.empty()') + .replace('.Substring(', '.substr(').replace('"0123456789".IndexOf(', 'std::string("0123456789").find(') + .replace(' < 0) return false;', ' == std::string::npos) return false;').replace('text.ToInt()', 'std::stoi(text)')) +run('#include \n#include \n'+rules+r''' +int main(){ + assert(CoreSetting("intel","reveal")=="intelRevealChancePercent"); + assert(CoreSetting("mission","radio")=="radioDefenceSeconds"); + for(std::string section:{"", "hq", "mission", "intel", "unknown"}) + for(std::string option:{"", "interval", "carrying", "radio", "reveal", "unknown"}){ + bool recognized=(section=="intel"&&option=="reveal")||(section=="mission"&&option=="radio"); + assert(CoreSetting(section,option).empty()==!recognized); + } + int parsed=-1; + for(std::string malformed:{"", "-1", "+1", "1.0", "10junk", "1e2", "0x10", " 50", "50 ", "1234567"}) + assert(!Integer(malformed,parsed)); + for(int value=0;value<=101;++value){ + assert(Integer(std::to_string(value),parsed)&&parsed==value); + assert(Valid(CoreSetting("intel","reveal"),parsed)==(value<=100)); + } + assert(Integer("000050",parsed)&&parsed==50); + assert(Integer("999999",parsed)&&!Valid("intelRevealChancePercent",parsed)); + assert(!Valid("intelRevealChancePercent",-1)); + assert(Valid("radioDefenceSeconds",30)&&Valid("radioDefenceSeconds",1800)); + assert(!Valid("radioDefenceSeconds",29)&&!Valid("radioDefenceSeconds",1801)); +} +''') +print('PASS: Core document-discovery alias, companion-only alias exclusion, strict integer parsing and setting boundaries') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_ground_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_ground_policy.py new file mode 100644 index 0000000..775c4da --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_ground_policy.py @@ -0,0 +1,17 @@ +from policy_harness import ROOT, body, run +import re +source = body(ROOT/'addons/core/Scripts/Game/ERR/ERR_CasualtyGroundSupport.c', 'static bool SupportHit(') +source = re.sub(r'(?\n' + source + ''' +int main() { + assert(SupportHit(0,1,false,false)); + assert(SupportHit(0.999,0.85,false,false)); + assert(!SupportHit(1,1,false,false)); // no hit is no support + assert(!SupportHit(-0.01,1,false,false)); + assert(!SupportHit(0.5,0.849,false,false)); + assert(!SupportHit(0.5,-1,false,false)); + assert(!SupportHit(0.5,1,true,false)); // own landing gear cannot support itself + assert(!SupportHit(0.5,1,false,true)); // player/vehicle is not static parking support +} +''') +print('PASS: actual short-cast hit, upward support normal, no self support and no dynamic support') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_incapacitation.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_incapacitation.py new file mode 100644 index 0000000..5fb514e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_incapacitation.py @@ -0,0 +1,45 @@ +"""Run the actual fixture method against a narrow native-damage API fake.""" +from policy_harness import ROOT, body, run +p=ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c' +method=body(p,'protected bool IncapacitateGroundCasualty(') +method=method.replace('protected bool','bool').replace('m_Damage.','m_Damage->').replace('resilience.','resilience->').replace('ERR_Actors.','ERR_Actors::').replace('null','nullptr') +run(''' +#include +#include +struct NativeHitZone { float health=100; float GetHealth(){return health;} }; +using HitZone=NativeHitZone*; +struct Actor { bool alive=true; }; +struct Damage { + NativeHitZone resilience; bool enabled=true, missing=false, swallow=false; int forces=0; + HitZone GetResilienceHitZone(){return missing ? nullptr : &resilience;} + bool IsDamageHandlingEnabled(){return enabled;} + void EnableDamageHandling(bool value){enabled=value;} + void ForceUnconsciousness(){forces++; if(enabled && !swallow)resilience.health=0;} +}; +struct ERR_Actors {static bool Alive(Actor* actor){return actor && actor->alive;}}; +Actor* m_Casualty; Damage* m_Damage; +bool Check(bool value,const char*){return value;} +template void PrintFormat(const char*,Args...){} +'''+method+''' +int main(){ + Actor actor; m_Casualty=&actor; + for(bool original:{false,true}) { + Damage damage; m_Damage=&damage; damage.enabled=original; + assert(IncapacitateGroundCasualty()); + assert(damage.forces==1 && damage.resilience.health==0 && actor.alive); + assert(damage.enabled==original); + // No second artificial reduction: already-zero initial state must fail. + assert(!IncapacitateGroundCasualty()); + assert(damage.enabled==original); + } + Damage blocked; blocked.enabled=false; blocked.swallow=true; m_Damage=&blocked; + assert(!IncapacitateGroundCasualty()); + assert(blocked.forces==1 && !blocked.enabled && actor.alive); + Damage missing; missing.missing=true; m_Damage=&missing; + assert(!IncapacitateGroundCasualty() && missing.forces==0); + m_Damage=nullptr; assert(!IncapacitateGroundCasualty()); + Damage dead; m_Damage=&dead; actor.alive=false; + assert(!IncapacitateGroundCasualty() && dead.forces==0); +} +''') +print('PASS: actual fixture method permits one native resilience operation and restores either prior protection state, including failure paths') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_loading_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_loading_policy.py new file mode 100644 index 0000000..9243e9b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_loading_policy.py @@ -0,0 +1,41 @@ +from policy_harness import ROOT, body, run +import re +path = ROOT/'addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c' +source = '\n'.join(body(path, signature) for signature in [ + 'static int RoundAction(', 'static bool ObserveTicket(', 'static bool Within(', 'static bool SettledFor(', 'static bool Ranges(', 'static bool AircraftMotion(']) +# Enforce float literals are single precision; C++ otherwise promotes these to doubles. +source = re.sub(r'(?\n' + source + ''' +int main() { + assert(RoundAction(0)==0); // pre-start roster callbacks must not latch Stop + for (int phase=1;phase<=4;phase++) assert(RoundAction(phase)==1); + assert(RoundAction(5)==2); assert(RoundAction(6)==2); + for (int flags=0;flags<8;flags++) { + bool committed=flags&1, physical=flags&2, authorized=flags&4; + bool keep=physical && (committed || authorized); + assert(ObserveTicket(committed,physical,authorized)==keep); + } + assert(ObserveTicket(true,true,false)); // disconnect after irreversible commit retains seat + assert(!ObserveTicket(false,true,false)); // before commit it cancels + // A late/reordered/expired lease cannot authorize a native entry. + assert(Within(1000,1000,3000)); assert(Within(1000,3999,3000)); + assert(!Within(1000,4000,3000)); assert(!Within(1000,999,3000)); + assert(!Within(2147483000,-2147483000,3000)); + // A continuous observation window needs both sufficient settling and fresh data. + assert(!SettledFor(-1,5000,5000)); assert(!SettledFor(1000,5999,5999)); + assert(SettledFor(1000,6000,6000)); assert(SettledFor(1000,6000,7999)); + assert(!SettledFor(1000,6000,8000)); assert(!SettledFor(1000,6000,5999)); + assert(!SettledFor(6000,6000,6000)); // recovered/moving body starts a new window + // Every participant must independently be inside the physical rescue range. + assert(Ranges(3,12,12)); assert(!Ranges(3.01,12,12)); + assert(!Ranges(3,12.01,12)); assert(!Ranges(3,12,12.01)); + assert(!Ranges(-1,0,0)); assert(!Ranges(0,-1,0)); assert(!Ranges(0,0,-1)); + // Contact alone cannot authorize an airborne, inverted, sliding or turning craft. + assert(AircraftMotion(true,1,0,0)); assert(AircraftMotion(true,0.85,0.5,0.1)); + assert(!AircraftMotion(false,1,0,0)); assert(!AircraftMotion(true,-1,0,0)); + assert(!AircraftMotion(true,0.849,0,0)); assert(!AircraftMotion(true,1,0.501,0)); + assert(!AircraftMotion(true,1,0,0.101)); +} +''') +print('PASS: rescue lease expiry/reordering, fresh five-second settling, independent rescue ranges and grounded upright aircraft motion boundaries') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_remove_probe.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_remove_probe.py new file mode 100644 index 0000000..0671b4e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_remove_probe.py @@ -0,0 +1,43 @@ +"""Fixture boundaries and actual safe-exit policy; not an engine substitute.""" +from policy_harness import ROOT, body, run +import re +source = ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c' +method = body(source,'static bool SafeExit(') +method = re.sub(r'(?\n'+method+''' +int main() { + assert(SafeExit(0,0)); + assert(SafeExit(1.25,-0.25)); + assert(SafeExit(1.25,1.5)); + assert(!SafeExit(1.251,0)); + assert(!SafeExit(-0.01,0)); + assert(!SafeExit(1,-0.251)); + assert(!SafeExit(1,1.501)); +} +''') +text=source.read_text() +assert text.startswith('#ifdef WORKBENCH') +assert 'GetContextIndex("door_l01_door") >= 0' in text +assert 'actions.Contains(m_Remove)' in text +assert 'PickDoorIndexForPoint(m_Context.GetOrigin())' in text +assert 'GetExitTeleportPointInfo()' in text +assert 'm_Remove.GetActionDuration() == 1' in text +assert 'm_Remove.CanBeShown(m_Caller)' in text and 'm_Remove.CanBePerformed(m_Caller)' in text +assert text.count('m_Remove.PerformAction(') == 1 +assert 'm_Remove.SetCompartmentDoorInfoIndex(m_SavedDoor)' in body(source,'override void Cleanup(') +assert 'if (m_RemoveStopped) return -1;' in body(source,'override int Tick(') +for forbidden in ('GetOutVehicle(', 'GetOutVehicle_NoDoor(', 'KickFromVehicle(', 'SetUnconscious(', 'm_Casualty.Set', 'm_Casualty).Teleport', 'SetActive('): + assert forbidden not in text,forbidden +# Existing arbitrary-ground mechanism remains exactly its original contract. +base=ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c' +assert 'GetOutVehicle_NoDoor(exitTransform, true, false)' in body(base,'protected bool BeginExit(') +assert 'exitTransform[3] = m_GroundPosition;' in body(base,'protected bool BeginExit(') +assert body(base,'protected bool ExitSettled(').strip().endswith('return ERR_Actors.Alive(m_Casualty) && vector.Distance(m_Casualty.GetOrigin(), m_GroundPosition) < 4 && m_Seat.IsCompartmentAccessible();\n }') +base_text=(ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c').read_text() +assert base_text.count('m_ERRExtractionCase == "casualty-remove"') == 3 +assert 'm_ERRCasualtyLoadProbe = new ERR_NativeCasualtyRemoveProbe(this);' in base_text +assert 'm_ERRBaseStep = 802; Transition(ERR_Phase.DEFEAT);' in base_text +runner=(ROOT/'tools/headless_workbench.py').read_text() +assert runner.count("'casualty-remove'") == 3 +compile(runner,'headless_workbench.py','exec') +print('PASS: actual safe-exit boundary policy, native action/door selection, stop/cache cleanup, separate old mechanism and opt-in runner contracts') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_reservation_death.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_reservation_death.py new file mode 100644 index 0000000..66aeb56 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_casualty_reservation_death.py @@ -0,0 +1,43 @@ +"""Exercise the production structural-ticket check after post-commit death. +No synthetic fixture is claimed as network/owner-RPC proof. +""" +from policy_harness import ROOT, body, run +path = ROOT/'addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c' +physical = body(path, 'protected bool PhysicalTicket(') +physical = (physical.replace('protected ', '').replace('ERR_CasualtyLoadTicket ticket', 'Ticket* ticket') + .replace('ticket.', 'ticket->').replace('m_Mode.', 'm_Mode->') + .replace('ERR_Phase.EXTRACTION', '4').replace('ERR_Actors.Alive', 'Alive') + .replace('ERR_CasualtyLoadingRules.TransportBench', 'TransportBench').replace('null', 'nullptr')) +policy = '\n'.join(body(path, signature) for signature in ['static bool ObserveTicket(', 'static bool Within(']) +run('''#include +struct Entity { bool alive=true; }; +bool Alive(Entity* entity){return entity && entity->alive;} +bool TransportBench(Entity* seat,Entity* aircraft){return seat && aircraft;} +struct Ticket { Entity* Aircraft; Entity* Casualty; Entity* Seat; }; +struct Mode { + Entity* aircraft; bool active=true; int phase=4; + bool Active(){return active;} int Phase(){return phase;} + Entity* ExtractionVehicle(){return aircraft;} +}; +''' + policy + ''' +struct Service { Mode* m_Mode; +''' + physical + ''' +}; +int main(){ + Entity aircraft, body, bench; Mode mode{&aircraft}; Service service{&mode}; + Ticket ticket{&aircraft,&body,&bench}; + assert(service.PhysicalTicket(&ticket)); + body.alive=false; // server death after authorization; owner commit can still be in flight + assert(service.PhysicalTicket(&ticket)); + assert(ObserveTicket(true,service.PhysicalTicket(&ticket),false)); + assert(!ObserveTicket(false,service.PhysicalTicket(&ticket),false)); + assert(Within(1000,8999,8000)); // keep observation reservation through its budget + assert(!Within(1000,9000,8000)); // eventually release, without another owner command + ticket.Casualty=nullptr; assert(!service.PhysicalTicket(&ticket)); + ticket.Casualty=&body; ticket.Seat=nullptr; assert(!service.PhysicalTicket(&ticket)); + ticket.Seat=&bench; aircraft.alive=false; assert(!service.PhysicalTicket(&ticket)); + aircraft.alive=true; mode.active=false; assert(!service.PhysicalTicket(&ticket)); + mode.active=true; mode.phase=5; assert(!service.PhysicalTicket(&ticket)); +} +''') +print('PASS: actual committed-ticket structure preserves reservation after death, rejects missing bodies/seats and ends at observation expiry') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_diagnostic_no_splash.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_diagnostic_no_splash.py new file mode 100644 index 0000000..03fe9e6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_diagnostic_no_splash.py @@ -0,0 +1,44 @@ +"""Execute the actual opt-in Load body; no native engine or GUI is launched.""" +from policy_harness import ROOT, body, run +source=ROOT/'addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c' +load=body(source,'override void Load()').replace('override void','void').replace('System.','System::').replace('super.Load()', 'Base::Load()') +run('''#include +#include +using string=std::string; +struct System { + static bool noSplash, explicitScenario; + static string project; + static bool IsCLIParam(const char*) { return noSplash; } + static bool GetCLIParam(const char*, string& value) {value=project;return explicitScenario;} +}; +bool System::noSplash=false; bool System::explicitScenario=false; string System::project; +int diagnostics=0; +void Print(const char*) {diagnostics++;} +struct Base { + int nativeLoads=0, s_iSplashShown=0; + void Load(){nativeLoads++;s_iSplashShown++;} +}; +struct Subject:Base { + bool m_ERRDiagnosticSplashSkipped=false; +''' + load + ''' +}; +int main(){ + for(bool flag:{false,true}) for(bool explicitRequest:{false,true}) + for(const string& project:{string("core"),string("chat"),string(""),string("other")}) { + System::noSplash=flag;System::explicitScenario=explicitRequest;System::project=project; + diagnostics=0;Subject instance; + instance.Load();instance.Load();instance.Load(); + bool selected=flag && explicitRequest && (project=="core" || project=="chat"); + assert(instance.nativeLoads==(selected ? 0 : 3)); + assert(instance.s_iSplashShown==(selected ? 1 : 3)); + assert(diagnostics==(selected ? 1 : 0)); + assert(instance.m_ERRDiagnosticSplashSkipped==selected); + } + // Recreated splash instance on addon reload remains independently bounded. + System::noSplash=true;System::explicitScenario=true;System::project="core"; + Subject first,reloaded;diagnostics=0; + first.Load();reloaded.Load();reloaded.Load(); + assert(first.s_iSplashShown==1 && reloaded.s_iSplashShown==1 && diagnostics==2); +} +''') +print('PASS: actual noSplash Load body requires both explicit diagnostic and noSplash, preserves vanilla otherwise, and handles repeated Load/reload') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_policy.py new file mode 100644 index 0000000..477dd00 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_policy.py @@ -0,0 +1,51 @@ +"""Execute actual environment parsing/formatting and settings policy bodies. +Calendar validity expectations come from Python's independent datetime calendar. +""" +from datetime import date +import re +from policy_harness import ROOT, body, run +settings = ROOT/'addons/core/Scripts/Game/ERR/ERR_Settings.c' +service = ROOT/'addons/core/Scripts/Game/ERR/ERR_EnvironmentService.c' +admin = ROOT/'addons/core/Scripts/Game/ERR/ERR_AdminService.c' + +def translate(source): + source = (source.replace('string ', 'std::string ').replace('out int ', 'int& ') + .replace('text.Length()', 'int(text.size())').replace('.IsEmpty()', '.empty()') + .replace('.Substring(', '.substr(') + .replace('"0123456789".IndexOf(', 'std::string("0123456789").find(') + .replace(' < 0) return false;', ' == std::string::npos) return false;') + .replace('text.ToInt()', 'std::stoi(text)') + .replace('ERR_CommandArguments.Integer', 'Integer').replace('ERR_Settings.Valid', 'Valid')) + return re.sub(r'(\w+)\.ToString\(\)', r'std::to_string(\1)', source) + +functions='\n'.join(translate(body(path, sig)) for path, sig in ( + (settings,'static bool Valid('), (settings,'static int AddedDefault('), + (admin,'static bool Integer('), (service,'static string Pad2('), + (service,'static string Date('), (service,'static bool ParseDate('), + (service,'static string ProfileName('), (service,'static string WeatherStateName('), + (service,'static bool ParseProfile('), +)) +cases=[] +# Every calendar boundary in range, including leap/century rules and malformed days. +for year in range(1900,2051): + for month in range(1,13): + for day in (0,1,28,29,30,31,32): + code=(year-1900)*10000+month*100+day + text=f'{year:04}-{month:02}-{day:02}' + try: date(year,month,day); valid=True + except ValueError: valid=False + cases.append(f'{{{code},"{text}",{str(valid).lower()}}}') +run('#include \n#include \n'+functions+'\nstruct Case {int code; const char* text; bool valid;};\nstatic Case cases[]={' + ','.join(cases) + '};\nint main(){int parsed=-1;' + r''' + for (auto c:cases) {assert(Valid("startDateCode",c.code)==c.valid); assert(ParseDate(c.text,parsed)==c.valid); if(c.valid)assert(parsed==c.code && Date(parsed)==c.text);} + assert(AddedDefault("startDateCode")==0 && AddedDefault("weatherProfile")==0); + assert(Valid("startDateCode",0) && Date(0)=="authored" && ParseDate("authored",parsed) && parsed==0); + for(std::string text:{"1900-00-00","1900-00-01","2050-13-01","1899-12-31","2051-01-01","1989-6-01","1989-06-1","1989-06-01junk"," 1989-06-01","1989-06-01 ","198a-06-01","", "1989/06/01"}) assert(!ParseDate(text,parsed)); + assert(!Valid("startDateCode",-1) && !Valid("startDateCode",1501232)); + for(int p=0;p<=3;p++){assert(Valid("weatherProfile",p)); assert(ParseProfile(ProfileName(p),parsed)&&parsed==p);} + assert(ParseProfile("rainy",parsed)&&parsed==3); + assert(!ParseProfile("random",parsed)&&!ParseProfile("storm",parsed)); + assert(!Valid("weatherProfile",-1)&&!Valid("weatherProfile",4)); + assert(WeatherStateName(0)=="" && WeatherStateName(1)=="Clear" && WeatherStateName(2)=="Overcast" && WeatherStateName(3)=="Rainy"); +} +''') +print('PASS: native settings policy matches calendar boundaries 1900-2050, date/profile parsing is strict, authored defaults preserve old worlds') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_restart_runner.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_restart_runner.py new file mode 100644 index 0000000..1910402 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_environment_restart_runner.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +"""Negative runner checks stop before any native process/audio initialization.""" +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest + +ROOT = Path(__file__).resolve().parents[1] + +class EnvironmentRestartRunnerTests(unittest.TestCase): + def invoke(self, profile, *extra): + return subprocess.run([sys.executable, str(ROOT/'tools/headless_workbench.py'), + '--compat', str(profile/'missing-prefix'), '--profile', str(profile), + '--smoke', 'environment-restart', '--project', 'core', '--rounds', '2', + *extra], text=True, capture_output=True) + + def test_requires_two_core_rounds(self): + with tempfile.TemporaryDirectory() as directory: + for extra in [('--rounds','1'), ('--rounds','3'), ('--project','chat')]: + with self.subTest(extra=extra): + result = self.invoke(Path(directory), *extra) + self.assertNotEqual(result.returncode, 0) + self.assertIn('requires --project core --rounds 2', result.stderr) + + def test_every_existing_fixture_file_is_refused_and_preserved(self): + for name in ['erri-environment-restart.json', 'erri-environment-restart.json.bak', + 'erri-environment-restart.json.tmp', 'erri-environment-restart-round.json']: + with self.subTest(name=name), tempfile.TemporaryDirectory() as directory: + profile = Path(directory) + path = profile/name + path.write_text('prior evidence') + result = self.invoke(profile) + self.assertNotEqual(result.returncode, 0) + self.assertIn('fixture paths must not preexist', result.stderr) + self.assertEqual(path.read_text(), 'prior evidence') + + def test_broken_fixture_symlink_is_refused(self): + with tempfile.TemporaryDirectory() as directory: + profile = Path(directory) + (profile/'erri-environment-restart.json').symlink_to(profile/'missing-target') + result = self.invoke(profile) + self.assertIn('fixture paths must not preexist', result.stderr) + self.assertTrue((profile/'erri-environment-restart.json').is_symlink()) + + def test_empty_fixture_reaches_existing_prefix_guard_without_side_effects(self): + with tempfile.TemporaryDirectory() as directory: + profile = Path(directory) + result = self.invoke(profile) + self.assertNotEqual(result.returncode, 0) + self.assertIn('must be a disposable cloned prefix', result.stderr) + self.assertEqual(list(profile.iterdir()), []) + + def test_existing_environment_outcome_does_not_acquire_restart_path_policy(self): + with tempfile.TemporaryDirectory() as directory: + profile = Path(directory) + (profile/'erri-environment-restart.json').write_text('prior evidence') + result = self.invoke(profile, '--smoke', 'environment', '--rounds', '1') + self.assertIn('must be a disposable cloned prefix', result.stderr) + self.assertNotIn('fixture paths must not preexist', result.stderr) + +if __name__ == '__main__': unittest.main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_extraction_placement_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_extraction_placement_policy.py new file mode 100644 index 0000000..45eba24 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_extraction_placement_policy.py @@ -0,0 +1,51 @@ +"""Execute production time policies; do not claim native simulation coverage.""" +from policy_harness import ROOT, body, run +source = ROOT/'addons/core/Scripts/Game/ERR/ERR_ExtractionPlacement.c' +methods = '\n'.join(body(source, signature) for signature in ( + 'static bool CanWake(', 'static bool Fresh(', 'static bool QualificationAllowed(', 'static bool Stable(')) +run('#include \n' + methods + ''' +int main() { + assert(CanWake(true,0,0,30000)); + assert(CanWake(true,0,29999,30000)); + assert(!CanWake(false,0,1,30000)); + assert(!CanWake(true,1,1,30000)); // activation cannot be repeated + assert(!CanWake(true,2,1,30000)); + assert(!CanWake(true,0,30000,30000)); // no wake after expired preparation + assert(!CanWake(true,0,30001,30000)); + assert(QualificationAllowed(false,29999,30000)); + assert(!QualificationAllowed(false,30000,30000)); // exactly deadline is not first qualification + assert(!QualificationAllowed(false,30001,30000)); + assert(QualificationAllowed(true,30000,30000)); // continuous monitoring may outlive settling + assert(QualificationAllowed(true,90000,30000)); + assert(!Fresh(-1,0)); + assert(!Fresh(1000,999)); + assert(Fresh(1000,2500)); + assert(!Fresh(1000,2501)); // delayed callbacks restart the stability window + assert(!Stable(-1,1000,2000)); + assert(!Stable(1000,999,2000)); + assert(!Stable(1000,1750,1999)); + assert(Stable(1000,1750,2000)); + assert(!Stable(1000,1000,2501)); + assert(!Stable(1000,2000,1999)); +} +''') +text = source.read_text() +poll = body(source, 'ERR_PrepareResult Poll(') +assert text.count('physics.SetActive(ActiveState.ACTIVE)') == 1 +assert poll.index('!QualificationAllowed(') < poll.index('m_Result = ERR_PrepareResult.READY;') +assert poll.index('if (m_Stopped') < poll.index('physics.SetActive(') +assert poll.index('!Replication.IsServer()') < poll.index('physics.SetActive(') +assert poll.index('m_Mode.ExtractionVehicle() != m_Aircraft') < poll.index('physics.SetActive(') +assert poll.index('m_WakeCount = 1;') < poll.index('physics.SetActive(') +assert 'fuel.HasFuel() && ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)' in poll +for forbidden in ('SetVelocity(', 'SetAngularVelocity(', 'SetTransform(', 'SetWorldTransform(', 'Teleport(', 'ApplyImpulse', 'EnableDamageHandling('): + assert forbidden not in text, forbidden +site = (ROOT/'addons/core/Scripts/Game/ERR/ERR_SiteService.c').read_text() +assert 'if (m_ExtractionPlacement) m_ExtractionPlacement.Stop();' in site +assert 'Fail(m_ExtractionPlacement.FailureReason())' in site +assert 'pendingGuards > 0 || aircraftPlacement == ERR_PrepareResult.PENDING' in site +assert 'SetSpawnImmediately(false)' in site and 'PurgeSpawnRequestsForGroup' in site +probe = (ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c').read_text() +assert 'placement.Ready() && placement.WakeCount() == 1' in probe +assert 'SetActive(' not in probe +print('PASS: actual one-shot deadline/stability policies and preparation ownership, fuel, cleanup integration contracts') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_faction_catalog_scope.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_faction_catalog_scope.py new file mode 100644 index 0000000..9f466e1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_faction_catalog_scope.py @@ -0,0 +1,57 @@ +"""Offline resource compatibility checks; these are not native loading tests.""" +import hashlib +import re +import unittest +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +CORE = ROOT / "addons/core" +VANILLA_NORMALIZED_SHA256 = { + "US": "d8d16abbecadc6987ca7eed3b114446d0af5753535c891fcefc20d5b2d7db583", + "USSR": "2d3d3af74d0da33017ae3132c613fc9c19c0d20cd850a9830bb208db59e4bf25", +} +OLD_VEHICLES = { + "US": "{D83A5EFEEF6CBF61}Configs/EntityCatalog/US/Vehicles_EntityCatalog_US.conf", + "USSR": "{09C2ED5F617A0390}Configs/EntityCatalog/USSR/Vehicles_EntityCatalog_USSR.conf", +} + + +class FactionCatalogScopeTests(unittest.TestCase): + def test_only_vehicle_catalog_changes_from_installed_faction_profiles(self): + for side in ("US", "USSR"): + with self.subTest(side=side): + text = (CORE / f"Configs/ERR/Factions/{side}.conf").read_text() + restored, count = re.subn( + r"\{[A-F0-9]{16}\}Configs/ERR/Factions/MissionVehicles\.conf", + lambda _: OLD_VEHICLES[side], text, + ) + self.assertEqual(count, 1) + # Pin every other vanilla field, including all inventory/group + # references, radio/identity/callsign/rank settings and base. + self.assertEqual(hashlib.sha256(restored.encode()).hexdigest(), + VANILLA_NORMALIZED_SHA256[side]) + + def test_vehicle_catalog_has_only_the_two_authored_assets(self): + text = (CORE / "Configs/ERR/Factions/MissionVehicles.conf").read_text() + self.assertRegex(text, r"^SCR_EntityCatalogMultiList\s*\{") + prefabs = re.findall(r'm_sEntityPrefab\s+"([^\"]+)"', text) + self.assertCountEqual(prefabs, [ + "{259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et", + "{DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et", + ]) + self.assertEqual(len(prefabs), 2) + + def test_world_uses_own_manager_without_full_vanilla_faction_inheritance(self): + manager = (CORE / "Prefabs/ERR/FactionManager.et").read_text() + self.assertIn("Prefabs/MP/Managers/Factions/FactionManager_Base.et", manager) + self.assertNotIn("FactionManager_USxUSSR.et", manager) + for side in ("US", "USSR"): + self.assertIn(f"Configs/ERR/Factions/{side}.conf", manager) + self.assertNotIn(f"Configs/Factions/{side}.conf", manager) + layer = (CORE / "Worlds/ERR_Everon_Layers/default.layer").read_text() + self.assertEqual(layer.count("Prefabs/ERR/FactionManager.et"), 1) + self.assertNotIn("FactionManager_USxUSSR.et", layer) + + +if __name__ == "__main__": + unittest.main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_guard_cancellation_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_guard_cancellation_policy.py new file mode 100644 index 0000000..06b4ab2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_guard_cancellation_policy.py @@ -0,0 +1,65 @@ +"""Run actual ownership cancellation/Stop bodies with shared-array fixtures.""" +from policy_harness import ROOT, body, run +p=ROOT/'addons/core/Scripts/Game/ERR/ERR_SiteService.c' +s='\n'.join(body(p, sig) for sig in ('void CancelInitialGuardRequests(', 'void Stop(')) +for old,new in [ + ('GetGame().','GetGame()->'), + ('ChimeraAIWorld world', 'ChimeraAIWorld* world'), + ('ChimeraAIWorld.Cast', 'ChimeraAIWorld::Cast'), + ('foreach (ERR_SiteRuntime site : m_Sites)', 'for (ERR_SiteRuntime* site : m_Sites)'), + ('site.Group', 'site->Group'), + ('site.InitialGuardCount', 'site->InitialGuardCount'), + ('site->Group.', 'site->Group->'), + ('new array()', 'std::make_shared>()'), + ('world.Purge', 'world->Purge'), + ('m_ExtractionPlacement.', 'm_ExtractionPlacement->'), + ('ERR_PrepareResult.', 'ERR_PrepareResult::'), +]: s=s.replace(old,new) +run('''#include +#include +#include +#include +template using Array=std::vector; +enum class ERR_PrepareResult {FAILED=-1,PENDING,READY}; +struct Group {bool immediate=true; std::shared_ptr> m_aUnitPrefabSlots; int physical=0; void SetSpawnImmediately(bool b){immediate=b;} }; +struct ERR_SiteRuntime {struct Group* Group; int InitialGuardCount;}; +struct ChimeraAIWorld { + Array purged; + static ChimeraAIWorld* Cast(ChimeraAIWorld* p){return p;} + void PurgeSpawnRequestsForGroup(Group* group){ + assert(!group->immediate && group->m_aUnitPrefabSlots->empty()); + purged.push_back(group); + } +}; +struct Game {ChimeraAIWorld* world; ChimeraAIWorld* GetAIWorld(){return world;}}; +Game* game; +Game* GetGame(){return game;} +struct Placement { int stops=0; void Stop(){stops++;} }; +struct Owner { + std::shared_ptr m_ExtractionPlacement; + Array m_Sites; + bool m_Stopped=false; + ERR_PrepareResult m_State=ERR_PrepareResult::PENDING; + int routeStops=0; + void StopPatrols(){routeStops++;} +''' + s + ''' +}; +int main(){ + ChimeraAIWorld world; Game instance{&world}; game=&instance; + auto authored=std::make_shared>(6,"soldier"); + Group empty{true,authored,0}, partial{true,authored,2}, control{true,authored,6}, unrequested{true,authored,0}; + ERR_SiteRuntime a{&empty,6},b{&partial,6},c{&control,6},ignored{&unrequested,0},missing{nullptr,6}; + Owner owner; owner.m_ExtractionPlacement=std::make_shared(); owner.m_Sites={&a,&b,&ignored,&missing}; + owner.Stop(); owner.Stop(); + assert(owner.m_Stopped && owner.routeStops==1 && world.purged.size()==2 && owner.m_ExtractionPlacement->stops==1); + assert(empty.m_aUnitPrefabSlots->empty() && partial.m_aUnitPrefabSlots->empty()); + assert(authored->size()==6 && control.m_aUnitPrefabSlots==authored && unrequested.m_aUnitPrefabSlots==authored); + assert(empty.physical==0 && partial.physical==2 && control.physical==6); + assert(control.immediate && unrequested.immediate); + Owner ready; ready.m_State=ERR_PrepareResult::READY; ready.m_Sites={&c}; ready.Stop(); + assert(world.purged.size()==2 && control.immediate && control.m_aUnitPrefabSlots->size()==6); + game=nullptr; Owner deletedGame; deletedGame.m_Sites={&c}; deletedGame.Stop(); + assert(world.purged.size()==2); +} +''') +print('PASS: pending-only cancellation retires copied instance intent, preserves physical/control actors, and stops once') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_headless_game_runner.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_headless_game_runner.py new file mode 100644 index 0000000..7a39599 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_headless_game_runner.py @@ -0,0 +1,321 @@ +#!/usr/bin/env python3 +"""Exercise process refusal, command scope and evidence gates without native launch.""" +from pathlib import Path +import sys +import tempfile +import unittest +from unittest.mock import patch +sys.path.insert(0, str(Path(__file__).resolve().parents[1]/'tools')) +import headless_game as runner + + +class GameRunnerTests(unittest.TestCase): + def process(self, root, command, comm='wine', pid='123'): + proc = root/pid + proc.mkdir() + (proc/'cmdline').write_bytes(command) + (proc/'comm').write_text(comm) + (proc/'environ').write_bytes(b'') + return proc + + def test_refuses_existing_game_variants_without_mutation(self): + for command in (b'Z:/Games/ArmaReforgerSteamDiag.exe\0-world\0x', + b'C:\\Games\\ArmaReforgerSteam.exe\0', + b'proton\0run\0/Z/ArmaReforgerSteamDiag.exe\0'): + with self.subTest(command=command), tempfile.TemporaryDirectory() as directory: + root = Path(directory) + proc = self.process(root, command) + with self.assertRaisesRegex(ValueError, 'game process already exists'): + runner.assert_no_game(root) + self.assertEqual((proc/'cmdline').read_bytes(), command) + + def test_truncated_comm_still_refuses_empty_cmdline(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + self.process(root, b'', comm='ArmaReforgerStea') + with self.assertRaisesRegex(ValueError, 'game process already exists'): + runner.assert_no_game(root) + + def test_unrelated_workbench_is_not_a_game_process(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + self.process(root, b'Z:/Workbench/ArmaReforgerWorkbenchSteamDiag.exe\0', comm='ArmaReforgerWor') + runner.assert_no_game(root) + + def test_unreadable_process_fails_closed(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + self.process(root, b'') + with patch.object(Path, 'read_bytes', side_effect=PermissionError('blocked')): + with self.assertRaisesRegex(ValueError, 'Cannot exclude an existing game'): + runner.assert_no_game(root) + + def test_same_prefix_process_refused_other_prefix_preserved(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + compat = root/'compat' + proc = self.process(root, b'wineserver\0') + (proc/'environ').write_bytes(('WINEPREFIX='+str(compat/'pfx')).encode()+b'\0') + with self.assertRaisesRegex(ValueError, 'prefix already has a process'): + runner.assert_prefix_idle(compat, root) + runner.assert_prefix_idle(root/'different', root) + + def test_nondumpable_native_service_does_not_require_environment(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + proc = self.process(root, b'/usr/lib/systemd/systemd\0--user\0', comm='systemd') + original = Path.read_bytes + def protected_read(path): + if path.name == 'environ': + self.fail('Unrelated native service environment must not be read') + return original(path) + with patch.object(Path, 'read_bytes', protected_read), patch.object(runner.os, 'readlink', side_effect=PermissionError('non-dumpable')): + runner.assert_prefix_idle(root/'compat', root) + self.assertTrue(proc.exists()) + + def test_runtime_candidates_require_environment_even_if_exe_is_protected(self): + for command, comm in [(b'/usr/bin/wineserver\0', 'wineserver'), + (b'/usr/bin/python3\0/Steam/Proton - Experimental/proton\0run\0', 'python3'), + (b'/usr/bin/gamescope\0--backend\0headless\0', 'gamescope'), + (b'C:\\windows\\system32\\services.exe\0', 'services.exe')]: + with self.subTest(comm=comm), tempfile.TemporaryDirectory() as directory: + root = Path(directory); self.process(root, command, comm=comm) + original = Path.read_bytes + def protected_read(path): + if path.name == 'environ': + raise PermissionError('protected candidate') + return original(path) + with patch.object(Path, 'read_bytes', protected_read), patch.object(runner.os, 'readlink', side_effect=PermissionError('protected exe')): + with self.assertRaisesRegex(ValueError, 'Cannot verify disposable prefix'): + runner.assert_prefix_idle(root/'compat', root) + + def test_unclassifiable_process_remains_fail_closed(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory); self.process(root, b'', comm='unknown') + with patch.object(runner.os, 'readlink', side_effect=PermissionError('protected exe')): + with self.assertRaisesRegex(ValueError, 'Cannot classify possible Wine'): + runner.assert_prefix_idle(root/'compat', root) + + def test_exact_systemd_pam_helper_is_native_without_environment(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory); self.process(root, b'(sd-pam)\0', comm='(sd-pam)') + original = Path.read_bytes + def protected_read(path): + if path.name == 'environ': + self.fail('Native PAM helper environment must not be read') + return original(path) + with patch.object(Path, 'read_bytes', protected_read), patch.object(runner.os, 'readlink', side_effect=PermissionError('non-dumpable')): + runner.assert_prefix_idle(root/'compat', root) + + def test_observed_native_apache_signature_is_narrowly_classified(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + proc = self.process(root, b'apache2\0-DFOREGROUND\0', comm='apache2') + with patch.object(runner.os, 'readlink', side_effect=PermissionError('protected exe')): + self.assertFalse(runner.prefix_process_candidate(proc)) + (proc/'cmdline').write_bytes(b'apache2\0-DFOREGROUND\0/Steam/proton\0') + self.assertTrue(runner.prefix_process_candidate(proc)) + (proc/'cmdline').write_bytes(b'apache2\0') + with self.assertRaisesRegex(ValueError, 'Cannot classify possible Wine'): + runner.prefix_process_candidate(proc) + + def test_bare_matching_names_are_not_generically_trusted(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + self.process(root, b'unknown\0', comm='unknown', pid='101') + self.process(root, b'another\0', comm='another', pid='102') + with patch.object(runner.os, 'readlink', side_effect=PermissionError('protected exe')): + with self.assertRaises(ValueError) as raised: + runner.assert_prefix_idle(root/'compat', root) + self.assertIn('101', str(raised.exception)) + self.assertIn('102', str(raised.exception)) # report all blockers in one pass + + def test_pam_name_does_not_hide_runtime_arguments(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + proc = self.process(root, b'(sd-pam)\0/Steam/proton\0', comm='(sd-pam)') + with patch.object(runner.os, 'readlink', side_effect=PermissionError('protected exe')): + self.assertTrue(runner.prefix_process_candidate(proc)) + + def test_readonly_inspection_does_not_enter_launcher_or_audio(self): + with patch.object(sys, 'argv', ['headless_game.py', '--compat', '/unused-prefix', '--inspect-processes']): + with patch.object(runner, 'assert_no_game'), patch.object(runner, 'assert_prefix_idle', side_effect=ValueError('ambiguous process')): + with patch.object(runner, 'run') as launch, patch.object(runner.subprocess, 'Popen') as spawn, patch.object(runner.subprocess, 'run') as commands, patch('builtins.print'): + self.assertEqual(runner.main(), 1) + launch.assert_not_called(); spawn.assert_not_called(); commands.assert_not_called() + + def test_existing_unmarked_profile_and_steam_prefix_refused(self): + with tempfile.TemporaryDirectory() as directory: + base = Path(directory) + compat = base/'compat'; (compat/'pfx').mkdir(parents=True) + (compat/'pfx/system.reg').touch() + profile = base/'profile'; profile.mkdir(); (profile/'sentinel').write_text('keep') + with self.assertRaisesRegex(ValueError, 'not marked'): + runner.validate_paths(base/'source', base/'steam', compat, profile) + self.assertEqual((profile/'sentinel').read_text(), 'keep') + with self.assertRaisesRegex(ValueError, 'outside Steam'): + runner.validate_paths(base/'source', base, compat, base/'fresh') + + def test_profile_cannot_overlap_owned_prefix_or_source(self): + with tempfile.TemporaryDirectory() as directory: + base = Path(directory); compat = base/'compat' + (compat/'pfx').mkdir(parents=True); (compat/'pfx/system.reg').touch() + for profile in (base/'source/profile', compat/'profile', base): + with self.assertRaisesRegex(ValueError, 'separate from source'): + runner.validate_paths(base/'source', base/'steam', compat, profile) + + def test_command_is_ordinary_game_with_explicit_successor_identity(self): + for project, guid in [('core', '2528466DE220D91C'), ('chat', 'FA804F411BDDF2C6')]: + command = runner.command_for(runner.ROOT, Path('/Steam'), Path('/compat'), Path('/profile'), project) + self.assertEqual(command[command.index('--')+3], '/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe') + self.assertFalse(any('ArmaReforger_BE.exe' in arg or 'ArmaReforgerSteamDiag.exe' in arg for arg in command)) + self.assertEqual(command[command.index('-addons')+1], guid) + self.assertNotIn('-world', command) + self.assertEqual(command[command.index('-errOrdinaryScenario')+1], project) + for flag in ['-noBackend', '-noSound', '-noSplash', '-noThrow', '-disableCrashReporter']: + self.assertIn(flag, command) + for unwanted in ['-server', '-gproj', '-errPlay', '-errSmoke', '-plugin', 'Workbench', '-silentCrashReport', '-noCrashDialog']: + self.assertFalse(any(unwanted in arg for arg in command)) + + 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' + self.assertTrue(runner.game_evidence(module+phase)['ready']) + self.assertFalse(runner.game_evidence(phase)['ready']) + self.assertFalse(runner.game_evidence(module)['ready']) + self.assertFalse(runner.game_evidence(module.replace('ENABLE_DIAG', 'WORKBENCH')+phase)['ready']) + for error in ['SCRIPT (E): failure', 'RESOURCES (E): missing', 'ERR SMOKE PASS: fixture leaked', 'Rereintroduced: scenario preparation failed']: + self.assertTrue(runner.game_evidence(module+phase+error)['failed']) + + def test_startup_requires_selected_header_and_actual_systems_marker(self): + module = 'SCRIPT : Module: Game; defines: "PLATFORM_WINDOWS"; CRC32: a\n' + phase = 'SCRIPT : Rereintroduced [mission]: phase 0 -> 1\n' + core = 'SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems\nSCRIPT : ERR ORDINARY: local participant verified project=core phase=prison\n' + chat = 'SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems\nSCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison\n' + self.assertFalse(runner.game_evidence(module+phase, 'core')['ready']) + self.assertFalse(runner.game_evidence(module+phase+core, 'chat')['ready']) + self.assertTrue(runner.game_evidence(module+phase+chat, 'chat')['ready']) + self.assertFalse(runner.game_evidence(module+phase+core.replace('MissionSystems', 'unknown'), 'core')['ready']) + error = "GUI (E): Unknown class 'SCR_WidgetExportRuleRoot'\n" + result = runner.game_evidence(error+module+phase+core, 'core') + self.assertTrue(result['scenario_header_verified']) + self.assertTrue(result['failed']) + self.assertFalse(result['ready']) + + def test_world_without_normal_local_admission_is_not_ready(self): + world = ('SCRIPT : Module: Game; defines: "PLATFORM_WINDOWS"; CRC32: a\n' + 'SCRIPT : Rereintroduced [mission]: phase 0 -> 1\n' + 'SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems\n') + result = runner.game_evidence(world, 'core') + self.assertTrue(result['scenario_header_verified']) + self.assertFalse(result['local_participant_verified']) + self.assertFalse(result['ready']) + self.assertFalse(result['failed']) # incomplete admission may still arrive + self.assertFalse(runner.game_evidence(world+'ERR ORDINARY: local participant verified project=chat phase=prison\n', 'core')['ready']) + self.assertTrue(runner.game_evidence(world+'ERR ORDINARY: local participant verified project=core phase=prison\n', 'core')['ready']) + + def test_no_engine_or_audio_spawn_during_import_and_process_refusal(self): + with patch.object(runner, 'assert_no_game', side_effect=ValueError('existing game')): + with patch.object(runner.subprocess, 'Popen') as spawn, patch.object(runner.subprocess, 'run') as commands: + class Args: + steam=Path('/steam'); compat=Path('/compat'); profile=Path('/profile') + timeout=180; settle=15; failure_grace=0 + with self.assertRaisesRegex(ValueError, 'existing game'): + runner.run(Args()) + spawn.assert_not_called(); commands.assert_not_called() + + +class FailureGraceTests(unittest.TestCase): + def test_exit_at_settle_boundary_is_not_success(self): + monitor = runner.StartupMonitor(100, 180, 5) + self.assertIsNone(monitor.observe({'ready': True}, 101)) + self.assertEqual(monitor.observe({'ready': True}, 106, True), 'process-exited') + + def test_missing_readiness_resets_continuous_settle(self): + monitor = runner.StartupMonitor(100, 180, 5) + self.assertIsNone(monitor.observe({'ready': True}, 101)) + self.assertIsNone(monitor.observe({}, 104)) + self.assertIsNone(monitor.observe({'ready': True}, 106)) + self.assertEqual(monitor.observe({'ready': True}, 111), 'game-started') + + def test_default_error_stops_immediately(self): + monitor = runner.StartupMonitor(100, 180, 15) + self.assertEqual(monitor.observe({'failed': True}, 101), 'game-failed') + self.assertEqual(monitor.first_failure_at, 101) + + def test_repeated_errors_do_not_renew_grace(self): + monitor = runner.StartupMonitor(100, 180, 15, 30) + self.assertIsNone(monitor.observe({'failed': True}, 105)) + self.assertIsNone(monitor.observe({'failed': True}, 134.99)) + self.assertEqual(monitor.first_failure_at, 105) + self.assertEqual(monitor.observe({'failed': True}, 135), 'game-failed') + + def test_readiness_cannot_turn_latched_error_into_success(self): + monitor = runner.StartupMonitor(100, 180, 5, 30) + self.assertIsNone(monitor.observe({'failed': True}, 101)) + for now in (102, 110, 130): + self.assertIsNone(monitor.observe({'ready': True}, now)) + self.assertEqual(monitor.observe({'ready': True}, 131), 'game-failed') + self.assertIsNone(monitor.ready_at) + + def test_failure_after_readiness_aborts_settle_success(self): + monitor = runner.StartupMonitor(100, 180, 5, 30) + self.assertIsNone(monitor.observe({'ready': True}, 101)) + self.assertIsNone(monitor.observe({'failed': True}, 105)) + self.assertIsNone(monitor.observe({'ready': True}, 106)) + self.assertEqual(monitor.observe({}, 135), 'game-failed') + + def test_absolute_timeout_cuts_short_grace(self): + monitor = runner.StartupMonitor(100, 60, 5, 30) + self.assertIsNone(monitor.observe({'failed': True}, 159)) + self.assertEqual(monitor.observe({'ready': True}, 160), 'game-failed') + self.assertEqual(monitor.timeout_result(), 'game-failed') + self.assertEqual(monitor.deadline, 160) + + def test_process_exit_during_grace_returns_failed_immediately(self): + monitor = runner.StartupMonitor(100, 180, 15, 30) + monitor.observe({'failed': True}, 101) + self.assertEqual(monitor.observe({}, 102, process_exited=True), 'game-failed') + + def test_final_raw_analysis_cannot_erase_observed_failure(self): + monitor = runner.StartupMonitor(100, 180, 15, 30) + monitor.observe({'failed': True}, 101) + final = monitor.annotate({'ready': True, 'failed': False, 'engine_errors': [], 'game_module_observed': True}) + self.assertTrue(final['failure_observed_during_polling']) + self.assertTrue(final['failed']) + self.assertFalse(final['ready']) + self.assertEqual(final['engine_errors'], []) # no invented final-log errors + self.assertTrue(final['game_module_observed']) + + def test_grace_does_not_delay_normal_success_or_exit(self): + monitor = runner.StartupMonitor(100, 180, 15, 30) + self.assertIsNone(monitor.observe({'ready': True}, 101)) + self.assertEqual(monitor.observe({'ready': True}, 116), 'game-started') + monitor = runner.StartupMonitor(100, 180, 15, 30) + self.assertEqual(monitor.observe({}, 101, process_exited=True), 'process-exited') + self.assertEqual(monitor.observe({}, 280), 'timeout') + self.assertEqual(monitor.timeout_result(), 'timeout') + + def test_grace_bounds_rejected_before_any_native_mutation(self): + for grace in (-1, 31): + with self.subTest(grace=grace): + with self.assertRaisesRegex(ValueError, 'failure-grace 0..30'): + runner.StartupMonitor(100, 180, 15, grace) + class Args: + steam=Path('/steam'); compat=Path('/compat'); profile=Path('/profile') + timeout=180; settle=15; failure_grace=grace + with patch.object(runner, 'assert_no_game') as processes, patch.object(runner.subprocess, 'Popen') as spawn: + with self.assertRaisesRegex(ValueError, 'failure-grace 0..30'): + runner.run(Args()) + processes.assert_not_called(); spawn.assert_not_called() + + def test_cli_default_and_explicit_grace(self): + for extra, expected in (([], 0), (['--failure-grace', '30'], 30)): + with self.subTest(extra=extra), patch.object(sys, 'argv', ['headless_game.py', '--compat', '/unused', *extra]): + with patch.object(runner, 'run', return_value=1) as run: + self.assertEqual(runner.main(), 1) + self.assertEqual(run.call_args.args[0].failure_grace, expected) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_initial_guard_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_initial_guard_policy.py new file mode 100644 index 0000000..8fc366f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_initial_guard_policy.py @@ -0,0 +1,29 @@ +"""Execute initial readiness policy; native population timing needs engine tests.""" +from policy_harness import ROOT, body, run +p = ROOT/'addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c' +s = '\n'.join(body(p, signature) for signature in ('static float TimeoutMilliseconds(', 'static ERR_PrepareResult State(')).replace('ERR_PrepareResult.', 'ERR_PrepareResult::') +run('''#include +#include +enum class ERR_PrepareResult { FAILED=-1,PENDING,READY }; +''' + s + ''' +int main() { + using R=ERR_PrepareResult; + assert(TimeoutMilliseconds()==90000); + for(int requested: {1,6,12}) { + for(int physical=0;physical<=requested;physical++) { + for(int alive=0;alive<=physical;alive++) { + assert(State(requested,physical,alive,false,false)==R::PENDING); + assert(State(requested,physical,alive,true,false)==((alive==requested)?R::READY:R::PENDING)); + assert(State(requested,physical,alive,true,true)==R::FAILED); + assert(State(requested,physical,alive,false,true)==R::FAILED); + } + } + assert(State(requested,requested+1,requested,true,false)==R::FAILED); + } + assert(State(0,0,0,true,false)==R::FAILED); + assert(State(6,2,3,false,false)==R::FAILED); + assert(State(6,-1,0,false,false)==R::FAILED); + assert(State(6,1,-1,false,false)==R::FAILED); +} +''') +print('PASS: requested guard population requires complete physical conscious membership before deadline') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_inventory_enumeration_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_inventory_enumeration_policy.py new file mode 100644 index 0000000..38ef608 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_inventory_enumeration_policy.py @@ -0,0 +1,78 @@ +"""Synthetic identity regression using actual Enforce inventory/count method bodies. + +This checks source policy only; it does not simulate native inventory transfers. +""" +import unittest +from policy_harness import ROOT, body, run + + +def translated(source): + for old, new in [ + ('InventoryStorageManagerComponent inventory', 'InventoryStorageManagerComponent* inventory'), + ('notnull array items', 'Array& items'), + ('out array items', 'Array& items'), + ('array', 'Array'), + ('IEntity item', 'Entity* item'), + ('foreach (', 'for ('), + ('inventory.GetItems', 'inventory->GetItems'), + ('item.GetPrefabData()', 'item->GetPrefabData()'), + ('.GetPrefabName()', '->GetPrefabName()'), + ('ERR_Inventory.', 'ERR_Inventory::'), + ('int count;', 'int count = 0;'), + ]: + source = source.replace(old, new) + return source + + +class InventoryEnumerationPolicy(unittest.TestCase): + def test_duplicate_references_distinct_rounds_and_cross_inventory_union(self): + helper = ROOT / 'addons/core/Scripts/Game/ERR/ERR_Inventory.c' + mortar = ROOT / 'addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c' + methods = '\n'.join(translated(body(helper, signature)) for signature in ( + 'static int AppendUnique(', 'static int Items(')) + count = translated(body(mortar, 'int InventoryShells(')) + run(r''' +#include +#include +#include +#include +template struct Array : std::vector { + using std::vector::vector; + bool Contains(T v) const { return std::find(this->begin(),this->end(),v)!=this->end(); } + void Insert(T v) { this->push_back(v); } + void Clear() { this->clear(); } + int Count() const { return this->size(); } +}; +struct Prefab { std::string name; std::string GetPrefabName() { return name; } }; +struct Entity { Prefab* prefab; Prefab* GetPrefabData() { return prefab; } }; +struct InventoryStorageManagerComponent { + Array raw; + void GetItems(Array& out) { out = raw; } +}; +const std::string SHELL = "mortar-shell"; +struct ERR_Inventory { +''' + methods + '\n};\n' + count + r''' +int main() { + Prefab shell{SHELL}, watch{"watch"}; + Entity roundA{&shell}, roundB{&shell}, watchA{&watch}, missingPrefab{nullptr}; + InventoryStorageManagerComponent one{{&roundA,&roundA,nullptr,&roundB,&watchA,&watchA,&missingPrefab}}; + Array unique{&watchA}; + assert(ERR_Inventory::Items(&one,unique)==4); + assert(unique[0]==&roundA && unique[1]==&roundB && unique[2]==&watchA && unique[3]==&missingPrefab); + assert(InventoryShells(&one)==2); // Different shells share one prefab, not one identity. + assert(one.raw.size()==7 && one.raw[0]==one.raw[1]); // Enumeration remains untouched. + InventoryStorageManagerComponent two{{&roundB,&roundB,&roundA}}; + assert(ERR_Inventory::AppendUnique(&two,unique)==4); // Cross-inventory repeated identities. + assert(ERR_Inventory::AppendUnique(nullptr,unique)==4); + assert(ERR_Inventory::Items(nullptr,unique)==0 && unique.empty()); + assert(InventoryShells(nullptr)==0); + InventoryStorageManagerComponent repeated{{&roundA,&roundA,&roundA}}; + assert(InventoryShells(&repeated)==1); + InventoryStorageManagerComponent empty{{nullptr,&missingPrefab,&watchA}}; + assert(InventoryShells(&empty)==0); +} +''') + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_local_admission.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_local_admission.py new file mode 100644 index 0000000..07d887e --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_local_admission.py @@ -0,0 +1,89 @@ +"""Execute actual resolver/context/latch bodies with opaque native handles. +UUID generation/nullness and native session/controller APIs are substituted; +this is not authentication, native GenV4 or multiplayer evidence. +""" +from policy_harness import ROOT, body, run +import re +source=ROOT/'addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c' +s=source.read_text().split('\nmodded class ERR_GameMode')[0] +s=s[s.index('class ERR_LocalAdmissionRules'):] +s=s.replace('class ERR_LocalAdmissionRules','struct ERR_LocalAdmissionRules').replace('class ERR_LocalAdmission\n','struct ERR_LocalAdmission\n') +s=s.replace('\n}\n','\n};\n').replace('protected ','') +s=s.replace('void ERR_LocalAdmission(', 'ERR_LocalAdmission(') +s=s.replace('ERR_GameMode', 'Mode').replace('SCR_PlayerController', 'Controller').replace('PlayerManager', 'Manager') +s=re.sub(r'\b(Mode|Controller|Manager) (mode|controller|manager|m_Mode|m_Controller)\b',r'\1* \2',s) +s=s.replace('Mode.Get()', 'Mode::Get()').replace('RplMode.None','0') +s=s.replace('Replication.IsServer()', 'isServer').replace('RplSession.Mode()', 'sessionMode') +s=s.replace('GetGame().', 'GetGame()->').replace('manager.', 'manager->').replace('controller.', 'controller->') +s=s.replace('System.GetCLIParam', 'System::GetCLIParam').replace('string project;', 'std::string project;') +s=s.replace('bool connected, sameManager;', 'bool connected=false, sameManager=false;').replace('int controllerId;', 'int controllerId=0;') +s=s.replace('ERR_LocalAdmissionRules.', 'ERR_LocalAdmissionRules::') +s=s.replace('UUID.NULL_UUID','UUID::NULL_UUID').replace('UUID.GenV4()', 'UUID::GenV4()').replace('null','nullptr') +# Enforce initializes managed fields; retain that contract in this C++ model. +s=s.replace('Mode* m_Mode;', 'Mode* m_Mode=nullptr;').replace('Controller* m_Controller;', 'Controller* m_Controller=nullptr;') +s=re.sub(r'\b(bool|int) (m_\w+);',r'\1 \2=0;',s) +run('''#include +#include +int generated=0;bool isServer=true;int sessionMode=0; +struct UUID {int value=0;bool IsNull(){return value<=0;}bool operator==(UUID other){return value==other.value;}static UUID NULL_UUID;static UUID GenV4(){return UUID{++generated+100};}}; +UUID UUID::NULL_UUID{0}; +struct Controller {int id=1;int GetPlayerId(){return id;}}; +struct Manager {int count=1;bool connected=true;Controller* controller=nullptr;int GetPlayerCount(){return count;}bool IsPlayerConnected(int id){return connected;}Controller* GetPlayerController(int id){return controller;}}; +struct Mode {static Mode* current;static Mode* Get(){return current;}};Mode* Mode::current=nullptr; +struct Game {Manager* manager=nullptr;Controller* local=nullptr;Manager* GetManager(){return manager;}Controller* GetPlayerController(){return local;}}; +Game* game=nullptr;Game* GetGame(){return game;}void Print(const char*){} +namespace System {bool GetCLIParam(const char*,std::string&){return false;}} +template void PrintFormat(Args... args) {} +'''+s+''' +int main(){ + // Exact None only; every context condition independently matters. + for(int mode=-1;mode<5;++mode)for(int count=0;count<3;++count)for(int flags=0;flags<16;++flags) + assert(ERR_LocalAdmissionRules::Context(flags&1,mode,count,flags&2,flags&4,flags&8,1,1)==(mode==0&&count==1&&flags==15)); + assert(!ERR_LocalAdmissionRules::Context(true,0,1,true,true,true,0,0)); + assert(!ERR_LocalAdmissionRules::Context(true,0,1,true,true,true,1,2)); + Mode round,nextRound;Mode::current=&round;Controller owner,replacement;Manager manager;manager.controller=&owner;Game world{&manager,&owner};game=&world; + ERR_LocalAdmission admission(&round); + UUID selected=admission.Resolve(&round,1,&owner,UUID{0});assert(!selected.IsNull()&&admission.LocalKey()&&generated==1); + assert(admission.Resolve(&round,1,&owner,UUID{0})==selected&&generated==1); + assert(admission.Resolve(&round,1,&owner,UUID{55})==selected&&generated==1); // late BI arrival cannot make fresh life + assert(admission.Validate()); + assert(!admission.Disconnected(2));assert(admission.Validate()); + assert(admission.Disconnected(1));assert(!admission.Validate()); + assert(admission.Resolve(&round,1,&owner,UUID{55}).IsNull()); // irreversible within this mode + ERR_LocalAdmission native(&round);assert(native.Resolve(&round,1,&owner,UUID{55})==UUID{55}); + assert(!native.LocalKey()&&native.Resolve(&round,1,&owner,UUID{0})==UUID{55}&&generated==1); + native.Stop();assert(native.Resolve(&round,1,&owner,UUID{0}).IsNull());assert(!native.Validate()); + // Replacement, mode switch, manager/local mismatch and additional connections latch. + for(int fault=0;fault<6;++fault){ + sessionMode=0;Mode::current=&round;manager.controller=&owner;world.local=&owner;manager.count=1;manager.connected=true; + ERR_LocalAdmission a(&round);assert(!a.Resolve(&round,1,&owner,UUID{0}).IsNull()); + if(fault==0)sessionMode=1; + if(fault==1)manager.controller=&replacement; + if(fault==2)world.local=&replacement; + if(fault==3)manager.count=2; + if(fault==4)manager.connected=false; + if(fault==5)Mode::current=&nextRound; + assert(!a.Validate()); + sessionMode=0;Mode::current=&round;manager.controller=&owner;world.local=&owner;manager.count=1;manager.connected=true; + assert(!a.Validate());assert(a.Resolve(&round,1,&owner,UUID{88}).IsNull()); + } + // A newly created round owns a fresh key. Old resolver cannot be reused. + Mode::current=&nextRound;ERR_LocalAdmission next(&nextRound);UUID nextKey=next.Resolve(&nextRound,1,&owner,UUID{0});assert(!(nextKey==selected)); + assert(admission.Resolve(&nextRound,1,&owner,UUID{0}).IsNull()); + // Fresh network modes remain native even on an absent controller/local world, + // after Stop, on null backend data, and with changing native identities. + for(int mode: {1,2,3}){ + sessionMode=mode;int before=generated;ERR_LocalAdmission network(&nextRound);game=nullptr; + assert(network.Resolve(&nextRound,9,nullptr,UUID{41})==UUID{41}); + assert(network.Resolve(&nextRound,9,nullptr,UUID{0}).IsNull()); + network.Stop();assert(network.Validate()); + assert(network.Resolve(&nextRound,9,nullptr,UUID{42})==UUID{42}); + assert(!network.Selected()&&!network.LocalKey()&&generated==before);game=&world; + } + // Incomplete local context cannot generate a key and cannot later self-repair. + sessionMode=0;manager.count=0;int before=generated;ERR_LocalAdmission invalid(&nextRound); + assert(invalid.Resolve(&nextRound,1,&owner,UUID{0}).IsNull()&&generated==before); + manager.count=1;assert(invalid.Resolve(&nextRound,1,&owner,UUID{0}).IsNull()); +} +''') +print('PASS: actual local admission context/selection/latch, same-round late identity, replacement/mode failure, fresh round and untouched network path') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mission_rules.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mission_rules.py new file mode 100644 index 0000000..35a390b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mission_rules.py @@ -0,0 +1,29 @@ +from policy_harness import ROOT,body,run +source=ROOT/'addons/core/Scripts/Game/ERR/ERR_MissionRules.c' +rules='\n'.join(body(source,x) for x in ['static bool Terminal(', 'static bool CanTransition(', 'static bool DefenceComplete(', 'static bool ContactFresh(', 'static int Discovery(']).replace('ERR_Phase.', 'ERR_Phase::') +rules += '\n' + body(ROOT/'addons/core/Scripts/Game/ERR/ERR_PlayerRoster.c', 'static bool CanEnter(').replace('ERR_Phase.', 'ERR_Phase::') +run('''#include +namespace ERR_Phase {enum {PREPARING,PRISON,RADIO_SEARCH,RADIO_DEFENCE,EXTRACTION,VICTORY,DEFEAT};} +'''+rules+''' +int main(){ + for(int phase=-1;phase<=7;phase++){ + assert(!CanEnter(true,phase)); + assert(CanEnter(false,phase)==(phase>=1&&phase<=3)); + } + for(int from=0;from<=6;from++)for(int to=0;to<=6;to++){ + bool expected=(from<5&&to==from+1)||(from>=1&&from<=4&&to==6); + assert(CanTransition(from,to)==expected); + } + assert(!DefenceComplete(100,0,180,true));assert(DefenceComplete(180,0,180,true)); + assert(!DefenceComplete(180,0,180,false));assert(!DefenceComplete(300,-1,180,true)); + assert(!DefenceComplete(10,20,180,true));assert(!DefenceComplete(300,0,0,true)); + assert(ContactFresh(0,120000));assert(!ContactFresh(0,120001)); + assert(!ContactFresh(100,99));assert(!ContactFresh(-1,0)); + for(int roll=0;roll<100;roll++){ + assert(Discovery(0,roll,0)==1);assert(Discovery(0,roll,100)==2); + assert(Discovery(1,roll,0)==2);assert(Discovery(2,roll,0)==2); + assert(Discovery(0,roll,15)==(roll<15?2:1)); + } +} +''') +print('PASS: all phase transitions, terminal states, defence boundaries, stale/future observations, intel discovery') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mortar_transactions.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mortar_transactions.py new file mode 100644 index 0000000..427c832 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_mortar_transactions.py @@ -0,0 +1,101 @@ +"""Actual Enforce policies and transaction observation body under narrow API fakes.""" +from policy_harness import ROOT, body, run +r=ROOT/'addons/ai/Scripts/Game/ERR' +readiness=r/'ERR_MortarReadiness.c'; transfer=r/'ERR_MortarSupplyTransfer.c'; battery=r/'ERR_MortarBattery.c' +policy='\n'.join([body(readiness,'static ERR_MortarSupplyState Population('),body(readiness,'static bool AllocationValid('),body(readiness,'static int CycleGate('),body(transfer,'static bool Authority('),body(transfer,'static bool Proven(')]) +policy=policy.replace('ERR_MortarSupplyState.','ERR_MortarSupplyState::') +run('''#include +enum class ERR_MortarSupplyState {FAILED=-1,PENDING,READY}; +'''+policy+''' +int main(){ + using S=ERR_MortarSupplyState; + assert(Population(0,0,0,false,false)==S::PENDING); + assert(Population(3,3,0,true,false)==S::PENDING); + assert(Population(4,3,1,false,false)==S::PENDING); + assert(Population(4,3,1,true,false)==S::READY); + assert(Population(4,3,1,true,true)==S::FAILED); + assert(Population(0,0,0,false,true)==S::FAILED); + assert(Population(5,3,2,true,false)==S::FAILED); + assert(Population(4,4,0,true,false)==S::FAILED); + assert(AllocationValid(0)&&AllocationValid(9)); + assert(!AllocationValid(-1)&&!AllocationValid(10)); + assert(Authority(true,false,1,1)); + assert(!Authority(false,false,1,1)); + assert(!Authority(true,true,1,1)); + assert(!Authority(true,false,1,2)); + for(int bits=0;bits<16;bits++) { + bool callback=bits&1, source=bits&2, destination=bits&4, exact=bits&8; + assert(Proven(callback,source,destination,exact)==(bits==13)); + } + int counter=0; + assert(CycleGate(true,0,counter,8,1)==0); // no physical projectile, no count + for(int i=0;i<1000;i++) if(CycleGate(true,1,counter,8,0)==1) counter++; + assert(counter==0); // pending supply never invokes native super + assert(CycleGate(true,1,counter,8,-1)==-1); + if(CycleGate(true,1,counter,8,1)==1) counter++; + assert(counter==1 && CycleGate(true,1,counter,8,1)==0); // same event not counted twice + assert(CycleGate(false,2,counter,8,1)==-1); + assert(CycleGate(true,8,7,8,-1)==1); // final confirmed round needs no ninth shell +} +''') +# Retain actual control flow; translate only native member/type syntax and the +# component lookup into a directly supplied fake item component. +poll=body(transfer,'ERR_MortarSupplyState Poll(') +poll=poll.replace('ERR_MortarSupplyState.','ERR_MortarSupplyState::').replace('Replication.IsServer()','Replication::IsServer()').replace('InventoryItemComponent item;','InventoryItemComponent* item=nullptr;').replace('if (m_Shell) item = InventoryItemComponent.Cast(m_Shell.FindComponent(InventoryItemComponent));','if (m_Shell) item = m_Shell;').replace('item.GetParentSlot().GetStorage()','item->GetParentSlot()->GetStorage()').replace('item.GetParentSlot()','item->GetParentSlot()') +ack=body(transfer,'void Acknowledge(') +run('''#include +enum class ERR_MortarSupplyState {FAILED=-1,PENDING,READY}; +struct Replication { static bool IsServer(){return true;} }; +struct Slot { void* storage; void* GetStorage(){return storage;} }; +struct InventoryItemComponent { Slot* slot; Slot* GetParentSlot(){return slot;} }; +'''+body(transfer,'static bool Proven(')+''' +struct Transfer { + bool valid=true,source=true,destination=false,m_Accepted=true,m_Invalidated=false,m_Resolved=false,m_Ready=false; + int m_Source=1,m_Destination=2,m_Acknowledgement=0; + float m_Deadline=8000; + void* m_Storage=this; + Slot slot{this}; InventoryItemComponent item{&slot}; InventoryItemComponent* m_Shell=&item; + bool Valid(float){return valid&&!m_Invalidated;} + bool Contains(int which){return m_Shell && (which==1 ? source : destination);} +'''+ack+poll+''' +}; +int main(){ + using S=ERR_MortarSupplyState; + Transfer t; assert(t.Poll(0)==S::PENDING && !t.m_Resolved); + t.Acknowledge(true); t.Acknowledge(false); assert(t.m_Acknowledgement==1); + assert(t.Poll(1)==S::PENDING && !t.m_Resolved); // callback alone cannot supply + t.destination=true; assert(t.Poll(2)==S::PENDING); // source still claims ownership + t.source=false; t.slot.storage=nullptr; assert(t.Poll(3)==S::PENDING); // wrong storage + t.slot.storage=t.m_Storage; assert(t.Poll(4)==S::READY && t.m_Resolved); + Transfer stopped; stopped.m_Invalidated=true; stopped.source=false; stopped.destination=true; stopped.Acknowledge(true); + assert(stopped.Poll(5)==S::FAILED && !stopped.m_Ready && stopped.m_Resolved); + Transfer timeout; assert(timeout.Poll(8000)==S::FAILED && !timeout.m_Resolved && timeout.m_Invalidated); + timeout.source=false;timeout.destination=true;timeout.Acknowledge(true); + assert(timeout.Poll(9000)==S::FAILED && timeout.m_Resolved && !timeout.m_Ready); // late success cannot authorize + Transfer late;late.source=false;late.destination=true;late.Acknowledge(true); + assert(late.Poll(8000)==S::FAILED); // no deadline-boundary success bypass + Transfer failed;failed.Acknowledge(false);failed.Acknowledge(true); + assert(failed.Poll(1)==S::FAILED && failed.m_Acknowledgement==-1 && failed.m_Resolved); + Transfer gone;gone.m_Shell=nullptr;gone.Acknowledge(true); + assert(gone.Poll(1)==S::PENDING && !gone.m_Resolved); // ambiguous until deadline, never another move + Transfer unauthorized;unauthorized.valid=false; + assert(unauthorized.Poll(0)==S::FAILED && !unauthorized.m_Resolved); +} +''') +# Source contract checks constrain integration that cannot run without the engine. +b=battery.read_text();sys=(r/'ERR_MortarSystem.c').read_text();f=(r/'ERR_MortarFiring.c').read_text();rd=readiness.read_text();tr=transfer.read_text() +update=body(battery,'void Update(float now)') +assert update.index('m_Readiness.Poll(now)') < update.index('if (!Operational())') +assert 'm_Allocated = true;' in rd and rd.count('TrySpawnPrefabToStorage(ERR_MortarBattery.SHELL')==1 +assert rd.index('m_Allocated = true;') < rd.index('TrySpawnPrefabToStorage(ERR_MortarBattery.SHELL') +assert 'm_aUnitPrefabSlots = new array()' in rd and 'PurgeSpawnRequestsForGroup(group)' in rd +assert 'DeleteSpawned' not in body(readiness,'void Stop(') +assert 'battery.Stop();' in body(r/'ERR_MortarSystem.c','void Stop(') +assert tr.count('TryMoveItemToStorage(')==1 and 'GetItem()' not in tr.replace('callback.GetItem()','') +assert 'm_AttemptedShells.Insert(item)' in b and 'm_AttemptedShells.Contains(item)' in b +assert 'm_Transfer.CapturedOrder() == OrderId' in b +assert 'battery.PendingSupplyReport' in sys and 'supply == ERR_MortarSupplyState.PENDING) return;' in sys +shoot=f[f.index('modded class SCR_AIStaticArtilleryBehavior_ShootingLogic'):] +assert shoot.index('battery.SupplyState(')').replace('projectile.GetOrigin()', 'projectile->GetOrigin()') +s=s.replace('GetGame().GetWorld().GetWorldTime()', '20000.f') +run('''#include +#include +#include +#include +struct Entity { int GetOrigin(){return 0;} }; +struct Battery {bool CommandOpen=true,Released=true;int SourceId=7,OrderId=1;float AimedAt=19000,FlightTime=20;}; +struct Items {std::vector values;bool Contains(Entity* p){return std::find(values.begin(),values.end(),p)!=values.end();}void Insert(Entity* p){values.push_back(p);}}; +template void PrintFormat(Args... args) {} +struct Probe { + bool m_Stopped=false,m_BadProjectile=false;Battery* m_Battery;Entity* m_Gun; + Items m_Projectiles;int m_Events=0,m_Step=1,m_Source=7;std::string m_BadReason; +'''+s+''' +}; +int main(){ + Entity gun,other,projectile;Battery battery; + Probe valid;valid.m_Battery=&battery;valid.m_Gun=&gun; + valid.NativeProjectile(&other,&projectile);assert(valid.m_Events==0&&!valid.m_BadProjectile); + valid.NativeProjectile(&gun,&projectile);assert(valid.m_Events==1&&!valid.m_BadProjectile); + valid.NativeProjectile(&gun,&projectile);assert(valid.m_Events==1&&valid.m_BadProjectile); + for(int invalid=0;invalid<8;++invalid){ + battery=Battery();Probe p;p.m_Battery=&battery;p.m_Gun=&gun; + if(invalid==0)battery.CommandOpen=false; + if(invalid==1)battery.Released=false; + if(invalid==2)battery.SourceId=8; + if(invalid==3)battery.AimedAt=-1; + if(invalid==4)battery.AimedAt=9999; // older than ten seconds + if(invalid==5)battery.FlightTime=0; + if(invalid==6)p.m_Step=2; + if(invalid==7){p.NativeProjectile(&gun,nullptr);assert(p.m_BadProjectile&&p.m_Events==0);continue;} + p.NativeProjectile(&gun,&projectile); + assert(p.m_Events==1);assert(p.m_BadProjectile); + } + battery=Battery();Probe stopped;stopped.m_Battery=&battery;stopped.m_Gun=&gun;stopped.m_Stopped=true; + stopped.NativeProjectile(&gun,&projectile);assert(stopped.m_Events==0); +} +''') +print('PASS: actual native-event probe gate rejects duplicate/null/wrong-order/uncommitted/un-aimed events; unrelated guns and stopped observers cannot count shots') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_performance_comparison.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_performance_comparison.py new file mode 100644 index 0000000..9f2401f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_performance_comparison.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +"""Synthetic comparator regression only; no measured performance evidence.""" +import copy +import csv +import importlib.util +import json +from pathlib import Path +import tempfile +import unittest + +ROOT = Path(__file__).resolve().parents[1] +spec = importlib.util.spec_from_file_location('compare_performance', ROOT / 'tools/compare_performance.py') +comparison = importlib.util.module_from_spec(spec) +spec.loader.exec_module(comparison) + + +class PerformanceComparisonTests(unittest.TestCase): + def setUp(self): + self.directory = tempfile.TemporaryDirectory(prefix='erri-synthetic-performance-') + self.addCleanup(self.directory.cleanup) + self.root = Path(self.directory.name) + template = { + 'variant': 'baseline', 'repeat_id': 'r1', 'artifact_id': 'synthetic-baseline', 'addon_ids': ['synthetic-base'], + 'engine_version': 'synthetic-engine', + 'hardware': {'cpu': 'synthetic-cpu', 'gpu': 'synthetic-gpu', 'ram_gib': 32, 'os': 'synthetic-os', 'driver': 'synthetic-driver'}, + 'workload': {'map': 'synthetic-map', 'route': 'synthetic-route', 'players': 12, 'ai': 36, 'vehicles': 4, 'entities': 100, + 'settings': {'resolution': [1920, 1080], 'fps_limit': 0, 'vsync': False}, 'warmup_seconds': 30, 'duration_seconds': 60}, + 'capture': {'kind': 'client_frame', 'environment': 'client', 'tool': 'synthetic-generator', 'version': '1'}, + 'sample_file': 'unused.csv', + } + self.data = {'schema_version': 1, 'sample_origin': 'synthetic', 'runs': []} + for repeat in range(1, 4): + for variant, frame in [('baseline', 20), ('successor', 10)]: + run = copy.deepcopy(template) + run.update(variant=variant, repeat_id=f'r{repeat}', artifact_id=f'synthetic-{variant}', sample_file=f'{variant}-{repeat}.csv') + run['addon_ids'] = [f'synthetic-{variant}'] + self.data['runs'].append(run) + with (self.root / run['sample_file']).open('w', newline='') as stream: + writer = csv.writer(stream) + writer.writerow(comparison.COLUMNS) + for index in range(1, 90000 // frame + 1): + writer.writerow([index, index * frame, frame, 12, 36, 4, 100, 2]) + + def execute(self): + manifest = self.root / 'synthetic.json' + manifest.write_text(json.dumps(self.data)) + return comparison.compare(manifest) + + def change_csv(self, transform): + path = self.root / self.data['runs'][0]['sample_file'] + rows = path.read_text().splitlines() + path.write_text('\n'.join(transform(rows)) + '\n') + + def replace_frames(self, frames): + path = self.root / self.data['runs'][0]['sample_file'] + with path.open('w', newline='') as stream: + writer = csv.writer(stream) + writer.writerow(comparison.COLUMNS) + elapsed = 0 + for index, frame in enumerate(frames, 1): + elapsed += frame + writer.writerow([index, elapsed, frame, 12, 36, 4, 100, 2]) + + def test_paired_arithmetic_is_explicitly_synthetic_and_not_acceptance(self): + report = self.execute() + self.assertEqual(report['sample_origin'], 'synthetic') + self.assertEqual(report['acceptance'], 'not_evaluated') + self.assertEqual(report['aggregate']['baseline']['median_fps'], 50) + self.assertEqual(report['aggregate']['successor']['p99_frame_ms'], 10) + self.assertEqual(report['median_paired_deltas']['median_frame_reduction_percent'], 50) + self.assertEqual(report['runs'][0]['samples_measured'], 3000) + self.assertEqual(len(report['manifest_sha256']), 64) + + def test_percentiles_and_warmup_exclusion(self): + self.assertEqual(comparison.percentile(list(range(1, 101)), .99), 99) + self.change_csv(lambda rows: [rows[0]] + [row.rsplit(',', 1)[0] + ',999' if i < 1500 else row for i, row in enumerate(rows[1:])]) + self.assertEqual(self.execute()['aggregate']['baseline']['median_ai_simulation_ms'], 2) + + def test_rejects_mismatched_conditions(self): + original = copy.deepcopy(self.data) + mutations = [('hardware', 'cpu', 'other'), ('workload', 'ai', 35), ('workload', 'route', 'other'), + ('workload', 'settings', {'fps_limit': 30}), ('workload', 'warmup_seconds', 31), ('capture', 'environment', 'workbench_headless')] + for group, key, value in mutations: + with self.subTest(group=group, key=key): + self.data = copy.deepcopy(original) + self.data['runs'][1][group][key] = value + with self.assertRaisesRegex(ValueError, 'mismatched'): + self.execute() + + def test_rejects_missing_pair_and_duplicate_repeat(self): + self.data['runs'][-1]['repeat_id'] = 'unpaired' + with self.assertRaisesRegex(ValueError, 'Every repeat'): + self.execute() + self.data['runs'][-1]['repeat_id'] = 'r1' + with self.assertRaisesRegex(ValueError, 'Duplicate repeat'): + self.execute() + + def test_rejects_reused_samples(self): + self.data['runs'][1]['sample_file'] = self.data['runs'][0]['sample_file'] + with self.assertRaisesRegex(ValueError, 'reused'): + self.execute() + + def test_rejects_incomplete_capture(self): + self.change_csv(lambda rows: rows[:-1]) + with self.assertRaisesRegex(ValueError, 'incomplete recording'): + self.execute() + + def test_rejects_final_stall_hiding_most_of_measurement(self): + # Before the coverage check this 1.2-second sample was accepted as a + # 60-second measurement with 100 FPS, dropping its 60-second stall. + self.replace_frames([20] * 1500 + [10] * 120 + [60000]) + with self.assertRaisesRegex(ValueError, 'only 2.000%.*boundary stalls'): + self.execute() + + def test_rejects_warmup_crossing_stall_hiding_measurement(self): + # The long frame starts in warm-up and consumes 58.8 measured seconds. + self.replace_frames([20] * 1499 + [58820] + [10] * 120) + with self.assertRaisesRegex(ValueError, 'only 2.000%.*boundary stalls'): + self.execute() + + def test_short_boundary_crossings_are_visible_with_high_coverage(self): + self.replace_frames([17] * 5295) + run = self.execute()['runs'][0] + self.assertGreaterEqual(run['measurement_coverage_fraction'], .99) + self.assertLess(run['measurement_coverage_fraction'], 1) + self.assertEqual(len(run['boundary_frames_excluded']), 2) + overlap = sum(frame['measurement_overlap_ms'] for frame in run['boundary_frames_excluded']) + self.assertAlmostEqual(run['measured_frame_seconds'] * 1000 + overlap, 60000) + + def test_rejects_coverage_just_below_threshold(self): + self.replace_frames([20] * 1500 + [10] * 5939 + [620]) + with self.assertRaisesRegex(ValueError, 'only 98.983%'): + self.execute() + + def test_rejects_missing_or_duplicate_frames(self): + self.change_csv(lambda rows: rows[:100] + rows[101:]) + with self.assertRaisesRegex(ValueError, 'frame index'): + self.execute() + + def test_rejects_population_drift(self): + self.change_csv(lambda rows: rows[:1] + [rows[1].replace(',12,36,', ',12,35,')] + rows[2:]) + with self.assertRaisesRegex(ValueError, 'ai workload changed'): + self.execute() + + def test_rejects_nonfinite_sample(self): + self.change_csv(lambda rows: rows[:1] + [rows[1].rsplit(',', 1)[0] + ',nan'] + rows[2:]) + with self.assertRaisesRegex(ValueError, 'invalid frame/time/load'): + self.execute() + + def test_rejects_extra_columns_and_timing_gaps(self): + original = (self.root / self.data['runs'][0]['sample_file']).read_text() + self.change_csv(lambda rows: [rows[0], rows[1] + ',extra'] + rows[2:]) + with self.assertRaisesRegex(ValueError, 'columns'): + self.execute() + (self.root / self.data['runs'][0]['sample_file']).write_text(original) + self.change_csv(lambda rows: [rows[0], rows[1].replace('1,20,20,', '1,30,20,')] + rows[2:]) + with self.assertRaisesRegex(ValueError, 'elapsed delta'): + self.execute() + + def test_rejects_incomplete_metadata_and_infinite_json(self): + del self.data['runs'][0]['capture']['version'] + with self.assertRaisesRegex(ValueError, 'expected fields'): + self.execute() + self.data['runs'][0]['capture']['version'] = '1' + self.data['runs'][0]['workload']['settings']['bad'] = float('inf') + with self.assertRaisesRegex(ValueError, 'Non-finite'): + self.execute() + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_player_admission_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_player_admission_policy.py new file mode 100644 index 0000000..56b718c --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_player_admission_policy.py @@ -0,0 +1,75 @@ +"""Execute source-local admission bodies and the reservation rejection predicate. + +Only vector arithmetic and opaque UUID equality/nullness are substituted. This is +not a character collision, controller, callback, reconnect or native engine test. +""" +import re +from policy_harness import ROOT, body, run +base = ROOT / 'addons/core/Scripts/Game/ERR' +rules = body(base/'ERR_PlayerRoster.c', 'static bool CanEnter(') +rules += '\n' + body(base/'ERR_SpawnFinalization.c', 'static bool Allows(') +rules += '\n' + body(base/'ERR_SpawnFinalization.c', 'static bool PositionClose(') +rules = rules.replace('ERR_Phase.', 'ERR_Phase::').replace('ERR_PlayerLifeRules.', '') +rules = rules.replace('vector.', 'vector::').replace('Math.', 'Math::') +# Extract the actual condition, rather than maintaining a second implementation. +# Native geometry/terrain branches of Clear are deliberately not emulated. +clear = body(base/'ERR_SpawnPlacement.c', 'bool Clear(') +match = re.search(r'if \((id != ownReservation[^\n]+)\) return false;', clear) +assert match, 'Reservation policy moved: update the source-local extraction' +predicate = match[1].replace('vector.', 'vector::').replace('Math.', 'Math::') +rules += '\nstatic bool ReservationAllows(int id, int ownReservation, vector position, vector reserved) { return !(' + predicate + '); }\n' +run('''#include +#include +#include +namespace ERR_Phase {enum {PREPARING,PRISON,RADIO_SEARCH,RADIO_DEFENCE,EXTRACTION,VICTORY,DEFEAT};} +struct UUID { + int identity; + bool IsNull() const { return identity==0; } + bool operator==(UUID other) const { return identity==other.identity; } +}; +struct vector { + float x,y,z; + float operator[](int axis) const { return axis==0?x:(axis==1?y:z); } + static float DistanceXZ(vector a, vector b) {return std::hypot(a.x-b.x,a.z-b.z);} +}; +namespace Math {static float AbsFloat(float value) {return std::abs(value);}} +''' + rules + ''' +int main() { + // Complete independent authorization matrix, including invalid phases and null IDs. + for (int phase=-1;phase<=7;++phase) + for (int flags=0;flags<32;++flags) + for (int oldId=0;oldId<=2;++oldId) + for (int currentId=0;currentId<=2;++currentId) { + bool connected=flags&1,usedLife=flags&2,sameController=flags&4; + bool sameRequest=flags&8,noControlledEntity=flags&16; + bool expected=phase>=1&&phase<=3&&connected&&!usedLife&&oldId>0&&oldId==currentId&&sameController&&sameRequest&&noControlledEntity; + assert(Allows(phase,connected,usedLife,UUID{oldId},UUID{currentId},sameController,sameRequest,noControlledEntity)==expected); + } + const vector origin={0,0,0}; + // Inclusive vertical tolerance and just-inside/outside horizontal boundary. + for (float y : {-1.001f,-1.f,-0.2f,0.f,0.2f,1.f,1.001f}) { + assert(PositionClose(vector{0,y,0},origin)==(std::abs(y)<=1)); + assert(PositionClose(vector{.599f,y,0},origin)==(std::abs(y)<=1)); + assert(!PositionClose(vector{.601f,y,0},origin)); + } + assert(PositionClose(vector{.3f,.2f,.3f},origin)); + assert(!PositionClose(vector{.5f,0,.5f},origin)); // radial, not independent axis allowance + assert(!PositionClose(vector{0,-20,0},origin)); // fallen below unchanged XZ + assert(!PositionClose(vector{0,20,0},origin)); // displaced above unchanged XZ + // Connection IDs1 and13 must conflict identically; only the caller's own slot is exempt. + for (int id : {1,13,99}) + for (int owner : {-1,1,13,99}) + for (float x : {-1.201f,-1.199f,0.f,1.199f,1.201f}) + for (float y : {-2.001f,-2.f,-1.999f,0.f,1.999f,2.f,2.001f}) { + bool expected=id==owner || std::abs(x)>=1.2 || std::abs(y)>=2; + assert(ReservationAllows(id,owner,origin,vector{x,y,0})==expected); + } + assert(!ReservationAllows(1,13,origin,vector{.8f,0,.8f})); + assert(ReservationAllows(1,13,origin,vector{.9f,0,.9f})); + assert(ReservationAllows(1,13,origin,vector{1.5f,0,0})); // authored grid spacing + // Own reservation is excluded while finalization still checks native geometry separately. + assert(ReservationAllows(13,13,origin,origin)); + assert(!ReservationAllows(13,1,origin,origin)); +} +''') +print('PASS: player admission phase/life/identity/controller matrix, preload displacement limits, pending reservation overlap and owner exclusion') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_prison_placement_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_prison_placement_policy.py new file mode 100644 index 0000000..cb4a552 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_prison_placement_policy.py @@ -0,0 +1,59 @@ +"""Execute the actual prison search body with a recording clearance predicate. +This verifies bounded search order/termination, not terrain or body clearance. +""" +from policy_harness import ROOT,body,run +source=ROOT/'addons/core/Scripts/Game/ERR/ERR_SpawnPlacement.c' +search=(body(source,'bool Prison(').replace('map reservations','map* reservations') + .replace('out vector position','vector& position').replace('ERR_Actors.', 'ERR_Actors::').replace('Math.', 'Math::')) +run('''#include +#include +#include +#include +#include +struct vector {float x,y,z;}; +vector operator+(vector a,vector b){return {a.x+b.x,a.y+b.y,a.z+b.z};} +vector Vector(float x,float y,float z){return {x,y,z};} +template struct map {}; +namespace ERR_Actors {vector Ground(vector value){return value;}} +namespace Math {int AbsInt(int value){return std::abs(value);}} +struct Search { + std::vector visited; + int accept=-1; + bool Clear(vector candidate,map*){visited.push_back(candidate);return int(visited.size())-1==accept;} +''' + search + ''' +}; +int main(){ + const vector center={6090,100,7160}; + vector result={-1,-1,-1}; + Search blocked; + assert(!blocked.Prison(center,nullptr,result)); + assert(blocked.visited.size()==16); + assert(result.x==-1&&result.y==-1&&result.z==-1); // no outside fallback + std::set> unique; + for(int i=0;i<16;++i){ + vector candidate=blocked.visited[i]; + float x=candidate.x-center.x,z=candidate.z-center.z; + assert(std::abs(x)<=4.5f&&std::abs(z)<=4.5f); + assert(unique.insert({x,z}).second); + assert(std::abs(x)==1.5f||std::abs(x)==4.5f); + assert(std::abs(z)==1.5f||std::abs(z)==4.5f); + int outer=(std::abs(x)==4.5f)+(std::abs(z)==4.5f); + assert(outer==(i<4?0:(i<12?1:2))); + if(i<12)assert(std::hypot(x,z)<5); // inner and edge spawns meet prior 5m check + for(int j=0;j=3); + } + } + // Select any first available position; never bypass the native clearance predicate. + for(int accepted=0;accepted<16;++accepted){ + Search search;search.accept=accepted; + assert(search.Prison(center,nullptr,result)); + assert(search.visited.size()==unsigned(accepted+1)); + vector expected=blocked.visited[accepted]; + assert(result.x==expected.x&&result.y==expected.y&&result.z==expected.z); + } + +} +''') +print('PASS: prison search packs 16 unique 3m-spaced inside-wall centers, prioritizes inner/edge positions and never bypasses clearance') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_defence_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_defence_policy.py new file mode 100644 index 0000000..2e72d10 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_defence_policy.py @@ -0,0 +1,44 @@ +"""Exercise actual radio tuning, defender and continuity policy bodies. +Native fixture covers service events and physical character state separately. +""" +from policy_harness import ROOT, body, run +source=ROOT/'addons/core/Scripts/Game/ERR/ERR_RadioDefenceService.c' +functions='\n'.join(body(source, signature) for signature in ( + 'static float DefenceRadius(', 'static float TuneRadius(', + 'static bool CanTune(', 'static bool Defender(', 'static float SinceAfterSample(', +)).replace('ERR_Phase.', 'ERR_Phase::') +functions+='\n'+body(ROOT/'addons/core/Scripts/Game/ERR/ERR_MissionRules.c','static bool DefenceComplete(') +run('''#include +#include +namespace ERR_Phase {enum {PREPARING,PRISON,RADIO_SEARCH,RADIO_DEFENCE,EXTRACTION,VICTORY,DEFEAT};} +'''+functions+''' +int main() { + for (int phase=-1;phase<=7;++phase) + for (int flags=0;flags<16;++flags) + for (int knowledge=0;knowledge<=2;++knowledge) + for (float distance : {-1.f,0.f,4.999f,5.f,5.001f,60.f}) { + bool registered=flags&1,radio=flags&2,player=flags&4,conscious=flags&8; + bool expected=phase==ERR_Phase::RADIO_SEARCH && registered && radio && knowledge>=2 && player && conscious && distance>=0 && distance<=5; + assert(CanTune(phase,registered,radio,knowledge,player,conscious,distance)==expected); + } + for (int flags=0;flags<4;++flags) + for (float distance : {-1.f,0.f,59.999f,60.f,60.001f}) + assert(Defender(flags&1,flags&2,distance)==(bool(flags&1)&&bool(flags&2)&&distance>=0&&distance<60)); + assert(DefenceRadius()==60 && TuneRadius()==5); + float since=SinceAfterSample(-1,-1,1000,2); + assert(since==1000); + since=SinceAfterSample(since,1000,6000,1); + assert(since==1000); // second person can leave without resetting remaining defender + since=SinceAfterSample(since,6000,7000,0); + assert(since==-1); // absent/dead/unconscious/empty-server samples reset + since=SinceAfterSample(since,7000,8000,1); + assert(since==8000); + assert(!DefenceComplete(37999,since,30000,true)); + assert(DefenceComplete(38000,since,30000,true)); + assert(!DefenceComplete(38000,since,45000,true)); // live setting increased + assert(SinceAfterSample(since,38000,30000,1)==30000); // backward clock resets interval + assert(SinceAfterSample(since,38000,-1,1)==-1); + assert(SinceAfterSample(since,38000,50000,-1)==-1); +} +''') +print('PASS: radio authorization/discovery/phase matrix, exact distance limits, defender handover, interruption, empty samples, clock regression and duration boundary') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_feedback_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_feedback_policy.py new file mode 100644 index 0000000..21b796f --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_radio_feedback_policy.py @@ -0,0 +1,36 @@ +"""Execute the production presentation-state policy; no network claim.""" +from policy_harness import ROOT, body, run +source=ROOT/'addons/core/Scripts/Game/ERR/ERR_RadioFeedback.c' +function=body(source,'static ERR_RadioFeedback Next(').replace('ERR_RadioFeedback.', 'ERR_RadioFeedback::') +run('''#include +enum class ERR_RadioFeedback {INACTIVE, WAITING, TRANSMITTING, INTERRUPTED}; +'''+function+''' +int main() { + using S=ERR_RadioFeedback; + const S emptyExpected[]={S::WAITING,S::WAITING,S::INTERRUPTED,S::INTERRUPTED}; + for (int previous=0;previous<4;++previous) { + S state=static_cast(previous); + // Terminal/new-round state always clears; stale occupancy cannot resurrect it. + assert(Next(state,false,false)==S::INACTIVE); + assert(Next(state,false,true)==S::INACTIVE); + assert(Next(state,true,true)==S::TRANSMITTING); + assert(Next(state,true,false)==emptyExpected[previous]); + } + S state=Next(S::INACTIVE,true,false); + assert(state==S::WAITING); + for (int sample=0;sample<100;++sample) state=Next(state,true,false); + assert(state==S::WAITING); // initial wait is not an interruption + state=Next(state,true,true); + assert(state==S::TRANSMITTING); + state=Next(state,true,false); + assert(state==S::INTERRUPTED); + for (int sample=0;sample<100;++sample) state=Next(state,true,false); + assert(state==S::INTERRUPTED); // do not alternate guide messages while empty + state=Next(state,true,true); + assert(state==S::TRANSMITTING); + state=Next(state,false,true); + assert(state==S::INACTIVE); + assert(Next(state,true,false)==S::WAITING); // fresh round has no stale interruption +} +''') +print('PASS: actual radio feedback policy, initial wait, interruption persistence, resumption and terminal/new-round reset') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_recovery_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_recovery_policy.py new file mode 100644 index 0000000..ae1180d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_recovery_policy.py @@ -0,0 +1,17 @@ +from policy_harness import ROOT, body, run +p = ROOT / 'addons/core/Scripts/Game/ERR/ERR_RecoveryService.c' +rules = body(p, 'static int SurvivorKind(') + '\n' + body(p, 'static bool NeedsRescuer(') +run('''#include +''' + rules + ''' +int main() { + for (int flags=0;flags<16;flags++) { + bool alive=flags&1, connected=flags&2, same=flags&4, conscious=flags&8; + int expected=!alive?0:(!connected||!same)?1:conscious?2:3; + assert(SurvivorKind(alive,connected,same,conscious)==expected); + } + for (int conscious=0;conscious<=12;conscious++) + for (int incapacitated=0;incapacitated<=12;incapacitated++) + assert(NeedsRescuer(conscious,incapacitated)==(conscious==0&&incapacitated>0)); +} +''') +print('PASS: recovery state excludes dead bodies, preserves reservations, requires controlled rescuers and distinguishes empty/all-dead teams') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_release_check.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_release_check.py new file mode 100644 index 0000000..2d7f72d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_release_check.py @@ -0,0 +1,409 @@ +"""Release-gate bypass regressions. Synthetic evidence is confined to temp dirs.""" +from pathlib import Path +import copy +import hashlib +import json +import shutil +import subprocess +import sys +import tempfile +import unittest + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / 'tools')) +import release_check as gate +from native_report import analyze +from source_manifest import addon_manifest +from native_provenance import snapshot, bindings, persist, seal_run, archive_source, qualify_archive, MANIFEST, METADATA, PROVENANCE + + +class ReleaseAuditTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory(prefix='erri-release-test-') + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + self.write('addons/core/addon.gproj', 'Project {}') + self.write('addons/core/Scripts/Game/Test.c', 'class Test {}') + self.write('addons/core/Assets/test.png', b'nonempty resource bytes') + self.write('docs/evidence/current/manual.txt', 'Synthetic test fixture, not real acceptance.\n') + self.log = 'docs/evidence/current/console.log.txt' + self.report = 'docs/evidence/current/report.json' + self.manifest = 'docs/evidence/current/source-sha256.json' + self.write(self.log, 'ERR SMOKE PASS: synthetic\nERR SMOKE COMPLETE: synthetic\n') + self.refresh_native() + ordinary = {'status': 'passed', 'evidence': ['docs/evidence/current/manual.txt']} + native = {'status': 'passed', 'evidence': [self.report, self.manifest], + 'source_manifest': self.manifest, 'native_report': self.report} + self.ledger = {'target': 'Everon, vanilla factions, 12 players', + 'cases': {name: copy.deepcopy(ordinary) for name in gate.REQUIRED_CASES}, + 'development_checks': {'clean_native_runtime': copy.deepcopy(native)}} + self.ledger['cases']['independent_native_build'] = copy.deepcopy(native) + + def write(self, relative, value): + path = self.root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(value if isinstance(value, bytes) else value.encode()) + + def json(self, relative, value): + self.write(relative, json.dumps(value)) + + def refresh_native(self): + captured = snapshot(self.root, ['synthetic-runner-not-an-engine']) + archive = Path(self.manifest).parent + self.write(self.manifest, captured[0]) + self.write(str(archive / MANIFEST), captured[0]) + self.write(str(archive / METADATA), captured[1]) + self.json(str(archive / PROVENANCE), {'schema_version': 1, 'kind': 'launch_snapshot'}) + self.json(str(archive / 'runner.json.txt'), {**bindings(captured), 'started_unix': json.loads(captured[1])['captured_unix'] + 1, 'result': 'smoke-completed', 'rounds_required': 1, 'stopped_unix': json.loads(captured[1])['captured_unix'] + 2, 'source_unchanged_after_run': True, 'end_source_sha256': hashlib.sha256(captured[0]).hexdigest(), 'console_sha256': hashlib.sha256((self.root / self.log).read_bytes()).hexdigest()}) + self.json(self.report, analyze((self.root / self.log).read_text(), self.log)) + + def run_audit(self): + self.json('docs/acceptance.json', self.ledger) + return gate.audit(self.root) + + def blocked(self, fragment): + errors = self.run_audit() + self.assertTrue(errors, 'malformed evidence incorrectly qualified') + self.assertTrue(any(fragment in error for error in errors), errors) + + def test_complete_synthetic_fixture_qualifies(self): + self.assertEqual(self.run_audit(), []) + + def test_failed_clean_runtime_blocks_even_when_all_cases_pass(self): + self.ledger['development_checks']['clean_native_runtime']['status'] = 'failed' + self.blocked('clean_native_runtime: status is failed') + + def test_every_required_case_is_mandatory(self): + for name in gate.REQUIRED_CASES: + with self.subTest(name=name): + saved = self.ledger['cases'].pop(name) + self.blocked(name + ': required first-release case is missing') + self.ledger['cases'][name] = saved + + def test_unknown_case_rejected(self): + self.ledger['cases']['fake_replacement'] = {'status': 'passed', 'evidence': [self.log]} + self.blocked('unknown first-release case') + + def test_missing_runtime_gate_rejected(self): + self.ledger['development_checks'].clear() + self.blocked('required clean-runtime gate is missing') + + def test_unknown_and_malformed_statuses_rejected_everywhere(self): + entry = self.ledger['cases']['escape_loop'] + for status in ('PASS', 'waived', '', None, True, {}, []): + with self.subTest(status=status): + entry['status'] = status + self.blocked('unknown or malformed status') + entry['status'] = 'passed' + self.ledger['development_checks']['historical'] = {'status': 'waived', 'evidence': []} + self.blocked('unknown or malformed status') + + def test_malformed_sections_entries_and_evidence(self): + original = copy.deepcopy(self.ledger) + for section in ('cases', 'development_checks'): + self.ledger = copy.deepcopy(original) + self.ledger[section] = [] + self.blocked(section + ' must be an object') + for entry in (None, [], 'passed'): + self.ledger = copy.deepcopy(original) + self.ledger['cases']['escape_loop'] = entry + self.blocked('entry must be an object') + for evidence in (None, self.log, {}, [None], [42]): + self.ledger = copy.deepcopy(original) + self.ledger['cases']['escape_loop']['evidence'] = evidence + self.blocked('evidence') + + def test_passed_requires_nonempty_evidence(self): + self.ledger['cases']['escape_loop']['evidence'] = [] + self.blocked('requires nonempty evidence') + + def test_empty_files_and_whitespace_cannot_qualify(self): + for value in (b'', b' \r\n\t'): + self.write('docs/evidence/empty.txt', value) + self.ledger['cases']['escape_loop']['evidence'] = ['docs/evidence/empty.txt'] + self.blocked('evidence is empty') + + def test_missing_and_directory_evidence_rejected(self): + for path in ('docs/evidence/missing.txt', 'docs/evidence/current'): + self.ledger['cases']['escape_loop']['evidence'] = [path] + self.blocked('not an existing regular file') + + def test_unsafe_paths_rejected(self): + for path in ('/etc/passwd', '../outside', 'docs/../docs/evidence/current/manual.txt', + './docs/evidence/current/manual.txt', 'docs//evidence/current/manual.txt', + 'C:\\evidence.txt', '.git/config', 'docs/evidence/\x00invalid'): + with self.subTest(path=path): + self.ledger['cases']['escape_loop']['evidence'] = [path] + self.assertTrue(self.run_audit()) + + def test_symlinks_even_inside_repository_rejected(self): + for target in (self.root / self.log, Path('/etc/passwd')): + link = self.root / 'docs/evidence/link.txt' + link.symlink_to(target) + self.ledger['cases']['escape_loop']['evidence'] = ['docs/evidence/link.txt'] + self.assertTrue(self.run_audit()) + link.unlink() + + def test_symlink_loop_returns_error_without_crash(self): + link = self.root / 'docs/evidence/loop' + link.symlink_to(link) + self.ledger['cases']['escape_loop']['evidence'] = ['docs/evidence/loop'] + self.assertTrue(self.run_audit()) + + def test_duplicate_paths_rejected(self): + self.ledger['cases']['escape_loop']['evidence'] = [self.log, self.log] + self.blocked('duplicate evidence path') + + def test_missing_explicit_native_fields_rejected(self): + for field in ('source_manifest', 'native_report'): + value = self.ledger['cases']['independent_native_build'].pop(field) + self.blocked('independent_native_build.' + field) + self.ledger['cases']['independent_native_build'][field] = value + + def test_explicit_native_fields_must_be_listed_as_evidence(self): + self.ledger['cases']['independent_native_build']['evidence'] = [self.log] + self.blocked('must also appear') + + def test_current_native_qualification_rejects_changed_added_deleted_files(self): + path = self.root / 'addons/core/Scripts/Game/Test.c' + original = path.read_bytes() + path.write_text('class Changed {}') + self.blocked('changed=1') + path.write_bytes(original) + added = self.root / 'addons/core/Assets/new.custom-resource' + added.write_bytes(b'resource') + self.blocked('missing=1') + added.unlink() + path.unlink() + self.blocked('extra=1') + + def test_clean_runtime_also_requires_current_manifest(self): + self.ledger['cases']['independent_native_build']['status'] = 'pending' + self.write('addons/core/Scripts/Game/Test.c', 'class Changed {}') + self.blocked('clean_native_runtime.source_manifest: manifest does not match') + + def test_incomplete_and_malformed_manifest_rejected(self): + for manifest in ({}, [], {'addons/core/addon.gproj': 'not-sha256'}): + self.json(self.manifest, manifest) + self.blocked('manifest must be a nonempty') + self.json(self.manifest, {'addons/core/addon.gproj': '0' * 64}) + self.blocked('manifest does not match') + + def test_native_report_cannot_hide_raw_errors(self): + self.write(self.log, 'ERR SMOKE PASS: synthetic\nWORLD (E): retained error\nERR SMOKE COMPLETE: synthetic\n') + self.blocked('does not match analysis') + self.refresh_native() + self.blocked('no script, engine or end-screen errors') + + def test_each_native_failure_category_blocks(self): + for failure in ('ERR SMOKE FAIL: assertion', 'Virtual Machine Exception', + 'SCRIPT (E): exception', 'ANIMATION (E): unknown resource', 'ENGINE (F): Crashed', 'Could not find expected endscreen', + "entity won't take damage and wont replicate"): + self.write(self.log, 'ERR SMOKE PASS: test\n' + failure + '\nERR SMOKE COMPLETE: test\n') + self.refresh_native() + self.blocked('native raw log must contain') + + def test_truncated_and_assertion_free_logs_rejected(self): + for text in ('ERR SMOKE PASS: test\n', 'ERR SMOKE COMPLETE: test\n', 'unrelated log\n'): + self.write(self.log, text) + self.refresh_native() + self.blocked('successful completion/assertions') + + def test_native_report_types_and_missing_fields_rejected(self): + report = analyze((self.root / self.log).read_text(), self.log) + for bad in ({}, [], dict(report, smoke_completions=True), dict(report, engine_errors='')): + self.json(self.report, bad) + self.blocked('native_report') + + def test_native_artifacts_cannot_be_mixed_between_archives(self): + self.write('docs/evidence/other/source-sha256.json', (self.root / self.manifest).read_bytes()) + entry = self.ledger['cases']['independent_native_build'] + entry['source_manifest'] = 'docs/evidence/other/source-sha256.json' + entry['evidence'].append(entry['source_manifest']) + self.blocked('same evidence archive') + + def test_historical_development_manifests_need_not_match_current(self): + self.json('docs/evidence/historical/source-sha256.json', {'old/path.c': '0' * 64}) + self.ledger['development_checks']['historical'] = { + 'status': 'passed', 'evidence': ['docs/evidence/historical/source-sha256.json']} + self.ledger['development_checks']['expected_fault'] = {'status': 'failed', 'evidence': []} + self.assertEqual(self.run_audit(), []) + + def test_generated_state_excluded_but_new_resource_formats_included(self): + self.write('addons/core/resourceDatabase.rdb', 'generated') + self.write('addons/core/resources.pak', 'generated') + self.write('addons/core/profiles/runtime.json', 'generated') + self.assertEqual(self.run_audit(), []) + self.write('addons/core/Scripts/Game/resourceDatabase.rdb_fake.c', 'class New {}') + self.blocked('missing=1') + + def test_source_symlink_cannot_hide_from_manifest(self): + (self.root / 'addons/core/Scripts/Game/Alias.c').symlink_to(self.root / 'addons/core/Scripts/Game/Test.c') + self.blocked('source/resource symlink is not supported') + + def test_duplicate_json_keys_and_invalid_json_fail_closed(self): + for raw in ('{"cases":{},"cases":{}}', '{', '[]', '{"target":NaN}'): + self.write('docs/acceptance.json', raw) + self.assertTrue(gate.audit(self.root)) + + def test_symlinked_ledger_rejected(self): + self.json('docs/real-ledger.json', self.ledger) + (self.root / 'docs/acceptance.json').symlink_to(self.root / 'docs/real-ledger.json') + self.assertTrue(gate.audit(self.root)) + + def test_checker_is_read_only(self): + self.json('docs/acceptance.json', self.ledger) + before = {str(path.relative_to(self.root)): path.read_bytes() + for path in self.root.rglob('*') if path.is_file()} + self.assertEqual(gate.audit(self.root), []) + after = {str(path.relative_to(self.root)): path.read_bytes() + for path in self.root.rglob('*') if path.is_file()} + self.assertEqual(after, before) + + def test_archive_command_uses_shared_manifest_and_report(self): + tools = self.root / 'tools' + tools.mkdir() + for name in ('archive_native.py', 'native_report.py', 'source_manifest.py', 'native_provenance.py'): + shutil.copyfile(ROOT / 'tools' / name, tools / name) + session = self.root / 'synthetic-session' + session.mkdir() + (session / 'console.log').write_text((self.root / self.log).read_text()) + archive = self.root / Path(self.manifest).parent + for name in (MANIFEST, METADATA): + shutil.copyfile(archive / name, session / name) + shutil.copyfile(archive / 'runner.json.txt', session / 'runner.json') + subprocess.run([sys.executable, str(tools / 'archive_native.py'), str(session), 'new-archive'], + capture_output=True, text=True, check=True) + archive = self.root / 'docs/evidence/new-archive' + self.assertEqual(json.loads((archive / 'source-sha256.json').read_text()), addon_manifest(self.root)) + report = json.loads((archive / 'report.json').read_text()) + self.assertEqual(report, analyze((self.root / report['log']).read_text(), report['log'])) + + def test_native_report_command_compatibility(self): + result = subprocess.run([sys.executable, str(ROOT / 'tools/native_report.py'), str(self.root / self.log)], + capture_output=True, text=True, check=True) + self.assertEqual(json.loads(result.stdout), analyze((self.root / self.log).read_text(), self.root / self.log)) + + def test_archive_time_provenance_cannot_qualify_native_gates(self): + self.json('docs/evidence/current/' + PROVENANCE, {'schema_version': 1, 'kind': 'archive_time_only'}) + self.blocked('requires launch_snapshot provenance') + + def test_missing_launch_snapshot_is_not_current_evidence(self): + (self.root / 'docs/evidence/current' / METADATA).unlink() + self.blocked('launch_provenance') + + def test_modified_launch_bytes_and_runner_binding_rejected(self): + path = self.root / 'docs/evidence/current' / MANIFEST + path.write_bytes(path.read_bytes() + b'\n') + self.blocked('launch manifest byte hash') + self.refresh_native() + runner = self.root / 'docs/evidence/current/runner.json.txt' + data = json.loads(runner.read_text()) + data['launch_id'] = '00000000-0000-0000-0000-000000000000' + runner.write_text(json.dumps(data)) + self.blocked('runner launch binding') + + def test_snapshot_after_process_start_rejected(self): + runner = self.root / 'docs/evidence/current/runner.json.txt' + data = json.loads(runner.read_text()) + data['started_unix'] = 1 + runner.write_text(json.dumps(data)) + self.blocked('snapshot must precede process launch') + + def test_runner_failure_and_incomplete_repeated_rounds_cannot_qualify(self): + runner = self.root / 'docs/evidence/current/runner.json.txt' + data = json.loads(runner.read_text()) + data['result'] = 'process-exited' + runner.write_text(json.dumps(data)) + self.blocked('completed runner session') + data['result'] = 'smoke-completed' + data['rounds_required'] = 2 + runner.write_text(json.dumps(data)) + self.blocked('successful completion/assertions') + + def test_prelaunch_snapshot_remains_old_when_persisted_after_edit(self): + captured = snapshot(self.root, ['synthetic']) + self.write('addons/core/Scripts/Game/Test.c', 'class ChangedAfterLaunch {}') + session = self.root / 'synthetic-late-session' + session.mkdir() + persist(session, captured) + self.assertEqual((session / MANIFEST).read_bytes(), captured[0]) + (session / 'console.log').write_text('Synthetic old run') + self.json('synthetic-late-session/runner.json', {**bindings(captured), 'started_unix': json.loads(captured[1])['captured_unix'] + 1, 'stopped_unix': json.loads(captured[1])['captured_unix'] + 2, 'source_unchanged_after_run': True, 'end_source_sha256': hashlib.sha256(captured[0]).hexdigest(), 'console_sha256': hashlib.sha256((session / 'console.log').read_bytes()).hexdigest()}) + with self.assertRaisesRegex(ValueError, 'differ from pre-launch snapshot'): + archive_source(session, self.root) + + def test_legacy_archive_requires_opt_in_and_is_marked_historical(self): + session = self.root / 'synthetic-legacy' + session.mkdir() + with self.assertRaisesRegex(ValueError, 'no pre-launch source snapshot'): + archive_source(session, self.root) + manifest, provenance, launched = archive_source(session, self.root, allow_legacy=True) + self.assertFalse(launched) + self.assertEqual(provenance['kind'], 'archive_time_only') + self.assertEqual(provenance['qualification'], 'historical_only') + self.assertEqual(json.loads(manifest), addon_manifest(self.root)) + + def test_partial_launch_evidence_cannot_fall_back_to_legacy(self): + session = self.root / 'synthetic-partial' + session.mkdir() + (session / METADATA).write_text('{}') + with self.assertRaisesRegex(ValueError, 'missing or symlinked launch evidence'): + archive_source(session, self.root, allow_legacy=True) + + def test_source_manifest_copy_must_match_exact_launch_bytes(self): + path = self.root / self.manifest + path.write_bytes(path.read_bytes() + b'\n') + self.blocked('differs from exact launch snapshot bytes') + + def test_recomputed_report_cannot_relabel_a_different_old_raw_log(self): + self.write(self.log, 'ERR SMOKE PASS: different synthetic run\nERR SMOKE COMPLETE: other\n') + self.json(self.report, analyze((self.root / self.log).read_text(), self.log)) + self.blocked('raw native log differs from stopped runner log hash') + + def test_report_cannot_use_an_unsealed_neighbor_log(self): + other = 'docs/evidence/current/other.log.txt' + self.write(other, 'ERR SMOKE PASS: unrelated\nERR SMOKE COMPLETE: unrelated\n') + self.json(self.report, analyze((self.root / other).read_text(), other)) + self.blocked('exact console.log.txt sealed by the stopped runner') + + def test_stopped_source_change_blocks_even_if_current_files_match_launch(self): + runner = self.root / 'docs/evidence/current/runner.json.txt' + data = json.loads(runner.read_text()) + data['source_unchanged_after_run'] = False + data['end_source_sha256'] = '0' * 64 + runner.write_text(json.dumps(data)) + self.blocked('changed between launch and stopped-run snapshot') + + def test_seal_uses_stopped_sources_and_exact_log_bytes(self): + session = self.root / 'synthetic-seal' + session.mkdir() + captured = snapshot(self.root, ['synthetic']) + (session / 'console.log').write_bytes(b'exact synthetic log\r\n') + sealed = seal_run(self.root, session, captured) + self.assertTrue(sealed['source_unchanged_after_run']) + self.assertEqual(sealed['console_sha256'], hashlib.sha256(b'exact synthetic log\r\n').hexdigest()) + self.write('addons/core/Scripts/Game/Test.c', 'class ChangedDuringRun {}') + self.assertFalse(seal_run(self.root, session, captured)['source_unchanged_after_run']) + + def test_archive_cli_requires_explicit_legacy_import(self): + tools = self.root / 'tools' + tools.mkdir() + for name in ('archive_native.py', 'native_report.py', 'source_manifest.py', 'native_provenance.py'): + shutil.copyfile(ROOT / 'tools' / name, tools / name) + session = self.root / 'synthetic-legacy-command' + session.mkdir() + (session / 'console.log').write_text((self.root / self.log).read_text()) + command = [sys.executable, str(tools / 'archive_native.py'), str(session), 'legacy-archive'] + rejected = subprocess.run(command, capture_output=True, text=True) + self.assertEqual(rejected.returncode, 2) + self.assertFalse((self.root / 'docs/evidence/legacy-archive').exists()) + subprocess.run(command + ['--allow-legacy-archive-time-source'], capture_output=True, text=True, check=True) + provenance = json.loads((self.root / 'docs/evidence/legacy-archive' / PROVENANCE).read_text()) + self.assertEqual(provenance['kind'], 'archive_time_only') + with self.assertRaisesRegex(ValueError, 'requires launch_snapshot provenance'): + qualify_archive(self.root / 'docs/evidence/legacy-archive', addon_manifest(self.root)) + + +if __name__ == '__main__': + unittest.main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_settings_migration.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_settings_migration.py new file mode 100644 index 0000000..f7181c0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_settings_migration.py @@ -0,0 +1,31 @@ +from pathlib import Path +import importlib.util,json,tempfile +from policy_harness import ROOT,body,run +spec=importlib.util.spec_from_file_location('import_settings',ROOT/'tools/import_settings.py') +m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m) +result,deferred=m.merge({'configVersion':1,'reportIntervalSeconds':20.0,'supportSquadLimit':2,'responseRadiusMetres':1500,'convoyCount':3},{'aiIntelChancePercent':0,'intelRevealChancePercent':100}) +assert result==dict(reportIntervalSeconds=20,supportSquadLimit=2,responseRadiusMetres=1500,aiIntelChancePercent=0,intelRevealChancePercent=100,radioDefenceSeconds=180,startTimeMinutes=840,timeMultiplier=1,startDateCode=0,weatherProfile=0) +assert deferred==['ai:convoyCount'] +assert m.merge()[0]=={k:v[0] for k,v in m.SCHEMA.items()} +for key,(_,lo,hi) in m.SCHEMA.items(): + if key not in m.AI_KEYS and key not in m.INTEL_KEYS:continue + for invalid in (lo-1,hi+1,True,False,None,'10',lo+0.5,float('nan'),float('inf')): + try:m.merge(**({'ai':{key:invalid}} if key in m.AI_KEYS else {'intel':{key:invalid}})) + except ValueError:pass + else:raise AssertionError((key,invalid)) +with tempfile.TemporaryDirectory() as tmp: + dest=Path(tmp)/'rereintroduced.json' + m.write_new(dest,json.dumps(result));before=dest.read_bytes() + try:m.write_new(dest,'overwrite') + except FileExistsError:pass + else:raise AssertionError('Existing destination overwritten') + assert dest.read_bytes()==before + assert sorted(p.name for p in Path(tmp).iterdir())==['rereintroduced.json'] +# Test the actual runtime validator against the migration schema at each boundary. +validator=body(ROOT/'addons/core/Scripts/Game/ERR/ERR_Settings.c','static bool Valid(').replace('string key','std::string key') +checks=[] +for key,(_,lo,hi) in m.SCHEMA.items(): + for value,expected in [(lo-1,False),(lo,True),(hi,True),(hi+1,False)]: + checks.append(f'assert(Valid("{key}",{value})=={str(expected).lower()});') +run('#include \n#include \n'+validator+'\nint main(){'+''.join(checks)+'assert(!Valid("unknown",1));}\n') +print('PASS: legacy values preserved, unsupported fields reported, invalid data rejected, existing files protected, runtime bounds aligned') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_site_discovery_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_site_discovery_policy.py new file mode 100644 index 0000000..7f5b500 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_site_discovery_policy.py @@ -0,0 +1,25 @@ +"""Execute production discovery bounds; native LOS/identity remain runtime checks.""" +from policy_harness import ROOT, body, run + +source = ROOT / 'addons/core/Scripts/Game/ERR/ERR_SiteDiscoveryRules.c' +methods = '\n'.join(body(source, sig) for sig in ( + 'static float RadioRadiusLimit(', 'static bool ValidRadius(', 'static bool InRange(' +)).replace('ERR_LocationKind.', 'ERR_LocationKind::') +run('''#include +enum class ERR_LocationKind { PRISON, RADIO, EXTRACTION, OUTPOST, DEPOT }; +''' + methods.replace('int kind,', 'ERR_LocationKind kind,') + ''' +int main() { + using K=ERR_LocationKind; + assert(ValidRadius(K::RADIO,0) && ValidRadius(K::RADIO,8)); + assert(!ValidRadius(K::RADIO,8.01f) && !ValidRadius(K::RADIO,-1)); + assert(ValidRadius(K::DEPOT,60) && ValidRadius(K::OUTPOST,60)); + assert(!ValidRadius(K::DEPOT,60.01f)); + assert(ValidRadius(K::PRISON,0) && ValidRadius(K::EXTRACTION,0)); + assert(!ValidRadius(K::PRISON,1) && !ValidRadius(K::EXTRACTION,1)); + assert(!ValidRadius(static_cast(42),0)); + assert(InRange(8,8,8) && InRange(8,0,0)); + assert(!InRange(0,0,0) && !InRange(8,8.01f,0)); + assert(!InRange(8,0,8.01f) && !InRange(8,-1,0) && !InRange(8,0,-1)); +} +''') +print('PASS: authored radio/optional-site bounds and physical horizontal/vertical boundaries') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_time_policy.py b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_time_policy.py new file mode 100644 index 0000000..d539f38 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tests/test_time_policy.py @@ -0,0 +1,50 @@ +"""Run actual clock parsing/formatting and progression policy bodies as C++. +Native world authority, JSON serialization and progression need native probes. +""" +from policy_harness import ROOT, body, run +admin = ROOT/'addons/core/Scripts/Game/ERR/ERR_AdminService.c' +service = ROOT/'addons/core/Scripts/Game/ERR/ERR_TimeService.c' +settings = ROOT/'addons/core/Scripts/Game/ERR/ERR_Settings.c' + +def translate(source): + return (source.replace('string ', 'std::string ').replace('out int ', 'int& ') + .replace('text.Length()', 'int(text.size())').replace('.IsEmpty()', '.empty()') + .replace('.Substring(', '.substr(') + .replace('"0123456789".IndexOf(', 'std::string("0123456789").find(') + .replace(' < 0) return false;', ' == std::string::npos) return false;') + .replace('text.ToInt()', 'std::stoi(text)') + .replace('hours.ToString()', 'std::to_string(hours)') + .replace('remainder.ToString()', 'std::to_string(remainder)') + .replace('ERR_CommandArguments.Integer', 'Integer') + .replace('ERR_Settings.Valid', 'Valid')) + +functions = '\n'.join(translate(body(path, signature)) for path, signature in ( + (settings, 'static bool Valid('), + (settings, 'static int AddedDefault('), + (admin, 'static bool Integer('), + (service, 'static bool ParseClock('), + (service, 'static string Clock('), + (service, 'static float DayDuration('), +)) +run('#include \n#include \n#include \n' + functions + r''' +int main() { + for (int minute=0; minute<1440; ++minute) { + int parsed=-1; + assert(ParseClock(Clock(minute),parsed)); + assert(parsed==minute); + } + assert(Clock(0)=="00:00" && Clock(1439)=="23:59" && Clock(375)=="06:15"); + assert(Clock(-1)=="unavailable" && Clock(1440)=="unavailable"); + for (std::string input : {"", "0:00", "00:0", "24:00", "12:60", "-1:00", "1a:00", "00:0b", "06:15junk", " 06:15", "06:15 ", "06.15"}) { + int parsed=-1; assert(!ParseClock(input,parsed)); + } + assert(AddedDefault("startTimeMinutes")==840); + assert(AddedDefault("timeMultiplier")==1); + assert(AddedDefault("radioDefenceSeconds")==-1); + assert(AddedDefault("unknown")==-1); + for (int multiplier=1; multiplier<=24; ++multiplier) + assert(std::abs(DayDuration(multiplier)*multiplier-86400.0)<0.01); + assert(DayDuration(0)==-1 && DayDuration(25)==-1 && DayDuration(-1)==-1); +} +''') +print('PASS: every minute round-trips, malformed clocks rejected, defaults limited to added keys, progression bounds and day duration aligned') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/archive_native.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/archive_native.py new file mode 100644 index 0000000..090dc36 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/archive_native.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +"""Archive an isolated native run and its verified launch-time addon snapshot; never overwrite evidence. +Run only after stopping the test and before editing/copying its source tree again. +""" +from pathlib import Path +import argparse,json,shutil,subprocess,sys +from native_provenance import archive_source, encoded, MANIFEST, METADATA, PROVENANCE +ROOT=Path(__file__).resolve().parents[1] +p=argparse.ArgumentParser(description=__doc__) +p.add_argument('session',type=Path) +p.add_argument('name',help='New evidence directory name, e.g. native-2026-09-19-003231') +p.add_argument('--allow-legacy-archive-time-source', action='store_true', help='Explicit historical-only import for sessions without a pre-launch snapshot') +a=p.parse_args() +if Path(a.name).name!=a.name or a.name in {'.','..'}:p.error('Name must be one directory component') +source=a.session.resolve() +if not (source/'console.log').is_file():p.error('Session has no console.log') +try: + manifest_bytes, provenance, launched = archive_source(source, ROOT, a.allow_legacy_archive_time_source) +except (OSError, ValueError) as error: + p.error(str(error)) +dest=ROOT/'docs/evidence'/a.name +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')): + if capture.is_file():shutil.copyfile(capture,dest/capture.name) +(dest/'source-sha256.json').write_bytes(manifest_bytes) +(dest/PROVENANCE).write_bytes(encoded(provenance)) +if launched: + for name in (MANIFEST, METADATA): shutil.copyfile(source/name, dest/name) +if (source/'game-startup-report.json').is_file(): + # Recompute from the sealed console rather than trusting the saved summary. + # Ordinary startup has no scripted completion and cannot qualify as an escape. + from headless_game import game_evidence + runner=json.loads((source/'runner.json').read_text()) + report=game_evidence((dest/'console.log.txt').read_text(errors='replace'),runner.get('project')) + report['log']=str((dest/'console.log.txt').relative_to(ROOT)) + (dest/'report.json').write_bytes(encoded(report)) + status=0 if report['ready'] and runner.get('result')=='game-started' and runner.get('cleanup_confirmed') is True else 1 +else: + with (dest/'report.json').open('w') as report: + result=subprocess.run([sys.executable,str(ROOT/'tools/native_report.py'),str((dest/'console.log.txt').relative_to(ROOT))],cwd=ROOT,stdout=report) + status=result.returncode +print(f'Archived {dest.relative_to(ROOT)}; native report exit={status} (nonzero retains failures)') +sys.exit(status) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/check.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/check.py new file mode 100644 index 0000000..7efce84 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/check.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""Validate addon/resource isolation and execute policy regressions. Not an engine compiler.""" +from pathlib import Path +import json,re,subprocess,sys +ROOT=Path(__file__).resolve().parents[1] +BASE='58D0FB3206B6F859' +def check(): + ids={};graph={};resources={};paths={};owners={} + for p in sorted((ROOT/'addons').glob('*/addon.gproj')): + text=p.read_text();g=re.search(r'GUID "([A-F0-9]{16})"',text)[1] + assert g not in ids,f'Duplicate addon GUID: {p}' + ids[g]=p.parent.name;graph[g]=re.findall(r'"([A-F0-9]{16})"',text[text.index('Dependencies'):]) + assert len(ids)==5,'Expected five addon projects' + def walk(g,stack): + assert g not in stack,'Dependency cycle: '+str(stack+[g]) + for dep in graph[g]: + assert dep==BASE or dep in ids,f'External addon dependency {dep}' + if dep!=BASE:walk(dep,stack+[g]) + for g in ids:walk(g,[]) + for p in (ROOT/'addons').rglob('*.meta'): + m=re.search(r'Name "\{([A-F0-9]{16})\}([^"\n]+)"',p.read_text()) + assert m,f'Malformed metadata: {p}' + g,path=m.groups();assert g not in resources,f'Duplicate resource GUID {g}' + addon=p.relative_to(ROOT/'addons').parts[0] + assert p.with_suffix('')==ROOT/'addons'/addon/path, f'Resource path mismatch: {p}' + assert p.with_suffix('').is_file(),f'Missing resource for {p}' + resources[g]=path;paths[path]=g + owners[g]=addon + def visible(g): + result={ids[g]} + for dep in graph[g]: + if dep!=BASE:result.update(visible(dep)) + return result + visibility={ids[g]:visible(g) for g in ids} + vanilla=json.loads((ROOT/'docs/vanilla-resources.json').read_text()) + for p in (ROOT/'addons').rglob('*'): + if not p.is_file() or p.suffix not in ['.c','.et','.conf','.ent','.layer','.layout','.emat']:continue + s=p.read_text() + assert not re.search(r'\b(?:ESCT\w*|SCRTC_\w+|SCRT_\w+|EAI_\w+)\b',s),f'Original ecosystem dependency: {p}' + for g,path in re.findall(r'\{([A-F0-9]{16})\}([^"\n]+)',s): + assert resources.get(g)==path or vanilla.get(path)==g,f'Unresolved/mismatched resource in {p}: {g} {path}' + if g in owners: + addon=p.relative_to(ROOT/'addons').parts[0] + assert owners[g] in visibility[addon],f'Resource outside declared dependency graph in {p}: {g} {path}' + if p.suffix in ['.et','.conf','.ent','.layout','.emat']: + assert p.with_name(p.name+'.meta').exists(),f'Missing metadata: {p}' + inventory=json.loads((ROOT/'docs/original-resource-inventory.json').read_text()) + coverage=json.loads((ROOT/'docs/original-feature-coverage.json').read_text()) + mapped=[];feature_ids=set() + for feature in coverage['features']: + assert feature['id'] not in feature_ids,'Duplicate feature responsibility' + feature_ids.add(feature['id']) + assert feature['status'] in {'pending','partial'},'Completion requires a separately reviewed acceptance update' + assert feature['remaining'],'Unfinished responsibilities must describe remaining work' + mapped.extend(feature['original_scripts']) + for path in feature['replacement_files']: + assert (ROOT/path).is_file(),f'Missing replacement reference: {path}' + assert len(mapped)==len(set(mapped)), 'Original scripts assigned more than once' + 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_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_site_discovery_policy.py','test_faction_catalog_scope.py','test_mission_rules.py','test_admin_setting_policy.py', 'test_player_admission_policy.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/docs/evidence/dedicated-2026-09-19-083213/source/tools/compare_performance.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/compare_performance.py new file mode 100644 index 0000000..4f98290 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/compare_performance.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python3 +"""Compare declared equivalent frame/tick recordings; never grants acceptance.""" +import argparse +import csv +import hashlib +import json +import math +from pathlib import Path +import statistics + +COLUMNS = ['frame_index', 'elapsed_ms', 'frame_time_ms', 'players', 'ai', 'vehicles', 'entities', 'ai_simulation_ms'] +POPULATION = ['players', 'ai', 'vehicles', 'entities'] + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def keys(value, expected, label): + require(isinstance(value, dict) and set(value) == set(expected), f'{label}: expected fields {expected}') + + +def number(value, label, minimum=0): + require(type(value) in (float, int) and math.isfinite(value) and value >= minimum, f'{label}: invalid number') + return value + + +def text(value, label): + require(isinstance(value, str) and bool(value.strip()), f'{label}: required nonempty string') + + +def integer(value, label, minimum=0): + require(type(value) is int and value >= minimum, f'{label}: invalid integer') + + +def finite_json(value): + if isinstance(value, float): + require(math.isfinite(value), 'Non-finite JSON number') + elif isinstance(value, dict): + for item in value.values(): + finite_json(item) + elif isinstance(value, list): + for item in value: + finite_json(item) + + +def percentile(values, fraction): + """Nearest rank, not interpolation; slow-tail frame times use upper ranks.""" + return sorted(values)[max(0, math.ceil(len(values) * fraction) - 1)] + + +def metrics(frames, ai_load): + fps = [1000 / value for value in frames] + result = { + 'median_frame_ms': statistics.median(frames), + 'p95_frame_ms': percentile(frames, .95), + 'p99_frame_ms': percentile(frames, .99), + 'median_fps': statistics.median(fps), + 'p05_fps': percentile(fps, .05), + 'p01_fps': percentile(fps, .01), + 'throughput_fps': 1000 * len(frames) / sum(frames), + 'median_ai_simulation_ms': statistics.median(ai_load), + 'p95_ai_simulation_ms': percentile(ai_load, .95), + } + finite_json(result) + return result + + +def load_samples(path, run): + workload = run['workload'] + warmup = workload['warmup_seconds'] * 1000 + end = warmup + workload['duration_seconds'] * 1000 + frames, ai_load = [], [] + boundary_frames = [] + previous = 0.0 + total_frame_ms = 0.0 + row_count = 0 + with path.open(newline='', encoding='utf-8') as stream: + reader = csv.DictReader(stream) + require(reader.fieldnames == COLUMNS, f'{path}: expected exact CSV header {COLUMNS}') + for index, row in enumerate(reader, 1): + label = f'{path}: row {index + 1}' + require(set(row) == set(COLUMNS) and all(v is not None for v in row.values()), f'{label}: incomplete/extra columns') + try: + frame_index = int(row['frame_index']) + elapsed = float(row['elapsed_ms']) + frame = float(row['frame_time_ms']) + ai_ms = float(row['ai_simulation_ms']) + population = {key: int(row[key]) for key in POPULATION} + except (ValueError, TypeError) as error: + raise ValueError(f'{label}: invalid numeric sample') from error + require(frame_index == index, f'{label}: missing/duplicate/out-of-order frame index') + require(all(math.isfinite(v) for v in (elapsed, frame, ai_ms)) and frame >= .001 and elapsed > previous and ai_ms >= 0, f'{label}: invalid frame/time/load') + require(abs((elapsed - previous) - frame) <= .1, f'{label}: elapsed delta differs from frame time by over 0.1 ms') + total_frame_ms += frame + require(abs(total_frame_ms - elapsed) <= .1, f'{label}: cumulative elapsed time differs from recorded frames') + require(previous < end, f'{label}: samples continue beyond the declared capture window') + for key in POPULATION: + require(population[key] == workload[key], f'{label}: {key} workload changed') + if previous >= warmup and elapsed <= end: + frames.append(frame) + ai_load.append(ai_ms) + else: + overlap = max(0, min(elapsed, end) - max(previous, warmup)) + if overlap > 0: + boundary_frames.append({'frame_index': frame_index, + 'frame_time_ms': frame, + 'measurement_overlap_ms': overlap}) + previous = elapsed + row_count += 1 + require(previous >= end, f'{path}: incomplete recording; warmup plus measurement duration not covered') + measured_ms = sum(frames) + coverage = measured_ms / (workload['duration_seconds'] * 1000) + require(coverage >= .99, f'{path}: only {coverage:.3%} of declared measurement duration has complete frames; boundary stalls/intervals exclude over 1%') + require(len(frames) >= 120, f'{path}: need at least 120 complete measurement frames/ticks') + return {'samples_total': row_count, 'samples_measured': len(frames), + 'measured_frame_seconds': measured_ms / 1000, + 'measurement_coverage_fraction': coverage, + 'boundary_frames_excluded': boundary_frames, + 'csv_sha256': hashlib.sha256(path.read_bytes()).hexdigest(), 'metrics': metrics(frames, ai_load)} + + +def validate_run(run): + keys(run, ['variant', 'repeat_id', 'artifact_id', 'addon_ids', 'engine_version', 'hardware', 'workload', 'capture', 'sample_file'], 'run') + require(run['variant'] in ('baseline', 'successor'), 'run: variant must be baseline or successor') + for key in ['repeat_id', 'artifact_id', 'engine_version', 'sample_file']: + text(run[key], key) + require(isinstance(run['addon_ids'], list) and bool(run['addon_ids']), 'addon_ids: nonempty list required') + for addon in run['addon_ids']: + text(addon, 'addon id') + require(len(set(run['addon_ids'])) == len(run['addon_ids']), 'addon_ids: duplicates') + keys(run['hardware'], ['cpu', 'gpu', 'ram_gib', 'os', 'driver'], 'hardware') + for key in ['cpu', 'gpu', 'os', 'driver']: + text(run['hardware'][key], f'hardware.{key}') + number(run['hardware']['ram_gib'], 'hardware.ram_gib', 1) + workload = run['workload'] + keys(workload, ['map', 'route', *POPULATION, 'settings', 'warmup_seconds', 'duration_seconds'], 'workload') + text(workload['map'], 'workload.map') + text(workload['route'], 'workload.route') + for key in POPULATION: + integer(workload[key], f'workload.{key}', 1 if key == 'players' else 0) + require(workload['entities'] >= workload['players'] + workload['ai'] + workload['vehicles'], 'workload.entities: smaller than declared actors/vehicles') + require(isinstance(workload['settings'], dict) and bool(workload['settings']), 'workload.settings: nonempty object required') + number(workload['warmup_seconds'], 'workload.warmup_seconds', 30) + number(workload['duration_seconds'], 'workload.duration_seconds', 60) + keys(run['capture'], ['kind', 'environment', 'tool', 'version'], 'capture') + require(run['capture']['kind'] in ('client_frame', 'server_tick'), 'capture.kind: expected client_frame or server_tick') + require(run['capture']['environment'] in ('client', 'dedicated_server', 'workbench_headless'), 'capture.environment: unsupported environment') + require(run['capture']['kind'] != 'client_frame' or run['capture']['environment'] != 'dedicated_server', 'dedicated server cannot supply client frames') + for key in ['tool', 'version']: + text(run['capture'][key], f'capture.{key}') + + +def reject_constant(value): + raise ValueError(f'Non-finite JSON value: {value}') + + +def unique_object(pairs): + result = {} + for key, value in pairs: + require(key not in result, f'Duplicate JSON field: {key}') + result[key] = value + return result + + +def compare(manifest_path): + manifest_path = Path(manifest_path) + raw = manifest_path.read_bytes() + data = json.loads(raw, parse_constant=reject_constant, object_pairs_hook=unique_object) + finite_json(data) + keys(data, ['schema_version', 'sample_origin', 'runs'], 'manifest') + require(type(data['schema_version']) is int and data['schema_version'] == 1, 'schema_version: expected 1') + require(data['sample_origin'] in ('synthetic', 'measured'), 'sample_origin: expected synthetic or measured') + require(isinstance(data['runs'], list) and len(data['runs']) >= 6, 'At least three paired baseline/successor repeats required') + paired, paths, reference = {}, set(), None + outputs = [] + artifacts = {} + for run in data['runs']: + validate_run(run) + comparable = {key: run[key] for key in ['hardware', 'workload', 'capture', 'engine_version']} + if reference is None: + reference = comparable + require(comparable == reference, f"{run['repeat_id']}/{run['variant']}: mismatched hardware, workload, capture settings or engine version") + artifact = (run['artifact_id'], sorted(run['addon_ids'])) + require(run['variant'] not in artifacts or artifacts[run['variant']] == artifact, 'Artifact/addon set changed between repeats of one variant') + artifacts[run['variant']] = artifact + pair = paired.setdefault(run['repeat_id'], {}) + require(run['variant'] not in pair, f"Duplicate repeat/variant: {run['repeat_id']}/{run['variant']}") + path = (manifest_path.parent / run['sample_file']).resolve() + require(path not in paths, f'{path}: sample file reused for different runs') + paths.add(path) + result = {'variant': run['variant'], 'repeat_id': run['repeat_id'], 'artifact_id': run['artifact_id'], 'addon_ids': run['addon_ids'], 'sample_file': run['sample_file'], **load_samples(path, run)} + pair[run['variant']] = result + outputs.append(result) + require(len(paired) >= 3 and all(set(pair) == {'baseline', 'successor'} for pair in paired.values()), 'Every repeat needs exactly one baseline and one successor recording') + metric_names = outputs[0]['metrics'] + aggregate = {variant: {key: statistics.median([item['metrics'][key] for item in outputs if item['variant'] == variant]) for key in metric_names} for variant in ['baseline', 'successor']} + deltas = [] + for repeat_id, pair in sorted(paired.items()): + baseline, successor = pair['baseline']['metrics'], pair['successor']['metrics'] + deltas.append({'repeat_id': repeat_id, + 'median_frame_reduction_percent': 100 * (baseline['median_frame_ms'] - successor['median_frame_ms']) / baseline['median_frame_ms'], + 'p99_frame_reduction_percent': 100 * (baseline['p99_frame_ms'] - successor['p99_frame_ms']) / baseline['p99_frame_ms'], + 'throughput_fps_increase_percent': 100 * (successor['throughput_fps'] - baseline['throughput_fps']) / baseline['throughput_fps']}) + return {'schema_version': 1, 'sample_origin': data['sample_origin'], 'acceptance': 'not_evaluated', + 'scope': 'Offline arithmetic on caller-supplied recordings and metadata; no authenticity, multiplayer, statistical-significance or release claim. Synthetic samples are not performance evidence. Headless Workbench is not equivalent to ordinary clients.', + 'manifest_sha256': hashlib.sha256(raw).hexdigest(), 'matched_conditions': reference, + 'percentile_method': 'nearest_rank', 'aggregate_method': 'median of per-run metrics; repeats equally weighted', + 'runs': sorted(outputs, key=lambda item: (item['repeat_id'], item['variant'])), + 'aggregate': aggregate, 'paired_deltas': deltas, + 'median_paired_deltas': {key: statistics.median([delta[key] for delta in deltas]) for key in deltas[0] if key != 'repeat_id'}} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('manifest', type=Path) + arguments = parser.parse_args() + try: + report = compare(arguments.manifest) + except (ValueError, OSError, csv.Error) as error: + parser.exit(2, f'Performance comparison rejected: {error}\n') + print(json.dumps(report, indent=2, allow_nan=False)) + + +if __name__ == '__main__': + main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/desktop/kwin-right-monitor.js b/docs/evidence/dedicated-2026-09-19-083213/source/tools/desktop/kwin-right-monitor.js new file mode 100644 index 0000000..870e52b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/desktop/kwin-right-monitor.js @@ -0,0 +1,40 @@ +// Session-local placement for Enfusion/Reforger test windows only. +var targetName = "HDMI-A-1"; +var placing = false; +function isTestWindow(w) { + var app = String(w.resourceClass).toLowerCase(); + return app === "steam_app_1874910" || app.indexOf("armareforger") >= 0 || String(w.caption).indexOf("Enfusion Workbench") >= 0; +} +function place(w) { + if (placing || !isTestWindow(w)) return; + placing = true; + var outputs = workspace.screens; + for (var i = 0; i < outputs.length; i++) { + if (outputs[i].name !== targetName) continue; + w.fullScreen = false; + w.setMaximize(false, false); + workspace.sendClientToScreen(w, outputs[i]); + var a = outputs[i].geometry; + var g = w.frameGeometry; + w.frameGeometry = {x: a.x + 20, y: a.y + 30, + width: Math.min(g.width, a.width - 40), height: Math.min(g.height, a.height - 60)}; + print("ERRI_DISPLAY " + w.resourceClass + " -> " + w.output.name + " " + w.frameGeometry.x); + placing = false; + return; + } + w.minimized = true; + placing = false; + print("ERRI_DISPLAY target unavailable; test window minimized"); +} +workspace.windowAdded.connect(function(w) { + place(w); + w.captionChanged.connect(function() { place(w); }); + w.frameGeometryChanged.connect(function() { place(w); }); + w.fullScreenChanged.connect(function() { place(w); }); +}); +var windows = workspace.windowList(); +// Existing user editors are deliberately left untouched. +for (var i = 0; i < windows.length; i++) { + if (String(windows[i].caption).indexOf("Rereintroduced") >= 0) place(windows[i]); +} +print("ERRI_DISPLAY guard active for " + targetName); diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_game.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_game.py new file mode 100644 index 0000000..627b5c0 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_game.py @@ -0,0 +1,394 @@ +#!/usr/bin/env python3 +"""Bounded ordinary-game startup check on a private hidden and muted display. +No Workbench plugin, scripted smoke fixture, Steam profile, or existing process is used. +""" +import argparse +import fcntl +import json +import os +from pathlib import Path +import re +import shutil +import signal +import subprocess +import time +import uuid +from native_provenance import snapshot, persist, bindings, seal_run +from native_report import analyze + +ROOT = Path(__file__).resolve().parents[1] +PROFILE_MARKER = '.erri-game-profile.json' +PROFILE_ID = {'kind': 'erri-ordinary-game-disposable-profile', 'version': 1} +GAME = re.compile(r'^armareforgersteam(?:diag)?(?:\.exe)?$', re.I) + + +def refuse(message): + raise ValueError(message) + + +def assert_no_game(proc_root=Path('/proc')): + """Read-only and fail closed; also recognizes Wine's truncated comm name.""" + for proc in proc_root.iterdir(): + if not proc.name.isdigit(): + continue + try: + args = (proc/'cmdline').read_bytes().split(b'\0') + comm = (proc/'comm').read_text().strip() + except (FileNotFoundError, ProcessLookupError): + continue # process exited during enumeration + except OSError as error: + refuse(f'Cannot exclude an existing game process {proc.name}: {error}') + names = [re.split(r'[\\/]', arg.decode(errors='replace'))[-1] for arg in args] + if any(GAME.fullmatch(name) for name in names) or comm.lower().startswith('armareforgerste'): + refuse(f'An Arma Reforger game process already exists (PID {proc.name}); leave it untouched') + + + +def prefix_process_candidate(proc): + """Classify readable process metadata before accessing protected environ. + + Linux services such as systemd can be non-dumpable even to their UID. Their + environment is irrelevant. Windows/Wine/runtime candidates still fail closed. + """ + args = [value.decode(errors='replace') for value in (proc/'cmdline').read_bytes().split(b'\0') if value] + comm = (proc/'comm').read_text().strip() + try: + executable = os.readlink(proc/'exe') + except (FileNotFoundError, PermissionError): + executable = '' + values = args + [comm, executable] + for value in values: + name = re.split(r'[\\/]', value)[-1].lower() + if (name.endswith('.exe') or name.startswith(('wine', 'proton', 'gamescope')) + or name in {'reaper', 'pressure-vessel-wrap', 'pv-bwrap'} + or name.startswith('armareforger')): + return True + # systemd's PAM child overwrites both names, and its non-dumpable exe is + # inaccessible. This exact native helper is positively identified by both. + if comm == '(sd-pam)' and args == ['(sd-pam)']: + return False + # Observed host Apache workers are also non-dumpable; accept only their + # exact native foreground-service signature, after all runtime checks. + if comm == 'apache2' and args == ['apache2', '-DFOREGROUND']: + return False + # A readable native executable is conclusive; otherwise require an absolute + # Linux argv[0] corroborated by the kernel's (possibly truncated) comm name. + if executable.startswith('/'): + return False + if args and args[0].startswith('/'): + basename = Path(args[0]).name + if comm and (comm == basename or comm == basename[:15]): + return False + argv0 = args[0] if args else '' + refuse(f'Cannot classify possible Wine/runtime process {proc.name} (comm={comm!r}, argv0={argv0!r})') + + +def assert_prefix_idle(compat, proc_root=Path('/proc')): + target = ('WINEPREFIX='+str(compat/'pfx')).encode() + failures = [] + for proc in proc_root.iterdir(): + if not proc.name.isdigit() or int(proc.name) == os.getpid(): + continue + try: + if proc.stat().st_uid != os.getuid(): + continue + if not prefix_process_candidate(proc): + continue + environment = (proc/'environ').read_bytes().split(b'\0') + except (FileNotFoundError, ProcessLookupError): + continue + except (OSError, ValueError) as error: + failures.append(f'Cannot verify disposable prefix is idle (PID {proc.name}): {error}') + continue + if target in environment: + failures.append(f'Disposable prefix already has a process (PID {proc.name}); leave it untouched') + if failures: + refuse('\n'.join(failures)) + + +def validate_paths(root, steam, compat, profile): + if compat.is_relative_to(steam) or not (compat/'pfx/system.reg').is_file(): + refuse('--compat must be an existing disposable cloned prefix outside Steam') + if any(profile.is_relative_to(path) or path.is_relative_to(profile) for path in (root, steam, compat)): + refuse('--profile must be separate from source, Steam and disposable prefix trees') + if profile.exists(): + marker = profile/PROFILE_MARKER + if marker.is_symlink() or not marker.is_file() or json.loads(marker.read_text()) != PROFILE_ID: + refuse('Existing profile is not marked as this runner\'s disposable game profile') + for path in profile.rglob('*'): + if path.is_symlink() and path != profile/'addons/ArmaReforger': + refuse(f'Unexpected profile symlink: {path}') + + +def command_for(root, steam, compat, profile, project): + project_text = (root/'addons'/project/'addon.gproj').read_text() + guid = re.search(r'\bGUID "([A-F0-9]{16})"', project_text)[1] + return ['gamescope', '--backend', 'headless', '-W', '1280', '-H', '720', + '-w', '1280', '-h', '720', '-r', '30', '--', + str(steam/'steamapps/common/Proton - Experimental/proton'), 'run', + str(steam/'steamapps/common/Arma Reforger/ArmaReforgerSteam.exe'), + '-addonsDir', 'Z:'+str(root/'addons'), '-addons', guid, + '-profile', 'Z:'+str(profile), '-errOrdinaryScenario', project, + '-noBackend', '-noSound', '-noSplash', '-noThrow', '-disableCrashReporter', '-logconsole'] + + +def game_evidence(content, project=None): + report = analyze(content, 'console.log') + defines = re.findall(r'Module: Game;[^\n]*defines:\s*"([^"]*)"', content) + non_workbench = bool(defines) and all(not {'WORKBENCH', 'ENF_WB'}.intersection(value.split(',')) for value in defines) + headers = re.findall(r'ERR ORDINARY: header verified project=(core|chat) systems=MissionSystems', content) + header_verified = bool(headers) and (project is None or project in headers) + participants = re.findall(r'ERR ORDINARY: local participant verified project=(core|chat) phase=prison', content) + participant_verified = bool(participants) and (project is None or project in participants) + ready = header_verified and participant_verified and 'Rereintroduced [mission]: phase 0 -> 1' in content + unexpected_fixture = 'ERR SMOKE ' in content + failed = (bool(report['engine_errors'] or report['script_or_runtime_failures']) + or 'Rereintroduced: scenario preparation failed' in content + or 'Can\'t compile "Game"' in content or unexpected_fixture + or any({'WORKBENCH', 'ENF_WB'}.intersection(value.split(',')) for value in defines)) + return {**report, 'local_participant_verified': participant_verified, 'scenario_header_verified': header_verified, 'verified_header_projects': headers, 'game_module_defines': defines, 'workbench_undefined': non_workbench, + 'normal_mission_ready': ready, 'unexpected_smoke_fixture': unexpected_fixture, + 'failed': failed, 'ready': non_workbench and ready and not failed, + 'scope': 'ordinary local game startup only; no player input, full escape, multiplayer or FPS proof'} + + +def cleanup(child, proton, env): + # Caller owns the prefix lock and verified no pre-existing prefix processes. + try: + subprocess.run([str(proton.parent/'files/bin/wineserver'), '-k'], env=env, + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, timeout=10) + except (OSError, subprocess.TimeoutExpired): + pass + try: + os.killpg(child.pid, signal.SIGTERM) + except ProcessLookupError: + pass + try: + child.wait(timeout=10) + except subprocess.TimeoutExpired: + pass + finally: + try: + os.killpg(child.pid, signal.SIGKILL) + except ProcessLookupError: + pass + child.wait(timeout=10) + + +class StartupMonitor: + """Latch failures while allowing a bounded diagnostic drain; no native I/O.""" + def __init__(self, started, timeout, settle, failure_grace=0): + if not 0 <= failure_grace <= 30: + refuse('Use failure-grace 0..30 seconds') + self.started = started + self.deadline = started + timeout + self.settle = settle + self.failure_grace = failure_grace + self.first_failure_at = None + self.ready_at = None + + def observe(self, evidence, now, process_exited=False): + if evidence.get('failed') and self.first_failure_at is None: + self.first_failure_at = now + if self.first_failure_at is not None: + # Repeated errors and subsequent readiness cannot renew this lease. + cutoff = min(self.deadline, self.first_failure_at + self.failure_grace) + if process_exited or now >= cutoff: + return 'game-failed' + return None + if now >= self.deadline: + return 'timeout' + if process_exited: + return 'process-exited' + if evidence.get('ready'): + if self.ready_at is None: + self.ready_at = now + if now - self.ready_at >= self.settle: + return 'game-started' + else: + self.ready_at = None + return None + + def timeout_result(self): + return 'game-failed' if self.first_failure_at is not None else 'timeout' + + def annotate(self, final): + # Keep raw final error counts intact, but never lose an earlier failure + # if the process truncated/replaced the log during the grace interval. + final['failure_observed_during_polling'] = self.first_failure_at is not None + if self.first_failure_at is not None: + final['failed'] = True + final['ready'] = False + return final + + +def run(a): + steam, compat, profile = a.steam.resolve(), a.compat.resolve(), a.profile.resolve() + if not 60 <= a.timeout <= 1800 or not 5 <= a.settle <= 120: + refuse('Use timeout 60..1800 seconds and settle 5..120 seconds') + if not 0 <= a.failure_grace <= 30: + refuse('Use failure-grace 0..30 seconds') + assert_no_game() + validate_paths(ROOT, steam, compat, profile) + # Use the SAME prefix lock as headless_workbench.py: never run them together. + with (compat/'.erri-workbench.lock').open('a') as prefix_lock: + try: + fcntl.flock(prefix_lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + refuse('Another test runner owns this disposable prefix') + assert_prefix_idle(compat) + return run_locked(a, steam, compat, profile) + + +def run_locked(a, steam, compat, profile): + command = command_for(ROOT, steam, compat, profile, a.project) + separator = command.index("--") + proton, executable = Path(command[separator+1]), Path(command[separator+3]) + if not proton.is_file() or not executable.is_file(): + refuse('Installed ordinary ArmaReforgerSteam.exe and Proton Experimental are required') + if not shutil.which('gamescope') or not shutil.which('pactl'): + refuse('gamescope and pactl are required') + # Refuse launcher/profile reuse; repeat immediately before any launch setup. + assert_no_game() + profile.mkdir(parents=True, exist_ok=True) + marker = profile/PROFILE_MARKER + if not marker.exists(): + marker.write_text(json.dumps(PROFILE_ID)+'\n') + addons = profile/'addons' + addons.mkdir(exist_ok=True) + vanilla = steam/'steamapps/common/Arma Reforger/addons/data' + link = addons/'ArmaReforger' + if not link.exists() and not link.is_symlink(): + link.symlink_to(vanilla, target_is_directory=True) + if link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')): + refuse('Private profile addons must contain only the installed vanilla link') + run_id = uuid.uuid4().hex + silent_sink = 'erri_game_'+run_id + application_id = 'org.escapistsrereintroduced.game.'+run_id + env = os.environ.copy() + env.update(STEAM_COMPAT_DATA_PATH=str(compat), STEAM_COMPAT_CLIENT_INSTALL_PATH=str(steam), + WINEPREFIX=str(compat/'pfx'), PULSE_SINK=silent_sink, + PULSE_PROP='application.id='+application_id) + sink_module = None + child = None + session = None + captured = snapshot(ROOT, command) + started = time.time() + monitor = StartupMonitor(time.monotonic(), a.timeout, a.settle, a.failure_grace) + result = 'timeout' + runner_error = None + cleanup_ok = True + log_root = profile/'logs' + previous = set(log_root.glob('logs_*')) + launch_log = profile/('game-launch-'+run_id+'.log') + try: + sink_module = subprocess.check_output(['pactl', 'load-module', 'module-null-sink', + 'sink_name='+silent_sink], text=True).strip() + subprocess.run(['pactl', 'set-sink-mute', silent_sink, '1'], check=True) + subprocess.run(['pactl', 'set-sink-volume', silent_sink, '0%'], check=True) + assert_no_game() + with launch_log.open('x') as output: + child = subprocess.Popen(command, cwd=executable.parent, env=env, stdout=output, + stderr=subprocess.STDOUT, start_new_session=True) + while time.monotonic() < monitor.deadline: + # -noSound prevents game audio; this catches a Proton startup stream + # or a saved explicit Wine device. Only our fresh application ID. + streams = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'sink-inputs'], text=True)) + for stream in streams: + if stream.get('properties', {}).get('application.id') != application_id: + continue + index = str(stream['index']) + subprocess.run(['pactl', 'move-sink-input', index, silent_sink], check=True) + subprocess.run(['pactl', 'set-sink-input-mute', index, '1'], check=True) + candidates = [x for x in log_root.glob('logs_*') if x not in previous] + if len(candidates) > 1: + result = 'unexpected-multiple-sessions'; break + evidence = {} + if candidates: + if session is None: + session = candidates[0] + persist(session, captured) + console = session/'console.log' + content = console.read_text(errors='replace') if console.is_file() else '' + evidence = game_evidence(content, a.project) + outcome = monitor.observe(evidence, time.monotonic(), child.poll() is not None) + if outcome is not None: + result = outcome; break + # Grace never extends the original absolute run deadline. + cutoff = monitor.deadline + if monitor.first_failure_at is not None: + cutoff = min(cutoff, monitor.first_failure_at + a.failure_grace) + time.sleep(max(0, min(1, cutoff - time.monotonic()))) + else: + result = monitor.timeout_result() + except KeyboardInterrupt: + result = 'interrupted' + except (OSError, ValueError, subprocess.SubprocessError) as error: + result = 'runner-failed' + runner_error = str(error) + finally: + if child is not None: + try: + cleanup(child, proton, env) + assert_prefix_idle(compat) + except (OSError, ValueError, subprocess.SubprocessError) as error: + cleanup_ok = False + result = 'cleanup-failed' + runner_error = str(error) + if sink_module is not None: + try: + subprocess.run(['pactl', 'unload-module', sink_module], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, timeout=5) + except (OSError, subprocess.SubprocessError): + pass # Never replace the user's audio defaults to compensate. + sealed = seal_run(ROOT, session, captured) if cleanup_ok and session and (session/'console.log').is_file() else {} + final = game_evidence((session/'console.log').read_text(errors='replace'), a.project) if session and (session/'console.log').is_file() else {} + final = monitor.annotate(final) + if final.get('failed'): + result = 'game-failed' + if sealed and not sealed['source_unchanged_after_run']: + result = 'source-changed' + summary = {**sealed, **bindings(captured), 'started_unix': started, 'result': result, + 'session': str(session) if session else None, 'project': a.project, + 'cleanup_confirmed': cleanup_ok, 'runner_error': runner_error, + 'failure_grace_seconds': a.failure_grace, + 'failure_observed_during_polling': monitor.first_failure_at is not None, + 'first_failure_elapsed_seconds': (monitor.first_failure_at - monitor.started) if monitor.first_failure_at is not None else None, + 'executable': str(executable), 'dedicated_server': False, + 'display': 'headless Gamescope', 'audio': '-noSound plus own silent sink', + 'scope': 'ordinary game compile/startup; no scripted fixture, full escape or multiplayer acceptance'} + if session: + (session/'runner.json').write_text(json.dumps(summary, indent=2)+'\n') + (session/'game-startup-report.json').write_text(json.dumps(final, indent=2)+'\n') + shutil.copyfile(launch_log, session/'headless-launch.log') + print(json.dumps(summary, indent=2), flush=True) + return 0 if result == 'game-started' else 1 + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--steam', type=Path, default=Path.home()/'.local/share/Steam') + parser.add_argument('--compat', type=Path, required=True) + parser.add_argument('--profile', type=Path, default=Path('/tmp/erri-game-profile')) + parser.add_argument('--project', choices=['core', 'chat'], default='core') + 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('--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') + args = parser.parse_args() + try: + if args.inspect_processes: + report = {'read_only': True, 'game_process_check': 'clear', 'prefix_process_check': 'clear'} + for key, check in [('game_process_check', assert_no_game), ('prefix_process_check', lambda: assert_prefix_idle(args.compat.resolve()))]: + try: + check() + except (OSError, ValueError) as error: + report[key] = str(error) + print(json.dumps(report, indent=2)) + return 0 if report['game_process_check'] == report['prefix_process_check'] == 'clear' else 1 + return run(args) + except (OSError, ValueError, subprocess.SubprocessError) as error: + parser.error(str(error)) + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_workbench.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_workbench.py new file mode 100644 index 0000000..bbdb5bd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/headless_workbench.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +"""Run bounded native Workbench smoke tests inside a windowless Gamescope display. +Requires Linux, gamescope, Proton, and a disposable COPY of a working Tools compat prefix. +No desktop rules or existing Wine processes are changed. This is not a dedicated server. +""" +import argparse, fcntl, json, os, shutil, signal, subprocess, time +from pathlib import Path +from native_provenance import snapshot, persist, bindings, seal_run +ROOT = Path(__file__).resolve().parents[1] +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=['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('--rounds', type=int, default=2) +p.add_argument('--timeout', type=int, default=360) +p.add_argument('--project', choices=['core', 'chat'], default='chat', help='Core-only base or full companion integration') +a = p.parse_args() +steam, compat, profile = a.steam.resolve(), a.compat.resolve(), a.profile.resolve() +if not 1 <= a.rounds <= 10 or not 60 <= a.timeout <= 1800: + p.error('Use 1..10 rounds and a 60..1800 second timeout') +if a.smoke == 'mortar-fire' and (a.project != 'chat' or a.rounds != 1 or a.timeout < 400): + p.error('mortar-fire requires --project chat --rounds 1 --timeout at least 400') +if a.smoke == 'environment-restart': + if a.project != 'core' or a.rounds != 2: p.error('environment-restart requires --project core --rounds 2') + fixture_names = ['erri-environment-restart.json', 'erri-environment-restart.json.bak', 'erri-environment-restart.json.tmp', 'erri-environment-restart-round.json'] + if any((profile/name).exists() or (profile/name).is_symlink() for name in fixture_names): p.error('environment-restart fixture paths must not preexist; preserve or move prior evidence before retrying') +if compat.is_relative_to(steam) or not (compat/'pfx/system.reg').is_file(): + p.error('--compat must be a disposable cloned prefix outside the Steam installation') +prefix_lock = (compat/'.erri-workbench.lock').open('a') +try: fcntl.flock(prefix_lock, fcntl.LOCK_EX | fcntl.LOCK_NB) +except BlockingIOError: p.error('Another test runner owns this disposable Wine prefix') +if profile.is_relative_to(ROOT) or profile.is_relative_to(steam): + p.error('--profile must be outside source and Steam directories') +if not shutil.which('gamescope') or not shutil.which('pactl'): p.error('gamescope and pactl are required') +wb = steam/'steamapps/common/Arma Reforger Tools/Workbench' +proton = steam/'steamapps/common/Proton - Experimental/proton' +vanilla = steam/'steamapps/common/Arma Reforger/addons/data' +if not proton.is_file() or not (wb/'ArmaReforgerWorkbenchSteamDiag.exe').is_file(): + p.error('Stable Reforger Tools and Proton Experimental must already be installed') +profile.mkdir(parents=True, exist_ok=True) +addons = profile/'addons' +addons.mkdir(exist_ok=True) +link = addons/'ArmaReforger' +if not link.exists(): link.symlink_to(vanilla, target_is_directory=True) +if link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')): + p.error('Test profile addons must contain only the intended vanilla link') +profile_arg = 'Z:'+str(profile) +# Refuse concurrency instead of terminating anybody else's editor. +for proc in Path('/proc').iterdir(): + if not proc.name.isdigit(): continue + try: + args = (proc/'cmdline').read_bytes().split(b'\0') + if profile_arg.encode() in args and any(x.endswith(b'ArmaReforgerWorkbenchSteamDiag.exe') for x in args): + p.error('Another Workbench already uses this test profile') + except (FileNotFoundError, PermissionError, ProcessLookupError): pass +command = ['gamescope', '--backend', 'headless', '-W', '1280', '-H', '720', '-w', '1280', '-h', '720', '-r', '30', '--', str(proton), 'run', str(wb/'ArmaReforgerWorkbenchSteamDiag.exe'), '-gproj', 'Z:'+str(ROOT/'addons'/a.project/'addon.gproj'), '-addonsDir', 'Z:'+str(ROOT/'addons'), '-profile', profile_arg, '-logconsole', '-wbModule=WorldEditor', '-load', 'Worlds/ERR_Everon.ent', '-plugin=ERR_ValidateWorldPlugin', '-errPlay', '1', '-errSmoke', '1', '-errSmokeOutcome', a.smoke, '-noThrow', '-disableCrashReporter'] +if a.station_teardown_diagnostics: command += ['-errStationTeardownDiag', '1'] +if a.project == 'core': + if a.smoke not in {'victory', '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'}: p.error('Unsupported Core-only fixture') + command[command.index('-plugin=ERR_ValidateWorldPlugin')] = '-plugin=ERR_ValidateBaseWorldPlugin' + command[command.index('-errSmoke')] = '-errBaseSmoke' +if a.smoke in {'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'} and a.project != 'core': p.error('This fixture requires --project core') +if a.smoke in {'startup-failure', 'site-survey', 'transport-survey', 'extraction-startup-failure', 'extraction-boundary-failure'} and (a.project != 'core' or a.rounds != 1): p.error('This diagnostic requires --project core --rounds 1') +env = os.environ.copy() +env.update(STEAM_COMPAT_DATA_PATH=str(compat), STEAM_COMPAT_CLIENT_INSTALL_PATH=str(steam), WINEPREFIX=str(compat/'pfx')) +# A test-only sink prevents startup sounds; a stream check also catches a saved +# explicit Wine device selection. Never change the user's default sink. +silent_sink = 'erri_tests_silent' +sinks = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'short', 'sinks'], text=True)) +if not any(sink['name'] == silent_sink for sink in sinks): + subprocess.run(['pactl', 'load-module', 'module-null-sink', 'sink_name='+silent_sink, 'sink_properties=device.description=ERRI_Silent_Tests'], check=True, stdout=subprocess.DEVNULL) +subprocess.run(['pactl', 'set-sink-mute', silent_sink, '1'], check=True) +subprocess.run(['pactl', 'set-sink-volume', silent_sink, '0%'], check=True) +sinks = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'short', 'sinks'], text=True)) +silent_index = next(sink['index'] for sink in sinks if sink['name'] == silent_sink) +env.update(PULSE_SINK=silent_sink, PULSE_PROP='application.id=org.escapistsrereintroduced.tests') +muted_streams = set() +def silence_test_streams(): + streams = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'sink-inputs'], text=True)) + for stream in streams: + props = stream.get('properties', {}) + owned = props.get('application.id') == 'org.escapistsrereintroduced.tests' + pid = props.get('application.process.id', '') + if not owned and pid.isdigit(): + try: + owned = ('WINEPREFIX='+str(compat/'pfx')).encode() in (Path('/proc')/pid/'environ').read_bytes().split(b'\0') + except (FileNotFoundError, PermissionError, ProcessLookupError): pass + if not owned: continue + index = str(stream['index']) + if stream.get('sink') != silent_index: + subprocess.run(['pactl', 'move-sink-input', index, silent_sink], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if not stream.get('mute'): + subprocess.run(['pactl', 'set-sink-input-mute', index, '1'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if index not in muted_streams: + muted_streams.add(index) + print('Test audio routed to silent output and muted (stream '+index+')', flush=True) +# Snapshot addon bytes before launching any engine process. +captured_sources = snapshot(ROOT, command) +recorded_sessions = set() +started = time.time() +log_root = profile/'logs' +previous = set(log_root.glob('logs_*')) if log_root.exists() else set() +result, session, complete_at = 'timeout', None, None +with (profile/'headless-launch.log').open('w') as output: + child = subprocess.Popen(command, cwd=wb, env=env, stdout=output, stderr=subprocess.STDOUT, start_new_session=True) + try: + while time.time()-started < a.timeout: + silence_test_streams() + candidates = [x for x in log_root.glob('logs_*') if x not in previous] + if candidates: + session = max(candidates, key=lambda x:x.stat().st_mtime) + if session not in recorded_sessions: + persist(session, captured_sources) + recorded_sessions.add(session) + console = session/'console.log' + content = console.read_text(errors='replace') if console.exists() else '' + if ('Rereintroduced: scenario preparation failed' in content and a.smoke not in {'startup-failure', 'extraction-startup-failure', 'extraction-boundary-failure'}) or 'ERR SMOKE FAIL:' in content or 'Virtual Machine Exception' in content or 'Can\'t compile "Game"' in content: + result = 'test-failed'; break + if content.count('ERR SMOKE COMPLETE:') >= a.rounds: + if complete_at is None: complete_at = time.time() + if time.time()-complete_at >= 6: result = 'smoke-completed'; break + if child.poll() is not None: result = 'process-exited'; break + time.sleep(1) + except KeyboardInterrupt: + result = 'interrupted' + finally: + # Stop Wine in this disposable prefix only. Proton's reaper may create a + # separate process group, so killing Gamescope alone can leave Wine alive. + wine_server = proton.parent/'files/bin/wineserver' + subprocess.run([str(wine_server), '-k'], env=env, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, timeout=10) + # Only this fresh process group belongs to the runner and disposable prefix. + try: os.killpg(child.pid, signal.SIGTERM) + except ProcessLookupError: pass + try: child.wait(timeout=10) + except subprocess.TimeoutExpired: + os.killpg(child.pid, signal.SIGKILL); child.wait() + # Gamescope's reaper can outlive its parent and ignores SIGTERM. + try: os.killpg(child.pid, signal.SIGKILL) + except ProcessLookupError: pass +stopped_evidence = seal_run(ROOT, session, captured_sources) if session else {} +if session and not stopped_evidence['source_unchanged_after_run']: result = 'source-changed' +summary = {**stopped_evidence, **bindings(captured_sources), 'started_unix':started, 'result':result, 'session':str(session) if session else None, 'rounds_required':a.rounds, 'project':a.project, 'display':'headless Gamescope 1280x720/30Hz', 'dedicated_server':False, 'audio':'silent sink and per-test-stream mute'} +if session: + (session/'runner.json').write_text(json.dumps(summary, indent=2)+'\n') + shutil.copyfile(profile/'headless-launch.log', session/'headless-launch.log') +print(json.dumps(summary, indent=2), flush=True) +if result != 'smoke-completed': raise SystemExit(1) +# All native errors still fail the report even when the scripted sequence completed. +raise SystemExit(subprocess.call(['python3', str(ROOT/'tools/native_report.py'), str(session/'console.log'), '--require-completions', str(a.rounds)])) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/import_settings.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/import_settings.py new file mode 100644 index 0000000..f31518a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/import_settings.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""Import supported legacy settings without modifying either source or an existing destination.""" +import argparse,json,os,tempfile,sys +from pathlib import Path +SCHEMA={ + 'reportIntervalSeconds':(10,5,60), + 'supportSquadLimit':(4,0,8), + 'responseRadiusMetres':(2000,500,5000), + 'aiIntelChancePercent':(60,0,100), + 'intelRevealChancePercent':(15,0,100), + 'radioDefenceSeconds':(180,30,1800), + 'startTimeMinutes':(840,0,1439), + 'timeMultiplier':(1,1,24), + 'startDateCode':(0,0,1501231), + 'weatherProfile':(0,0,3), +} +AI_KEYS=('reportIntervalSeconds','supportSquadLimit','responseRadiusMetres') +INTEL_KEYS=('aiIntelChancePercent','intelRevealChancePercent') +def merge(ai=None,intel=None): + result={key:spec[0] for key,spec in SCHEMA.items()};deferred=[] + for label,data,keys in [('ai',ai,AI_KEYS),('intel',intel,INTEL_KEYS)]: + if data is None:continue + if not isinstance(data,dict):raise ValueError(label+' settings must be a JSON object') + if 'configVersion' in data and (type(data['configVersion']) not in (int,float) or data['configVersion']!=1): + raise ValueError(label+' configVersion must be 1') + for key in keys: + if key not in data:continue + value=data[key];_,lo,hi=SCHEMA[key] + if type(value) not in (int,float) or not lo<=value<=hi or int(value)!=value: + raise ValueError(f'{key} must be an integer in [{lo},{hi}]') + result[key]=int(value) + deferred.extend(label+':'+key for key in data if key not in keys and key!='configVersion') + return result,deferred + +def write_new(path,text): + path=Path(path) + with tempfile.NamedTemporaryFile(mode='w',dir=path.parent,prefix='.rereintroduced-',delete=False) as f: + tmp=Path(f.name) + try: + f.write(text);f.flush();os.fsync(f.fileno()) + # Atomic installation that cannot overwrite an existing file, even in a race. + os.link(tmp,path) + finally:tmp.unlink(missing_ok=True) + +def main(): + p=argparse.ArgumentParser(description=__doc__) + p.add_argument('--ai',type=Path,help='Read-only escapists-ai.json source') + p.add_argument('--intel',type=Path,help='Read-only escapists-intel.json source') + p.add_argument('--out',type=Path,help='New rereintroduced.json; omit to preview on stdout') + a=p.parse_args() + if not a.ai and not a.intel:p.error('Supply --ai and/or --intel') + try: + result,deferred=merge(json.loads(a.ai.read_text()) if a.ai else None,json.loads(a.intel.read_text()) if a.intel else None) + text=json.dumps(result,indent=2,allow_nan=False)+'\n' + if a.out:write_new(a.out,text) + else:print(text,end='') + if deferred:print('Settings awaiting controller migration (source files retained): '+', '.join(deferred),file=sys.stderr) + except (ValueError,OSError) as e:p.error(str(e)) +if __name__=='__main__':main() diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_command.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_command.py new file mode 100644 index 0000000..88c6d90 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_command.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +"""Print native test commands; never launch a window implicitly.""" +import argparse,json,subprocess +from pathlib import Path +ROOT=Path(__file__).resolve().parents[1] +p=argparse.ArgumentParser(description=__doc__) +p.add_argument('mode',choices=['workbench','server']) +p.add_argument('--exe',required=True,type=Path) +p.add_argument('--profile',required=True,type=Path) +p.add_argument('--smoke',choices=['patrol-hq', 'victory','lost-helicopter','player-death', 'radio-network', 'hq-response', 'mortar-inventory', 'cache-loss', 'startup-failure', 'site-survey', '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', 'environment', 'patrols'],help='Opt-in Workbench test; use a disposable profile') +p.add_argument('--execute',action='store_true',help='Deliberately execute the command; Workbench opens a window') +p.add_argument('--visible-output',help='User-approved spare display; required when executing Workbench') +p.add_argument('--project',choices=['core','chat'],default='chat') +a=p.parse_args() +if a.smoke and a.mode!='workbench':p.error('Scripted smoke is compiled only for Workbench') +if a.smoke in {'cache-loss', 'startup-failure', 'site-survey', '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', 'environment', 'patrols'} and a.project!='core':p.error('This fixture requires Core') +if a.execute and a.mode=='workbench' and not a.visible_output: + p.error('Workbench opens windows. Select/configure a spare display and supply --visible-output first.') +command=[str(a.exe),'-addonsDir',str(ROOT/'addons'),'-profile',str(a.profile),'-logconsole'] +if a.mode=='workbench': + command+=['-gproj',str(ROOT/'addons'/a.project/'addon.gproj'),'-wbModule=WorldEditor','-load','Worlds/ERR_Everon.ent'] + if a.smoke:command+=['-plugin','ERR_ValidateWorldPlugin','-errPlay','1','-errSmoke','1','-errSmokeOutcome',a.smoke] + if a.project=='core' and a.smoke: + if a.smoke not in {'victory', 'cache-loss', 'startup-failure', 'site-survey', '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', 'environment', 'patrols'}:p.error('Unsupported Core-only fixture') + command[command.index('ERR_ValidateWorldPlugin')]='ERR_ValidateBaseWorldPlugin' + command[command.index('-errSmoke')]='-errBaseSmoke' +else: + if 'server' not in a.exe.name.lower():p.error('Use an actual dedicated server binary for background tests.') + command+=['-addons',{'core':'ERR_Core','chat':'ERR_Chat'}[a.project],'-server','Worlds/ERR_Everon.ent','-maxFPS','60','-logStats','1000'] +print(json.dumps(command,indent=2)) +if a.execute: + if not a.exe.is_file():p.error('Executable not found') + # This helper does not move windows or change desktop settings. + raise SystemExit(subprocess.call(command)) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_provenance.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_provenance.py new file mode 100644 index 0000000..5b6d4c7 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_provenance.py @@ -0,0 +1,137 @@ +"""Launch-time source snapshots shared by the runner, archiver and release audit.""" +import hashlib +import json +import math +from pathlib import Path +import re +import time +import uuid +from source_manifest import addon_manifest + +MANIFEST = 'launch-source-sha256.json' +METADATA = 'launch-source.json' +PROVENANCE = 'source-provenance.json' + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def strict_json(raw): + def pairs(items): + result = {} + for key, value in items: + require(key not in result, f'duplicate JSON key: {key}') + result[key] = value + return result + def constant(value): + raise ValueError(f'invalid JSON number: {value}') + return json.loads(raw, object_pairs_hook=pairs, parse_constant=constant) + + +def encoded(value): + return (json.dumps(value, indent=2, allow_nan=False) + '\n').encode() + + +def snapshot(root, command): + """Call synchronously before Popen; never reconstruct this after a run.""" + manifest = encoded(addon_manifest(root)) + metadata = {'schema_version': 1, 'launch_id': str(uuid.uuid4()), + 'captured_unix': time.time(), 'source_root': str(Path(root).resolve()), + 'command': list(command), 'manifest_sha256': hashlib.sha256(manifest).hexdigest()} + return manifest, encoded(metadata) + + +def persist(session, captured): + """Persist the pre-launch bytes once a new engine session directory exists.""" + for name, raw in zip((MANIFEST, METADATA), captured): + with (Path(session) / name).open('xb') as stream: + stream.write(raw) + + +def bindings(captured): + metadata = strict_json(captured[1]) + return {'source_provenance': 'launch_snapshot', 'launch_id': metadata['launch_id'], + 'launch_source_manifest': MANIFEST, 'launch_source_metadata': METADATA, + 'launch_source_sha256': metadata['manifest_sha256']} + + +def seal_run(root, session, captured): + """After process cleanup, bind final sources and exact raw log to this launch.""" + metadata = strict_json(captured[1]) + final_sources = encoded(addon_manifest(root)) + final_digest = hashlib.sha256(final_sources).hexdigest() + return {'stopped_unix': time.time(), 'console_sha256': hashlib.sha256(read_file(Path(session) / 'console.log')).hexdigest(), + 'end_source_sha256': final_digest, + 'source_unchanged_after_run': final_digest == metadata['manifest_sha256']} + + +def read_file(path): + require(path.is_file() and not path.is_symlink(), f'missing or symlinked launch evidence: {path.name}') + return path.read_bytes() + + +def read_launch(session, runner_name='runner.json', log_name='console.log'): + session = Path(session) + raw_manifest = read_file(session / MANIFEST) + raw_metadata = read_file(session / METADATA) + manifest, metadata = strict_json(raw_manifest), strict_json(raw_metadata) + runner = strict_json(read_file(session / runner_name)) + require(isinstance(manifest, dict) and bool(manifest), 'launch manifest must be nonempty') + require(all(isinstance(path, str) and isinstance(digest, str) and re.fullmatch('[0-9a-f]{64}', digest) + for path, digest in manifest.items()), 'invalid launch source hash') + require(isinstance(metadata, dict) and set(metadata) == {'schema_version', 'launch_id', 'captured_unix', 'source_root', 'command', 'manifest_sha256'}, 'invalid launch metadata fields') + require(type(metadata['schema_version']) is int and metadata['schema_version'] == 1, 'invalid launch metadata version') + require(isinstance(metadata['launch_id'], str), 'invalid launch id') + try: + uuid.UUID(metadata['launch_id']) + except (ValueError, AttributeError) as error: + raise ValueError('invalid launch id') from error + require(isinstance(metadata['source_root'], str) and bool(metadata['source_root']), 'missing launch source root') + require(isinstance(metadata['command'], list) and bool(metadata['command']) and all(isinstance(arg, str) for arg in metadata['command']), 'invalid launch command') + captured = metadata['captured_unix'] + require(type(captured) in (int, float) and math.isfinite(captured) and captured > 0, 'invalid launch capture time') + require(hashlib.sha256(raw_manifest).hexdigest() == metadata['manifest_sha256'], 'launch manifest byte hash disagrees with launch metadata') + require(isinstance(runner, dict), 'runner metadata must be an object') + for key, value in bindings((raw_manifest, raw_metadata)).items(): + require(runner.get(key) == value, f'runner launch binding disagrees: {key}') + started = runner.get('started_unix') + require(type(started) in (int, float) and math.isfinite(started) and started >= captured, 'source snapshot must precede process launch') + stopped = runner.get('stopped_unix') + require(type(stopped) in (int, float) and math.isfinite(stopped) and stopped >= started, 'invalid stopped runner timestamp') + require(runner.get('source_unchanged_after_run') is True and runner.get('end_source_sha256') == metadata['manifest_sha256'], 'addon sources changed between launch and stopped-run snapshot') + require(runner.get('console_sha256') == hashlib.sha256(read_file(session / log_name)).hexdigest(), 'raw native log differs from stopped runner log hash') + return manifest, metadata, runner + + +def archive_source(session, root, allow_legacy=False): + """Refuse changed launch sources; legacy provenance requires explicit opt-in.""" + session = Path(session) + runner_path = session / 'runner.json' + runner = strict_json(read_file(runner_path)) if runner_path.exists() else {} + marked = isinstance(runner, dict) and any(key in runner for key in ('source_provenance', 'launch_id', 'launch_source_sha256')) + present = (session / MANIFEST).exists() or (session / METADATA).exists() or marked + current = addon_manifest(root) + if present: + manifest, metadata, runner = read_launch(session) + require(manifest == current, 'current addon sources differ from pre-launch snapshot; refusing to relabel an old run') + return read_file(session / MANIFEST), {'schema_version': 1, 'kind': 'launch_snapshot'}, True + require(allow_legacy, 'session has no pre-launch source snapshot; use --allow-legacy-archive-time-source only for historical evidence') + return encoded(current), {'schema_version': 1, 'kind': 'archive_time_only', + 'qualification': 'historical_only', + 'reason': 'No pre-launch snapshot; hashes describe archive-time files, not proven launch files.'}, False + + +def qualify_archive(archive, current): + archive = Path(archive) + provenance = strict_json(read_file(archive / PROVENANCE)) + require(provenance == {'schema_version': 1, 'kind': 'launch_snapshot'} + and type(provenance.get('schema_version')) is int, 'native qualification requires launch_snapshot provenance; archive-time-only evidence is historical') + manifest, metadata, runner = read_launch(archive, 'runner.json.txt', 'console.log.txt') + require(manifest == current, 'launch source snapshot does not match current addon sources/resources') + require(read_file(archive / 'source-sha256.json') == read_file(archive / MANIFEST), 'archived source manifest differs from exact launch snapshot bytes') + require(runner.get('result') == 'smoke-completed', 'native qualification requires a completed runner session') + rounds = runner.get('rounds_required') + require(type(rounds) is int and 1 <= rounds <= 10, 'invalid completed runner round requirement') + return rounds diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_report.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_report.py new file mode 100644 index 0000000..1d4f04a --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/native_report.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +"""Summarize native smoke evidence without confusing it with gameplay acceptance.""" +from pathlib import Path +import argparse +import json +import re + + +def analyze(log_text, log_name): + failures = [line.strip() for line in log_text.splitlines() + if 'ERR SMOKE FAIL:' in line or 'Virtual Machine Exception' in line + or re.search(r'\bSCRIPT\s+\(E\)', line) + or "won't take damage and wont replicate" in line] + return { + 'log': str(log_name), + 'smoke_completions': log_text.count('ERR SMOKE COMPLETE:'), + 'assertions_passed': len(re.findall('ERR SMOKE PASS:', log_text)), + 'script_or_runtime_failures': failures, + 'engine_errors': [line.strip() for line in log_text.splitlines() + if re.search(r'\b[A-Z][A-Z0-9_]*\s+\([EF]\)', line)], + 'missing_end_screen': [line.strip() for line in log_text.splitlines() + if 'Could not find' in line and 'endscreen' in line], + 'scope': 'scripted local Workbench integration only; no multiplayer, piloting or FPS claim', + } + + +def clean(report, require_completions=1): + return (report['smoke_completions'] >= require_completions + and not report['script_or_runtime_failures'] + and not report['engine_errors'] and not report['missing_end_screen']) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('log', type=Path) + parser.add_argument('--require-completions', type=int, default=1) + args = parser.parse_args() + report = analyze(args.log.read_text(errors='replace'), args.log) + print(json.dumps(report, indent=2)) + return 0 if clean(report, args.require_completions) else 1 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/reference_guard.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/reference_guard.py new file mode 100644 index 0000000..222813d --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/reference_guard.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +"""Snapshot/verify reference sources without writing to the reference workspace.""" +import argparse,hashlib,json,sys +from pathlib import Path +p=argparse.ArgumentParser(description=__doc__) +p.add_argument('mode',choices=['snapshot','verify']) +p.add_argument('reference',type=Path) +p.add_argument('manifest',type=Path) +a=p.parse_args();ref=a.reference.resolve();manifest=a.manifest.resolve() +if manifest.is_relative_to(ref):p.error('Manifest must be outside the read-only reference') +suffixes={'.c','.et','.ent','.layer','.conf','.gproj','.meta','.layout','.emat','.md','.py'} +current={str(f.relative_to(ref)):hashlib.sha256(f.read_bytes()).hexdigest() for f in sorted(ref.rglob('*')) if f.is_file() and f.suffix in suffixes and not any(part in {'.git','.agents','.codex','__pycache__'} for part in f.relative_to(ref).parts)} +if a.mode=='snapshot': + if manifest.exists():p.error('Refusing to overwrite an existing baseline') + manifest.write_text(json.dumps(current,indent=2)+'\n');print(f'Recorded {len(current)} reference source hashes') +else: + before=json.loads(manifest.read_text()) + changed=sorted(k for k in before.keys()|current.keys() if before.get(k)!=current.get(k)) + if changed: + print('Reference changes detected; no files were reverted:');print('\n'.join(changed));sys.exit(1) + print(f'PASS: {len(current)} reference sources unchanged') diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/release_check.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/release_check.py new file mode 100644 index 0000000..2f39942 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/release_check.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +"""Audit release qualification; never change acceptance, build or publish anything.""" +import json +import re +from pathlib import Path, PurePosixPath +from native_report import analyze, clean +from source_manifest import addon_manifest +from native_provenance import qualify_archive, MANIFEST, METADATA, PROVENANCE + +ROOT = Path(__file__).resolve().parents[1] +REQUIRED_CASES = ( + 'independent_native_build', 'prison_geometry_and_spawn', 'escape_loop', + 'join_late', 'reconnect_identity', 'death_unconsciousness_revive', + 'respawn_and_spectators', 'partial_escape', 'defeat_restart', + 'interrupted_reports', 'stale_contacts', 'support_losses', + 'ammunition_depletion', 'cleanup_no_duplicate_orders_or_spawns', + 'twelve_players', 'equivalent_workload_fps_improvement', + 'own_identity_release_package', +) +STATUSES = {'pending', 'passed', 'failed'} + + +def strict_object(pairs): + result = {} + for key, value in pairs: + if key in result: + raise ValueError(f'duplicate JSON key: {key}') + result[key] = value + return result + + +def read_json(path): + def invalid_constant(value): + raise ValueError(f'invalid JSON number: {value}') + return json.loads(path.read_text(encoding='utf-8'), object_pairs_hook=strict_object, + parse_constant=invalid_constant) + + +def evidence_path(root, name): + if not isinstance(name, str) or not name or '\\' in name or any(ord(c) < 32 for c in name): + raise ValueError('evidence path must be a nonempty repository-relative POSIX path') + path = PurePosixPath(name) + if (path.is_absolute() or path.as_posix() != name or ':' in name + or any(part in {'.', '..', '.git'} for part in path.parts)): + raise ValueError(f'unsafe or noncanonical evidence path: {name}') + full = root / name + try: + resolved = full.resolve() + except (OSError, RuntimeError) as error: + raise ValueError(f'evidence path cannot be resolved: {name}') from error + if not resolved.is_relative_to(root): + raise ValueError(f'evidence leaves repository: {name}') + cursor = root + for part in path.parts: + cursor /= part + if cursor.is_symlink(): + raise ValueError(f'evidence symlinks are not supported: {name}') + if not full.is_file(): + raise ValueError(f'evidence is not an existing regular file: {name}') + with full.open('rb') as stream: + if not any(chunk.strip() for chunk in iter(lambda: stream.read(65536), b'')): + raise ValueError(f'evidence is empty: {name}') + return full + + +def audit(root=ROOT): + root = Path(root).resolve() + blocked = [] + try: + ledger = read_json(evidence_path(root, 'docs/acceptance.json')) + except (OSError, ValueError) as error: + return [f'docs/acceptance.json: {error}'] + if not isinstance(ledger, dict): + return ['acceptance ledger must be an object'] + if not isinstance(ledger.get('target'), str) or not ledger['target'].strip(): + blocked.append('target must be a nonempty string') + cases = ledger.get('cases') + if not isinstance(cases, dict): + blocked.append('cases must be an object containing the fixed first-release requirements') + cases = {} + for name in REQUIRED_CASES: + if name not in cases: + blocked.append(f'cases.{name}: required first-release case is missing') + for name in sorted(set(cases) - set(REQUIRED_CASES)): + blocked.append(f'cases.{name}: unknown first-release case') + development = ledger.get('development_checks') + if not isinstance(development, dict): + blocked.append('development_checks must be an object') + development = {} + if 'clean_native_runtime' not in development: + blocked.append('development_checks.clean_native_runtime: required clean-runtime gate is missing') + + def validate_entry(label, entry, required): + if not isinstance(entry, dict): + blocked.append(f'{label}: entry must be an object') + return + status = entry.get('status') + if not isinstance(status, str) or status not in STATUSES: + blocked.append(f'{label}: unknown or malformed status {status!r}') + elif required and status != 'passed': + blocked.append(f'{label}: status is {status}, not passed') + evidence = entry.get('evidence') + if not isinstance(evidence, list): + blocked.append(f'{label}: evidence must be a list of file paths') + return + if status == 'passed' and not evidence: + blocked.append(f'{label}: passed status requires nonempty evidence') + seen = set() + for name in evidence: + try: + evidence_path(root, name) + if name in seen: + raise ValueError(f'duplicate evidence path: {name}') + seen.add(name) + except (OSError, ValueError) as error: + blocked.append(f'{label}: {error}') + + for name, entry in cases.items(): + validate_entry(f'cases.{name}', entry, True) + for name, entry in development.items(): + validate_entry(f'development_checks.{name}', entry, name == 'clean_native_runtime') + + current = None + try: + current = addon_manifest(root) + except (OSError, ValueError) as error: + blocked.append(f'current addon source/resource manifest: {error}') + + def native_qualification(label, entry): + if not isinstance(entry, dict) or entry.get('status') != 'passed': + return + paths = {} + for field in ('source_manifest', 'native_report'): + try: + paths[field] = evidence_path(root, entry.get(field)) + if not isinstance(entry.get('evidence'), list) or entry[field] not in entry['evidence']: + raise ValueError(f'{field} must also appear in this entry\'s evidence list') + except (OSError, ValueError) as error: + blocked.append(f'{label}.{field}: {error}') + if len(paths) != 2: + return + if paths['source_manifest'].parent != paths['native_report'].parent: + blocked.append(f'{label}: native report and manifest must belong to the same evidence archive') + try: + manifest = read_json(paths['source_manifest']) + if (not isinstance(manifest, dict) or not manifest + or any(not isinstance(digest, str) or not re.fullmatch(r'[0-9a-f]{64}', digest) + for digest in manifest.values())): + raise ValueError('manifest must be a nonempty path-to-SHA256 object') + if current is not None and manifest != current: + missing = sorted(set(current) - set(manifest)) + extra = sorted(set(manifest) - set(current)) + changed = sorted(path for path in set(current) & set(manifest) if current[path] != manifest[path]) + raise ValueError(f'manifest does not match current addon sources/resources ' + f'(missing={len(missing)}, extra={len(extra)}, changed={len(changed)})') + except (OSError, ValueError) as error: + blocked.append(f'{label}.source_manifest: {error}') + required_rounds = 1 + try: + archive = paths['native_report'].parent + for name in (MANIFEST, METADATA, PROVENANCE, 'runner.json.txt', 'source-sha256.json'): + evidence_path(root, (archive / name).relative_to(root).as_posix()) + required_rounds = qualify_archive(archive, current) + except (OSError, ValueError) as error: + blocked.append(f'{label}.launch_provenance: {error}') + try: + report = read_json(paths['native_report']) + if not isinstance(report, dict): + raise ValueError('native report must be an object') + log = evidence_path(root, report.get('log')) + if log.parent != paths['native_report'].parent: + raise ValueError('native raw log must belong to the same evidence archive') + if log.name != 'console.log.txt': + raise ValueError('native report must analyze the exact console.log.txt sealed by the stopped runner') + actual = analyze(log.read_text(errors='replace'), report['log']) + # Exact JSON types matter: True must not masquerade as one completion. + if json.dumps(report, sort_keys=True) != json.dumps(actual, sort_keys=True): + raise ValueError('native report does not match analysis of its archived raw log') + if not clean(actual, required_rounds) or actual['assertions_passed'] <= 0: + raise ValueError('native raw log must contain successful completion/assertions and no script, engine or end-screen errors') + except (OSError, ValueError) as error: + blocked.append(f'{label}.native_report: {error}') + + native_qualification('cases.independent_native_build', cases.get('independent_native_build')) + native_qualification('development_checks.clean_native_runtime', development.get('clean_native_runtime')) + return blocked + + +def main(): + blocked = audit() + if blocked: + print('Not release-qualified:') + for reason in blocked: + print(' - ' + reason) + return 1 + print('Release qualification audit passed. This audit does not build or publish a release.') + return 0 + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/docs/evidence/dedicated-2026-09-19-083213/source/tools/source_manifest.py b/docs/evidence/dedicated-2026-09-19-083213/source/tools/source_manifest.py new file mode 100644 index 0000000..53968d3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/source/tools/source_manifest.py @@ -0,0 +1,29 @@ +"""Hash authored addon files, excluding generated Workbench/build state. + +Keep this shared by native evidence archival and release qualification. Unknown +resource formats are included automatically, rather than silently omitted. +""" +import hashlib +from pathlib import Path + +GENERATED_DIRECTORIES = {'.build', '.local', '__pycache__', 'profiles'} + +def addon_manifest(root): + root = Path(root).resolve() + addons = root / 'addons' + if not addons.is_dir() or addons.is_symlink(): + raise ValueError('addons must be a real directory inside the repository') + manifest = {} + for path in sorted(addons.rglob('*')): + relative = path.relative_to(root) + if any(part in GENERATED_DIRECTORIES for part in relative.parts[1:]): + continue + if (len(relative.parts) == 3 and path.name.startswith('resourceDatabase.rdb')) or path.suffix in {'.pak', '.log'}: + continue + if path.is_symlink(): + raise ValueError(f'addon source/resource symlink is not supported: {relative.as_posix()}') + if path.is_file(): + manifest[relative.as_posix()] = hashlib.sha256(path.read_bytes()).hexdigest() + if not manifest: + raise ValueError('addon source/resource manifest is empty') + return manifest diff --git a/docs/evidence/dedicated-2026-09-19-083213/stdout.log b/docs/evidence/dedicated-2026-09-19-083213/stdout.log new file mode 100644 index 0000000..21c9bbc --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-083213/stdout.log @@ -0,0 +1,339 @@ +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"} +ENGINE : Creating engine. +ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_08-32-13' 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: -addonsDir /tmp/source/addons -addons 2528466DE220D91C -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -server {AD62322D5213C440}Missions/ERR_Everon_Base.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/core/addon.gproj' guid: '2528466DE220D91C' + ENGINE : gproj: '/tmp/source/addons/ai/addon.gproj' guid: '5192138CB9D5B911' + ENGINE : gproj: '/tmp/source/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' + ENGINE : gproj: '/tmp/source/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' + 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/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_Core path=/tmp/source/addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=3 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=4 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_08-32-13/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 : 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.028000 ms +ENGINE : Initializing inputs. +NETWORK : Initializing networking. +NETWORK : Using new GameRplScheduler.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" +WORLD : Game::LoadEntities + WORLD : CreateEntities + WORLD : CreateEntities + WORLD : Wait for preloading data + 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" + 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. + + SCRIPT : SCRIPT : Initializing scripts + SCRIPT : SCRIPT : ScriptProjectManager init + PROFILING : ScriptProjectManager init took: 0.008000 ms +PROFILING : Initializing scripts took: 16.979000 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: 23.889000 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: 29.382000 ms + SCRIPT : SCRIPT : Compiling Game scripts + SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 25833K 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: 2ef250fb +PROFILING : Compiling Game scripts took: 1428.098000 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 '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'. + WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +PROFILING : Entities load took: 748.131000 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: 0.922000 ms + WORLD : WORLD : Wait for preloading data + PROFILING : Wait for preloading data took: 3304.813000 ms + ENTITY : Create entity @"ENTITY: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: 1147.054000 ms + WORLD : WORLD : NotifyBeforeEntitiesInitialized + PROFILING : NotifyBeforeEntitiesInitialized took: 0.028000 ms + WORLD : WORLD : NotifyEntitiesInitialized + TERRAIN : TERRAIN : Initializing road networks... + PROFILING : Initializing road networks... took: 1.812000 ms + DEFAULT : DEFAULT : WorldVolumesCollection + PROFILING : WorldVolumesCollection took: 54.141000 ms + INIT : INIT : SoundWorldInit + PROFILING : SoundWorldInit took: 7.362000 ms + PROFILING : NotifyEntitiesInitialized took: 63.416000 ms + PROFILING : CreateEntities took: 12213.648000 ms + PROFILING : CreateEntities took: 12213.656000 ms + WORLD : WORLD : EOnActivate + PROFILING : EOnActivate took: 28.588000 ms +PROFILING : Game::LoadEntities took: 12243.502000 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.411000 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 center=<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.07,63.5457,7499.69> up=0.995704 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.345002 angularSpeed=0.059733 +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.04,63.6117,7501.97> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.04,63.3117,7501.97> terrainY=63.3164 tireTerrainGap=-0.00473785 +SCRIPT : ERR GEAR SUPPORT: center=<7012.04,63.6117,7501.97> radius=0.3 bottom=<7012.04,63.3117,7501.97> fraction=0.433053 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00472641 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5942,7497.69> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1442,7497.69> terrainY=64.1567 tireTerrainGap=-0.0125656 +SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5942,7497.69> radius=0.45 bottom=<7009.88,64.1442,7497.69> fraction=0.397644 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.0125198 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2597,7497.75> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8097,7497.75> terrainY=63.8177 tireTerrainGap=-0.00805283 +SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2597,7497.75> radius=0.45 bottom=<7014.42,63.8097,7497.75> fraction=0.417778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00808716 +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.09,63.5355,7499.71> up=0.994317 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.102028 angularSpeed=0.0585238 +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.05,63.6213,7501.99> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.05,63.3213,7501.99> terrainY=63.3145 tireTerrainGap=0.00682831 +SCRIPT : ERR GEAR SUPPORT: center=<7012.05,63.6213,7501.99> radius=0.3 bottom=<7012.05,63.3213,7501.99> fraction=0.485987 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00691605 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6035,7497.7> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1535,7497.7> terrainY=64.1488 tireTerrainGap=0.00473022 +SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6035,7497.7> radius=0.45 bottom=<7009.93,64.1535,7497.7> fraction=0.476164 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00476074 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2666,7497.79> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8166,7497.79> terrainY=63.8149 tireTerrainGap=0.00174332 +SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2666,7497.79> radius=0.45 bottom=<7014.47,63.8166,7497.79> fraction=0.4625 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.00175095 +SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +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 [guards]: initial site=everon-supply-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.531,7499.75> up=0.994244 +SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0510799 angularSpeed=0.0476384 +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.6153,7502.02> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3153,7502.02> terrainY=63.3111 tireTerrainGap=0.00417709 +SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6153,7502.02> radius=0.3 bottom=<7012.07,63.3153,7502.02> fraction=0.473567 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00418472 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5924,7497.72> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1424,7497.72> terrainY=64.1428 tireTerrainGap=-0.00038147 +SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5924,7497.72> radius=0.45 bottom=<7009.97,64.1424,7497.72> fraction=0.453169 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000297546 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.258,7497.83> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.808,7497.83> terrainY=63.8124 tireTerrainGap=-0.00437546 +SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.258,7497.83> radius=0.45 bottom=<7014.51,63.808,7497.83> fraction=0.434444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00442123 +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=3 conscious=3 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.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) +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=4 conscious=4 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.13,63.5286,7499.76> up=0.994199 +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.08,63.6119,7502.03> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3119,7502.03> terrainY=63.3102 tireTerrainGap=0.00168228 +SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6119,7502.03> radius=0.3 bottom=<7012.08,63.3119,7502.03> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5928,7497.74> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1428,7497.74> terrainY=64.1412 tireTerrainGap=0.00151825 +SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5928,7497.74> radius=0.45 bottom=<7009.97,64.1428,7497.74> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.84> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.84> terrainY=63.8118 tireTerrainGap=-0.0024147 +SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.84> radius=0.45 bottom=<7014.51,63.8094,7497.84> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +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=5 conscious=5 nativeComplete=0 +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.13,63.5286,7499.76> up=0.994199 +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.08,63.6119,7502.03> +SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3119,7502.03> terrainY=63.3102 tireTerrainGap=0.00168228 +SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6119,7502.03> radius=0.3 bottom=<7012.08,63.3119,7502.03> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5928,7497.74> +SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1428,7497.74> terrainY=64.1412 tireTerrainGap=0.00151825 +SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5928,7497.74> radius=0.45 bottom=<7009.97,64.1428,7497.74> fraction=0.461582 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00154877 +SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.84> +SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.84> terrainY=63.8118 tireTerrainGap=-0.0024147 +SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.84> radius=0.45 bottom=<7014.51,63.8094,7497.84> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +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 [guards]: initial site=everon-radio-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 +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 6.5 ms, max: 65.6 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1001182 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 29.2 ms, max: 38.2 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 1001296 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | 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.3 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001371 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 30.6 ms, max: 35.6 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1001500 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | 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.5 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001492 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | 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: 34.9 ms, mean: 33.3 ms, median: 33.3 ms), Mem: 1001452 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | 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.4 ms, mean: 33.3 ms, median: 33.5 ms), Mem: 1001493 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | 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: 34.5 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001501 kB, Player: 0, AI: 46, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 790, Static: 57591, Disabled: 31 | 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: 1001522 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | 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: 35.2 ms, mean: 33.3 ms, median: 33.4 ms), Mem: 1001558 kB, Player: 0, AI: 47, AIChar: 36, Veh: 0 (2), Proj (S: 0, M: 0, G: 0 | 0), Streaming(Dynam: 791, Static: 57591, Disabled: 31 | New: 0, Del: 0, Bump: 16) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.8 ms, max: 34.8 ms, mean: 33.3 \ No newline at end of file diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/archive-sha256.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/archive-sha256.json new file mode 100644 index 0000000..a407e06 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/archive-sha256.json @@ -0,0 +1,16 @@ +{ + "cleanup-verification.json": "54e31b30fa5f8102a42d020b6a687799a063dd320ae5b0b30ae1efe64964b553", + "command.json": "dfd5a125914d7231ab437480c0272782c6a3fdff14101889cb84d4f59af2c532", + "isolation-preflight.json": "fc56289517669d9c72046ee8ae5aecffb13b900e56dfd7338555906df21b9da3", + "profile/logs/logs_2026-09-19_08-40-40/console.log": "99663069b32ad193b11032486c049745d9e2fd79ab69dc523ec125ec69856eaa", + "profile/logs/logs_2026-09-19_08-40-40/error.log": "196ecb77dcd722a6440c90907876c8c52b14c22e1e00e127dc59098c87115c60", + "profile/logs/logs_2026-09-19_08-40-40/script.log": "93b7978c21cbe6032da635b2a2e169a8301f6a15e0bd5cdb4abcf5ccea024350", + "profile/profile/.save/settings/ReforgerEngineSettings.conf": "430e3af5885fc0e04b6380243aac134b61466d75ffdffdfd3a776834a8d20de0", + "profile/profile/.save/settings/ReforgerGameSettings.conf": "1656680640c178239490ffbf9b3ddae04d3ac0993cd84471c0d27b28b76abf13", + "result.json": "d4305a16fa9260168059ccc9fb2661286a8abdf3293f149ad7f9e1d5a928d93e", + "review.json": "65884d32e21b83ab63423cc4e0ce4c3c467211f31cb2c13bb28e54a504540e24", + "runner.py": "f280a929e630dd8248e97c6bc9c8d6eb93c9708c8d71b3efecc3c2ec1b816a90", + "source-manifest-after.json": "d66a6a1a256aec91b752acb153dd1fac94d0950419e3a10ccecb74d50a914a15", + "source-manifest.json": "d66a6a1a256aec91b752acb153dd1fac94d0950419e3a10ccecb74d50a914a15", + "stdout.log": "a1619dcafb9eccbaed5a68e58886ecb49b23a15a90979a0dfb35c9cde9ce94ec" +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/cleanup-verification.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/cleanup-verification.json new file mode 100644 index 0000000..0d5e0b3 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/cleanup-verification.json @@ -0,0 +1,4 @@ +{ + "ownedSupervisorAbsent": true, + "remainingNativeServerExecutables": [] +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/command.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/command.json new file mode 100644 index 0000000..da9ee88 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/command.json @@ -0,0 +1,104 @@ +{ + "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-native-build/attempt-03-vanilla-everon/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-native-build/attempt-03-vanilla-everon", + "/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", + "-server", + "Missions/21_GM_Eden.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-server", + "Missions/21_GM_Eden.conf" + ], + "seconds": 90, + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": false, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "vanilla Everon control; no successor loaded" +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/isolation-preflight.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/isolation-preflight.json new file mode 100644 index 0000000..889b9b1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/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-native-build/attempt-03-vanilla-everon/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-native-build/attempt-03-vanilla-everon", + "/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-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/console.log b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/console.log new file mode 100644 index 0000000..4b393f2 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/console.log @@ -0,0 +1,224 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_08-40-40/console.log started at 2026-09-19 08:40:40 (2026-09-19 06:40:40 UTC) + +08:40:40.983 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_08-40-40' to filesystem under name logs +08:40:40.983 ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/profile' to filesystem under name profile +08:40:40.983 ENGINE : FileSystem: Current working directory: '/tmp/runtime/' +08:40:40.984 ENGINE : Initializing engine, version 192142 +08:40:40.984 ENGINE : CLI Params: -profile /tmp/work/profile -noBackend -noSound -noSplash -noThrow -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logStats 5000 -server Missions/21_GM_Eden.conf +08:40:40.985 ENGINE : Addon dirs: +08:40:40.985 ENGINE : dir: './addons' +08:40:40.985 ENGINE : dir: '/tmp/work/profile/addons' +08:40:40.985 ENGINE : Available addons: +08:40:40.985 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:40:40.985 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:40:41.067 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 6) to filesystem under name ArmaReforger +08:40:41.068 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 1) to filesystem under name core +08:40:41.068 ENGINE : CPU vendor : AuthenticAMD +08:40:41.068 ENGINE : CPU type : 2 +08:40:41.068 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:40:41.068 ENGINE : CPU cache info : Unknown cache +08:40:41.068 ENGINE : CPU count logical : 16 +08:40:41.068 ENGINE : CPU count physical : 8 +08:40:41.068 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:40:41.068 RESOURCES : ResourceDB: loading cache (id=0 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:40:41.192 RESOURCES : ResourceDB: loading cache (id=1 name=core path=./addons/core/resourceDatabase.rdb) +08:40:41.193 RESOURCES : ResourceDB: loading cache (id=2 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +08:40:41.193 RESOURCES : ResourceDB: loading cache (id=3 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_08-40-40/resourceDatabase.rdb) +08:40:41.324 ENGINE : GameProject load +08:40:41.324 ENGINE : Loaded addons: +08:40:41.324 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:40:41.324 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:40:41.325 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf' +08:40:41.325 ENGINE : No Enfusion settings file loaded. Continuing with defaults +08:40:41.325 RENDER : Basic screen setup: +08:40:41.325 RENDER : Back buffer width x height: 0x0 +08:40:41.325 RENDER : Back buffer format : TEXFMT_UNKNOWN (0) +08:40:41.325 RENDER : MSAA : none +08:40:41.325 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version +08:40:41.325 RENDER : Detected output devices: +08:40:41.325 RENDER : * 1 device/s connected to Dummy: +08:40:41.325 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz +08:40:41.325 RENDER : Concurrent frames limit 2 +08:40:41.325 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +08:40:41.337 PROFILING : Settings changed took: 0.026000 ms +08:40:41.340 ENGINE : Initializing inputs. +08:40:41.346 NETWORK : Initializing networking. +08:40:41.346 NETWORK : Using new GameRplScheduler. +08:40:41.346 SCRIPT : SCRIPT : Initializing scripts +08:40:41.346 SCRIPT : SCRIPT : ScriptProjectManager init +08:40:41.346 PROFILING : ScriptProjectManager init took: 0.010000 ms +08:40:41.362 PROFILING : Initializing scripts took: 15.461000 ms +08:40:41.362 BACKEND : Backend Services are disabled. +08:40:41.362 ENGINE : Enfusion engine successfully created. +08:40:41.364 GUI : Using default language (en_us) +08:40:41.364 GUI : Loading 'en_us' localization file. +08:40:41.364 INIT : INIT : Loading StringTable +08:40:41.385 PROFILING : Loading StringTable took: 21.243000 ms +08:40:41.385 SCRIPT : SCRIPT : Compiling GameLib scripts +08:40:41.414 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 +08:40:41.415 PROFILING : Compiling GameLib scripts took: 29.171000 ms +08:40:41.415 SCRIPT : SCRIPT : Compiling Game scripts +08:40:42.162 SCRIPT : Compiling Game scripts +08:40:42.162 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:40:42.162 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:40:42.395 SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:40:42.421 SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:40:42.606 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:40:42.606 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:40:42.607 SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:40:42.644 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:40:42.644 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:40:42.700 SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:40:42.805 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 +08:40:42.820 PROFILING : Compiling Game scripts took: 1405.522000 ms +08:40:42.820 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:40:42.838 ENGINE : Game successfully created. +08:40:42.850 PLATFORM : Save data from container 'settings' have been loaded +08:40:42.950 PLATFORM : Save data from container 'sessions' have been loaded +08:40:42.950 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''} +08:40:42.950 PLATFORM : Save data transaction to 'settings' started. +08:40:42.950 NETWORK : Starting local multiplayer server using command line args. +08:40:43.049 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{59AD59368755F41A}Missions/21_GM_Eden.conf'. +08:40:43.050 WORLD : WORLD : Entities load '$ArmaReforger:worlds/GameMaster/GM_Eden.ent' +08:40:43.658 WORLD : Entities load '$ArmaReforger:worlds/GameMaster/GM_Eden.ent' +08:40:43.658 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +08:40:43.658 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:40:43.658 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:40:43.658 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +08:40:43.660 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:40:43.660 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:40:43.660 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +08:40:43.813 PROFILING : Entities load took: 763.523000 ms +08:40:43.814 WORLD : WORLD : Game::LoadEntities +08:40:43.814 WORLD : WORLD : Initializing world systems @"{8DDC2A311929D52F}Configs/Systems/GameMasterSystems.conf" +08:40:43.816 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:40:43.820 WORLD : WORLD : CreateEntities +08:40:43.820 WORLD : WORLD : CreateEntities +08:40:43.820 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:40:43.821 RESOURCES : Loaded mission headers from 2 addon(s)! +08:40:43.821 PROFILING : NotifyBeforeEntitiesCreated took: 0.771000 ms +08:40:43.821 WORLD : WORLD : Wait for preloading data +08:40:43.824 PROFILING : Wait for preloading data took: 3.708000 ms +08:40:43.888 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:40:43.888 PROFILING : PROFILING : Terrain load +08:40:45.098 PROFILING : Terrain load took: 1209.616000 ms +08:40:47.628 WORLD : Game::LoadEntities +08:40:47.628 WORLD : CreateEntities +08:40:47.628 WORLD : CreateEntities +08:40:47.628 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" +08:40:47.628 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:40:47.628 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:40:49.770 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +08:40:49.770 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:40:49.770 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +08:40:49.770 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +08:40:49.770 MATERIAL (E): Material file not found +08:40:49.770 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +08:40:51.097 ENTITY : Create entity @"ENTITY:2305843009213693956" ('SCR_FactionManager') at <4808.321777 63.431000 6332.958008> @"FactionManager_Editor1" +08:40:51.097 RESOURCES : GetResourceObject @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et" +08:40:51.097 WORLD : Entity prefab load @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et" +08:40:51.097 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et" +08:40:51.097 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et" +08:40:51.097 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et" +08:40:51.097 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et" +08:40:51.097 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1) +08:40:51.125 RESOURCES : GetResourceObject @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et" +08:40:51.125 WORLD : Entity prefab load @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et" +08:40:51.125 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et" +08:40:51.125 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et" +08:40:51.125 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73) +08:40:51.125 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033) +08:40:51.126 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et" +08:40:51.126 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et" +08:40:51.126 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et" +08:40:51.126 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et" +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696) +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d) +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49) +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216) +08:40:51.426 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:40:51.426 PROFILING : NotifyBeforeEntitiesInitialized took: 0.029000 ms +08:40:51.426 WORLD : InitEntities 'world' +08:40:51.426 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +08:40:51.426 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +08:40:51.958 WORLD : WORLD : NotifyEntitiesInitialized +08:40:51.958 TERRAIN : TERRAIN : Initializing road networks... +08:40:51.960 PROFILING : Initializing road networks... took: 2.090000 ms +08:40:51.960 DEFAULT : DEFAULT : WorldVolumesCollection +08:40:52.021 PROFILING : WorldVolumesCollection took: 60.935000 ms +08:40:52.021 INIT : INIT : SoundWorldInit +08:40:52.028 PROFILING : SoundWorldInit took: 6.625000 ms +08:40:52.028 PROFILING : NotifyEntitiesInitialized took: 69.886000 ms +08:40:52.028 PROFILING : CreateEntities took: 8207.920000 ms +08:40:52.028 PROFILING : CreateEntities took: 8207.927000 ms +08:40:52.028 WORLD : WORLD : EOnActivate +08:40:52.059 PROFILING : EOnActivate took: 30.935000 ms +08:40:52.059 PROFILING : Game::LoadEntities took: 8244.411000 ms +08:40:52.181 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false +08:40:52.653 DEFAULT : Entered online game state. +08:40:52.653 PROFILING : Settings changed took: 0.377000 ms +08:40:52.667 WORLD : Frame start +08:40:52.667 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:40:52.674 WORLD : UpdateEntities +08:40:52.674 WORLD : Frame +08:40:52.674 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:40:53.147 RESOURCES (E): Failed to load '' +08:40:53.279 RESOURCES (E): Failed to load '' +08:40:53.280 RESOURCES (E): Failed to load '' +08:40:53.282 RESOURCES (E): Failed to load '' +08:40:53.286 RESOURCES (E): Failed to load '' +08:40:53.289 RESOURCES (E): Failed to load '' +08:40:53.289 RESOURCES (E): Failed to load '' +08:40:53.292 RESOURCES (E): Failed to load '' +08:40:53.298 RESOURCES (E): Failed to load '' +08:40:53.298 RESOURCES (E): Failed to load '' +08:40:57.674 WORLD : UpdateEntities +08:40:57.674 WORLD : Frame +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) +08:41:02.707 WORLD : UpdateEntities +08:41:02.707 WORLD : Frame +08:41:02.707 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.5 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) +08:41:07.707 WORLD : UpdateEntities +08:41:07.707 WORLD : Frame +08:41:07.707 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.3 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) +08:41:12.741 WORLD : UpdateEntities +08:41:12.741 WORLD : Frame +08:41:12.741 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.8 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) +08:41:17.774 WORLD : UpdateEntities +08:41:17.774 WORLD : Frame +08:41:17.774 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.4 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) +08:41:22.807 WORLD : UpdateEntities +08:41:22.807 WORLD : Frame +08:41:22.807 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 30.7 ms, max: 35.4 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) +08:41:27.807 WORLD : UpdateEntities +08:41:27.807 WORLD : Frame +08:41:27.807 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.5 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) +08:41:32.840 WORLD : UpdateEntities +08:41:32.840 WORLD : Frame +08:41:32.840 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.2 ms, max: 35.3 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) +08:41:37.873 WORLD : UpdateEntities +08:41:37.873 WORLD : Frame +08:41:37.873 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.8 ms, max: 34.6 ms, mean: 33.3 ms, median: 33.5 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) +08:41:42.907 WORLD : UpdateEntities +08:41:42.907 WORLD : Frame +08:41:42.907 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: 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) +08:41:47.940 WORLD : UpdateEntities +08:41:47.940 WORLD : Frame +08:41:47.940 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 34.8 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) +08:41:52.941 WORLD : UpdateEntities +08:41:52.941 WORLD : Frame +08:41:52.941 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.2 ms, max: 35.7 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) +08:41:57.973 WORLD : UpdateEntities +08:41:57.973 WORLD : Frame +08:41:57.973 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.6 ms, max: 35.0 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) +08:42:02.973 WORLD : UpdateEntities +08:42:02.973 WORLD : Frame +08:42:02.973 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.9 ms, max: 34.2 ms, mean: 33.3 ms, median: 33.5 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) +08:42:07.973 WORLD : UpdateEntities +08:42:07.973 WORLD : Frame +08:42:07.973 DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.2 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) diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/error.log b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/error.log new file mode 100644 index 0000000..8b59389 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/error.log @@ -0,0 +1,73 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_08-40-40/error.log started at 2026-09-19 08:40:42 (2026-09-19 06:40:42 UTC) + +08:40:42.162 SCRIPT : Compiling Game scripts +08:40:42.162 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:40:42.162 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:40:42.395 SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:40:42.421 SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:40:42.606 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:40:42.606 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:40:42.607 SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:40:42.644 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:40:42.644 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:40:42.700 SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:40:43.658 WORLD : Entities load '$ArmaReforger:worlds/GameMaster/GM_Eden.ent' +08:40:43.658 WORLD : Subscene load @"{853E92315D1D9EFE}worlds/Eden/Eden.ent" +08:40:43.658 RESOURCES : GetResourceObject @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:40:43.658 WORLD : Entity prefab load @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:40:43.658 RESOURCES (E): Wrong GUID/name for resource @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" in property "AssignedMaterial" +08:40:43.660 RESOURCES : GetResourceObject @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:40:43.660 WORLD : Entity prefab load @"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et" +08:40:43.660 RESOURCES (E): Wrong GUID/name for resource @"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob" in property "Object" +08:40:47.628 WORLD : Game::LoadEntities +08:40:47.628 WORLD : CreateEntities +08:40:47.628 WORLD : CreateEntities +08:40:47.628 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" +08:40:47.628 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:40:47.628 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:40:49.770 ENTITY : Create entity @"ENTITY:1104061" ('StaticModelEntity') at <8831.291016 95.934265 2673.487061> +08:40:49.770 ENTITY : EntityPrefabUse @"{C8FAB83670BCF7C3}Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et" +08:40:49.770 RESOURCES : CreateComponentData @"{904345715F67BBAC}Assets/Structures/Cultural/Calvaries/CalvaryLarge_01/CalvaryLarge_01.xob" +08:40:49.770 MATERIAL : Material load @"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat" +08:40:49.770 MATERIAL (E): Material file not found +08:40:49.770 MATERIAL (E): Cannot load material @"system/wbdata/PreviewWindow/TransparentMat.emat", creating default one (class MatPBRBasic) +08:40:51.097 ENTITY : Create entity @"ENTITY:2305843009213693956" ('SCR_FactionManager') at <4808.321777 63.431000 6332.958008> @"FactionManager_Editor1" +08:40:51.097 RESOURCES : GetResourceObject @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et" +08:40:51.097 WORLD : Entity prefab load @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et" +08:40:51.097 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et" +08:40:51.097 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et" +08:40:51.097 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et" +08:40:51.097 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et" +08:40:51.097 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1) +08:40:51.125 RESOURCES : GetResourceObject @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et" +08:40:51.125 WORLD : Entity prefab load @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et" +08:40:51.125 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et" +08:40:51.125 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et" +08:40:51.125 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73) +08:40:51.125 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033) +08:40:51.126 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et" +08:40:51.126 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et" +08:40:51.126 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et" +08:40:51.126 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et" +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696) +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d) +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49) +08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216) +08:40:51.426 WORLD : InitEntities 'world' +08:40:51.426 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et" +08:40:51.426 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +08:40:53.147 RESOURCES (E): Failed to load '' +08:40:53.279 RESOURCES (E): Failed to load '' +08:40:53.280 RESOURCES (E): Failed to load '' +08:40:53.282 RESOURCES (E): Failed to load '' +08:40:53.286 RESOURCES (E): Failed to load '' +08:40:53.289 RESOURCES (E): Failed to load '' +08:40:53.289 RESOURCES (E): Failed to load '' +08:40:53.292 RESOURCES (E): Failed to load '' +08:40:53.298 RESOURCES (E): Failed to load '' +08:40:53.298 RESOURCES (E): Failed to load '' diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/script.log b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/script.log new file mode 100644 index 0000000..7b89a57 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/logs/logs_2026-09-19_08-40-40/script.log @@ -0,0 +1,27 @@ +--------------------------------------------- +Log /tmp/work/profile/logs/logs_2026-09-19_08-40-40/script.log started at 2026-09-19 08:40:41 (2026-09-19 06:40:41 UTC) + +08:40:41.346 SCRIPT : SCRIPT : Initializing scripts +08:40:41.346 SCRIPT : SCRIPT : ScriptProjectManager init +08:40:41.385 SCRIPT : SCRIPT : Compiling GameLib scripts +08:40:41.414 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 +08:40:41.415 SCRIPT : SCRIPT : Compiling Game scripts +08:40:42.162 SCRIPT : Compiling Game scripts +08:40:42.162 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:40:42.162 SCRIPT (W): @"scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:40:42.395 SCRIPT (W): @"scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:40:42.421 SCRIPT (W): @"scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:40:42.521 SCRIPT (W): @"scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:40:42.606 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:40:42.606 SCRIPT (W): @"scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:40:42.607 SCRIPT (W): @"scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:40:42.644 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:40:42.644 SCRIPT (W): @"scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:40:42.700 SCRIPT (W): @"scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:40:42.805 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 +08:40:51.426 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default. +08:40:52.667 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:40:52.674 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/profile/.save/settings/ReforgerEngineSettings.conf b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/profile/.save/settings/ReforgerEngineSettings.conf new file mode 100644 index 0000000..84d67fd --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/profile/.save/settings/ReforgerEngineSettings.conf @@ -0,0 +1,96 @@ +EngineUserSettings { + GameProjectUserSettings GameProjectUserSettings { + } + GraphicsQualitySettings GraphicsQualitySettings { + } + GrassMaterialSettings GrassMaterialSettings { + } + InputDeviceUserSettings InputDeviceUserSettings { + GamepadProfile InputProfileGamepad "{6A666A2849B2E12B}" { + LeftThumbHorizontal InputProfileKey "{6A666A2849B2E12A}" { + Transition CurveCubicSplineFloat "{6A666A2849B2E129}" { + } + } + LeftThumbVertical InputProfileKey "{6A666A2849B2E128}" { + Transition CurveCubicSplineFloat "{6A666A2849B2E127}" { + } + } + RightThumbHorizontal InputProfileKey "{6A666A2849B33724}" { + Transition CurveCubicSplineFloat "{6A666A2849B345E2}" { + } + } + RightThumbVertical InputProfileKey "{6A666A2849B3B9BC}" { + Transition CurveCubicSplineFloat "{6A666A2849AC282A}" { + } + } + LeftTrigger InputProfileKey "{6A666A2849AC282B}" { + Transition CurveCubicSplineFloat "{6A666A2849ACAA34}" { + } + } + RightTrigger InputProfileKey "{6A666A2849ACB3B9}" { + Transition CurveCubicSplineFloat "{6A666A2849ACB3BA}" { + } + } + } + JoystickProfile InputProfileJoystick "{6A666A2849ACF765}" { + Axis00 InputProfileKey "{6A666A2849ACF77C}" { + Transition CurveCubicSplineFloat "{6A666A2849AD1212}" { + } + } + Axis01 InputProfileKey "{6A666A2849AD41F4}" { + Transition CurveCubicSplineFloat "{6A666A2849AD41F3}" { + } + } + Axis02 InputProfileKey "{6A666A2849AD9081}" { + Transition CurveCubicSplineFloat "{6A666A2849ADF204}" { + } + } + Axis03 InputProfileKey "{6A666A2849AE2B72}" { + Transition CurveCubicSplineFloat "{6A666A2849AE2B73}" { + } + } + Axis04 InputProfileKey "{6A666A2849AE1A4D}" { + Transition CurveCubicSplineFloat "{6A666A2849AE4F09}" { + } + } + Axis05 InputProfileKey "{6A666A2849AE8BFE}" { + Transition CurveCubicSplineFloat "{6A666A2849AED3D5}" { + } + } + Axis06 InputProfileKey "{6A666A2849AF03EA}" { + Transition CurveCubicSplineFloat "{6A666A2849AF59D4}" { + } + } + Axis07 InputProfileKey "{6A666A2849AF8532}" { + Transition CurveCubicSplineFloat "{6A666A2849AF8531}" { + } + } + Axis08 InputProfileKey "{6A666A2849AF8507}" { + Transition CurveCubicSplineFloat "{6A666A2849AFF2E9}" { + } + } + Axis09 InputProfileKey "{6A666A2849AFD009}" { + Transition CurveCubicSplineFloat "{6A666A2849A82909}" { + } + } + } + } + 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-084040-vanilla/profile/profile/.save/settings/ReforgerGameSettings.conf b/docs/evidence/dedicated-2026-09-19-084040-vanilla/profile/profile/.save/settings/ReforgerGameSettings.conf new file mode 100644 index 0000000..c7eec71 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/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-084040-vanilla/result.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/result.json new file mode 100644 index 0000000..4d431ca --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/result.json @@ -0,0 +1,109 @@ +{ + "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-native-build/attempt-03-vanilla-everon/source", + "/tmp/source", + "--bind", + "/tmp/erri-dedicated-native-build/attempt-03-vanilla-everon", + "/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", + "-server", + "Missions/21_GM_Eden.conf" + ], + "engine": [ + "/tmp/runtime/ArmaReforgerServer", + "-profile", + "/tmp/work/profile", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-bindIP", + "127.0.0.1", + "-bindPort", + "2001", + "-maxFPS", + "30", + "-logStats", + "5000", + "-server", + "Missions/21_GM_Eden.conf" + ], + "seconds": 90, + "binarySHA256": "91fdf333ec49c266d309be358aabab4244a93a2f9cfa11853a600e026104001f", + "serverLaunched": true, + "realPlayers": 0, + "multiplayerProven": false, + "scope": "vanilla Everon control; no successor loaded", + "supervisorPid": 2192792, + "startedUTC": "2026-09-19T06:40:40Z", + "timeout": true, + "exit": -15, + "finishedUTC": "2026-09-19T06:42:10Z" +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/review.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/review.json new file mode 100644 index 0000000..4facf7b --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/review.json @@ -0,0 +1,30 @@ +{ + "scriptErrors": [], + "allNativeErrors": [ + "08:40:43.658 RESOURCES (E): Wrong GUID/name for resource @\"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\" in property \"AssignedMaterial\"", + "08:40:43.660 RESOURCES (E): Wrong GUID/name for resource @\"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\" in property \"Object\"", + "08:40:49.770 MATERIAL (E): Material file not found", + "08:40:49.770 MATERIAL (E): Cannot load material @\"system/wbdata/PreviewWindow/TransparentMat.emat\", creating default one (class MatPBRBasic)", + "08:40:51.097 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)", + "08:40:51.125 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)", + "08:40:51.125 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)", + "08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)", + "08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)", + "08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)", + "08:40:51.126 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)", + "08:40:53.147 RESOURCES (E): Failed to load ''", + "08:40:53.279 RESOURCES (E): Failed to load ''", + "08:40:53.280 RESOURCES (E): Failed to load ''", + "08:40:53.282 RESOURCES (E): Failed to load ''", + "08:40:53.286 RESOURCES (E): Failed to load ''", + "08:40:53.289 RESOURCES (E): Failed to load ''", + "08:40:53.289 RESOURCES (E): Failed to load ''", + "08:40:53.292 RESOURCES (E): Failed to load ''", + "08:40:53.298 RESOURCES (E): Failed to load ''", + "08:40:53.298 RESOURCES (E): Failed to load ''" + ], + "sameOriginalErrorMessages": 4, + "sourceChanged": false, + "successorAddonLoaded": false, + "scope": "vanilla-only control; no gameplay/multiplayer acceptance" +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/runner.py b/docs/evidence/dedicated-2026-09-19-084040-vanilla/runner.py new file mode 100644 index 0000000..b7793cf --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/runner.py @@ -0,0 +1,139 @@ +#!/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'] + + +def engine_args(route): + 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'] + 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'] + + +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('--seconds', type=int, default=90) + args = parser.parse_args() + 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)[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) + record = {'command': command, 'engine': engine_args(args.route), 'seconds':args.seconds, + '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'} + (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-084040-vanilla/source-manifest-after.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest-after.json new file mode 100644 index 0000000..17402f1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest-after.json @@ -0,0 +1,279 @@ +{ + ".gitattributes": "86cd7c797b8cac2699f5959add72303d5474f34fb0d141c36e6d8d095f7bc718", + ".gitignore": "1647a8de89a13712bdb3678396c3d09b268e90e99b17bd56a1462eef7efd00d1", + "README.md": "557ecb725cb83911cba20c285624bc2f7cd527932407f87844f824e12821524d", + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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/ai/resourceDatabase.rdb": "129c2d601531447ffd1864982af3f9fec03ed64db23623d44e29115c0c1998c2", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/chat/resourceDatabase.rdb": "d9a737a8d09f9fced6b1e7fe108e477c0fc9877ad044f3c5be0aaa7c60b0056e", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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/core/resourceDatabase.rdb": "5765206693e176009ad2d37e0d46141ff57fec2348ea6331ed9511433eb001cb", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "addons/map/resourceDatabase.rdb": "fe2d3eea469f3a69dcdb8567a7bb8119dcc03f940b423ad0babfc3b84e5cb0da", + "docs/acceptance.json": "283f08dc1658d214d3551d8b22f3a1d179fbb95f9d85cfbe63015adffc3b365d", + "docs/addons.json": "be6097ca5fb6ccb8c17bf4c05849e3e75225473162cdffef18a1cad13d056186", + "docs/admin-discovery-setting.md": "a140f09cd1f27635824a9fa27e88e99259fc0030ff3228dd1376e2e949edbc1c", + "docs/architecture.md": "6d7b52d5456b8fcd396421a7d8ed04be01c9111dabf38fa3e42b5db5fe4dce72", + "docs/base-gameplay-gaps.md": "8fb9ce4bf3d36507fdcd03af9681657c473bdf1f1d188380e7e4a83d47b10625", + "docs/base-replacement.md": "e99b648932b784e2993d086d6f56176fda5d853f53a4363cbf4754774cd8afec", + "docs/casualty-ground-source-sha256.json": "90ffa7d0c61e3823922ca9d4773e3d12fd5e9a1760a35c3b29fd12a53642f83a", + "docs/casualty-ground-support.md": "bf5bdf19f9dfa0fb83dfdb9a9933e5cf6a63be3918f74953759a639f85f121e4", + "docs/casualty-incapacitation.md": "2811fa294de0348fbdf8e78b0c66bc31a59dd8f1e43fe16af8da87cb7e789820", + "docs/casualty-loading.md": "9970b46ae4b9d0247e6bfad8378bba33c237f16cb49a4f53da49706291872b18", + "docs/casualty-remove-source-sha256.json": "4799a5843315fe5b5b2e933e8068a8b4bae6d924a49438eccb7f68ffc8e12be9", + "docs/configuration.md": "654657c3c6a515d101e4f43dba74a2146358a8ead56aa5444cac4aec48177bf5", + "docs/current-status.md": "b1003d1b7c0167304b694b50e31b851cdf763f986885c593a3426f369ae2dfa9", + "docs/dependency-audit.json": "d5e6cbcdc59c0a25e5748c590d6a195da9c97e8296119e07185f4c360bdfc4ae", + "docs/environment-restart-fixture.md": "1c1bd3872a67c5a59c12c1293d075d52fe0b563fcd5e9e10a1ce1850c7efcea9", + "docs/environment.md": "eff60684482ca8332e6ac4909850b6acd1048a5518ac70ae121dd16afb1a4409", + "docs/extraction.md": "215c96cbc004b3817a70ee40f30b181a72e78123e69e16a3585ed4d8d566837d", + "docs/faction-catalog-source-hashes.json": "46060bf2bfe6c39517e3140acb004f9b129c26695a7ee890b4aae571b3f0da76", + "docs/finite-mortar-operations.md": "e3d230810bd42a02afc798639ea36f08fe0dcc45d73d14457cf37e7791d499f3", + "docs/ground-transport.md": "4ef0b23e1e752b807344100948e7d0f880448158292f96309dcec5de9583a1a0", + "docs/guard-cancellation-fix.md": "41f8bd169de714df4df4a61189d47a37f9be2f1b1554edc99c29d8a1fa4aaf19", + "docs/guard-cancellation-source-hashes.json": "a1bf169c021931cdcba835d52e420df44e5dd2ef351257f0be10f63c8727afd4", + "docs/guard-source-hashes.json": "874845def1458901d61adeb090a464bbee7c7b18816406ae3780ff48fe855266", + "docs/initial-extraction-placement-source-sha256.json": "a44a32cedc54a70f635bf5840e7b29d35850a2212fcf64b1fd36ca096f10fffa", + "docs/initial-extraction-placement.md": "643b50d231dd9ceb49b81fd8f061cd114a9618fd1ad5a6f88724c0199a5a304c", + "docs/initial-guard-readiness.md": "5f2b45f3744f1f0316f198225a34e25d93eb4795bb05d6cfded8de1f1a116c18", + "docs/inventory-identity.md": "02092960cf937b175c5a190b426b84e0383104fa71f324c8b3a0ceb4fbe01164", + "docs/local-singleplayer-admission.md": "79943060c67330bd0b386733306653b59b1cb92c0924ff3bb0ffd3b582bec70a", + "docs/medical-kit-teardown-ownership.md": "2116a4062425f6fba029142ea0239264d313ec52f69ec7f88ee7b250a90814bf", + "docs/migration-provenance.json": "3f0ab1e9d1314265a7cdea3535a9e81af441c1b7a5c9c925e84aa824a1730663", + "docs/migration.md": "42514af2fbef0663d05f3353a26f3b2fcd4f7359634652d23fda53a8e7bfcd0f", + "docs/mission-faction-catalogs.md": "2ce3e49404d103a4c372ab0386de3bcf831bee87d95b1092372345a3d32ef8d2", + "docs/mission-time.md": "29d9a18c7acef0587764becbd04c2c63684644a05c7b3b2fe77defe1881ae7a0", + "docs/mortar-transactions-source-sha256.json": "dabad1cbc6eb3dd6f66b3e9ece574edcabff94adceeb2494b1adb2147608dbc0", + "docs/native-casualty-remove.md": "d55f54fba75e6cd1b9c30b489db17d58aa708afed792d1eafcf33d6d43c55e76", + "docs/native-errors.md": "f0cbc674803f5254db0c823bce2df437cad121756e19f6c658087d5d2fddb349", + "docs/native-followup-snapshot.json": "6b686ee641830edbc223cfcee4d6a198fcfa36ce8531bb16855fa9cbe9f5cbd2", + "docs/native-guard-cancellation.md": "880b545b8451a86f16ef47e0a378d081c8fecb1175bf9a8a122bf853ff9b816c", + "docs/native-initial-snapshot.json": "1ba571aa6da7c72d3db3eaaac54f5399820603ac33d7b21b87946eee3aa4eaf3", + "docs/native-medical-fixture.md": "3c915a74afbcac1dfa45f0c1e9d8d4801f33704cac9ce1b66355121805ecfbb1", + "docs/native-mortar-firing.md": "5fd4a5a4059ea6f8a3fa353b16c8f507316689daa60a883387c20114c4c16892", + "docs/objective-widget-lifecycle.md": "3ec0ee8c74b2a3117356477a16125a077dfbf010050e53280a00769b710958a0", + "docs/ordinary-diagnostic-splash.md": "6e07a87a03df81dd5c9d6c0f9602b26e08ec7fd7cf941b91f2b8007bd9d33e6a", + "docs/ordinary-game-startup.md": "6a95a55aa5fbccbe9a54fd7c695929d392f30bf2ce0c9f509304cfc4b627e14e", + "docs/ordinary-identity-diagnostics.md": "6d5017ff1bf27a276208cc42d567ab2c9f0e8936bf7dca3156c649f67eca359b", + "docs/ordinary-launch-callback-fix.md": "b74b8d0d011f25c367ea07b37e1a5ef488a2b378542ddca63ff9e981e649b874", + "docs/ordinary-splash-source-hashes.json": "b2e277e3487c2b790bce741527555bb74f6b9820b9e5626950ab709533d9fa97", + "docs/original-feature-coverage.json": "27cc7d2934abb3d307a4cfc0fb1f10ac53611bef64dcca99aa939f68c842e98a", + "docs/original-feature-coverage.md": "2807936a75db548342e4f89c01795395038270a6793aafe15c6069c82537c30a", + "docs/original-resource-inventory.json": "bc52a981c42f933134e637a027d08a0924abb19784782731590b7ef0b0e2e73f", + "docs/performance-comparison.md": "8065fae91ef0ef572b06f9aba079bd9f6ab96b25fa8c63e7a4a30b34f77765a0", + "docs/player-lifecycle.md": "903302c21da86668d6a3ff78a11d5eb2a5c36c30062f65a2039df717c195a140", + "docs/prisoner-loadout.md": "0b27f5fce4af457bea7133e461dbc37d8fa73fe126c8c3de90d723b358af389a", + "docs/radio-defence.md": "845078af4648e21781357b263916ce351e38489e4f49ebf17fb0bc75d7a859ff", + "docs/radio-document-loss.md": "44ce397e471b2fa5d8b773379f475e2c4cb93b33b936a76919e64e15251c2b9d", + "docs/radio-feedback.md": "3aaaecb318e2f737321bd08f9deb9323af153f2ae9ed196b55104c0616dd2be8", + "docs/recovery.md": "a91e170b0ea164f50db64acc1f19b78a6dce9392736f194a9192e85c68a71a88", + "docs/release-qualification.md": "7bdf42f51fe3a4c1d6187d0e6f5248ac9a68ce16873281909bd96e1cea6c406b", + "docs/runtime-testing.md": "2db2fc790785633e701e503e087a8a9de8633a11ed8f1b4f9f22972506005524", + "docs/site-authoring.md": "7a2e66e75ca3fdab43bd730f16e864c31909ab42fe060b00715caa13b8352ce7", + "docs/site-patrols.md": "5956f70a5ebea4167819a43c2a15f8b6d6460bc724b000f989d5ad5265d48d56", + "docs/validation.md": "48206348ef58afe52daf5dc8dca4aa65beaf00086aabfc995c808b5b0e8233fa", + "docs/vanilla-resources.json": "a18dbb7683641c439418091530219fd3d4de65b14e8a139577411c2a020a9903", + "tests/helicopter_availability_regression.py": "b8eabe0646467d6b55b7bc08c75121185410d3460c2c951f70737a5decbbfefe", + "tests/hq_network_regression.py": "3b077e1c527029d60432cbe2e0373c3a4a55ed4e80d6be59e639de8bc9411188", + "tests/mortar_salvo_regression.py": "6624f57ac28aabadd3ae2ba96b802910ffe739786d9aca0ad1caea68ad08eb5b", + "tests/policy_harness.py": "e861c30037b3e456f0c8ef1c02e9fe1417b601ffb15d2037974715008865e4be", + "tests/test_admin_setting_policy.py": "8d8ce49f4079d930c06bf23be410eb610e30082e3177a9f88bd6a0dfbf54189d", + "tests/test_casualty_ground_policy.py": "6b6fb5dccfef32eb46f7e5fee11d28acd3068c25837d2f1474491fd139be9316", + "tests/test_casualty_incapacitation.py": "fdeee4ae5b0e383c592ecbcd132b108ed6e92cb0e1f4767da02f95bfa33b7a4a", + "tests/test_casualty_loading_policy.py": "3a85d86dd1b19aa616fafb5d3a38f5374d5bb14d176844210150ef95df62033a", + "tests/test_casualty_remove_probe.py": "61578d8ca863d5e5be32dab2661fdd410e8441eaf1a9ae3b5123906eb3d57a68", + "tests/test_casualty_reservation_death.py": "dd5abb0ca2e7ec289f6933c406517515475d34ffeea95d732c329b42080773b7", + "tests/test_diagnostic_no_splash.py": "a9f54ced5864953c8031208d519c2dec9d604a70ad65bc738b51c6656a8aab22", + "tests/test_environment_policy.py": "4f844728d47ab3ad66c8a06f37833e0325f00bd04c0803d7dcf0eed14d8935c3", + "tests/test_environment_restart_runner.py": "05bc09bc45db70ba4a635b65b0a96aa38437ba50c98640b47ed8d0683c3a5f71", + "tests/test_extraction_placement_policy.py": "4cef86ff87338bc2e0bf66683c78050f3ba49d940d0c221a89333f4cb61a2442", + "tests/test_faction_catalog_scope.py": "c8fab92575f2621f47ed8685243338aa9ea717bb809c2ef9e8e0884af9df263b", + "tests/test_guard_cancellation_policy.py": "4a0671c62a5d875c0839d7cd9bdb0703cc28172ae6a3b483e041ec299b02efb1", + "tests/test_headless_game_runner.py": "29f045b65dbcb53f06359daa1ed7e981351517f9b08d0287da828eb1f8b4212a", + "tests/test_initial_guard_policy.py": "11354597457a240ec0427481ec0626cb952fbf06995a2955c24e81a5054edb5f", + "tests/test_inventory_enumeration_policy.py": "1a13ab9d7fdce46589a30ba005d65bada02a5a997f3fdb4dff025aec5514f802", + "tests/test_local_admission.py": "8ef122042a6c0c2258b1269e78606443546760ffdba6177c4f68f73769006e57", + "tests/test_mission_rules.py": "1561f50ea52a38227503ea3b5b2394a9303f82d9cea00268fbbe8fe83deb4b5b", + "tests/test_mortar_transactions.py": "3a17d444c1083336b52cb329fabaa1b9de7105cbe048e12b2d430600cc5bbcd1", + "tests/test_native_mortar_probe.py": "327f4c5ac1be24397c6c88c6b77d8889ae84d3b66c26caaeb400c1b2f373de5c", + "tests/test_performance_comparison.py": "5f932de9e9898acdd379f26c777a35c884269522dbf8c41991a7a25bf61c369a", + "tests/test_player_admission_policy.py": "9298c7f5f4b1da466ed044326e87f1b3ed6c7dc6fc65e8915ec08086fbc501e3", + "tests/test_prison_placement_policy.py": "269d8875e4a634bb0049acea644795ce6e58f335363d8e86ae1dae934d2ae28e", + "tests/test_radio_defence_policy.py": "9fd3c348d69c8c4e61c1135bb7e5df1b2b0ef07a2a5ad4faff1611d7b8e98097", + "tests/test_radio_feedback_policy.py": "d91c39d8291a16cfa5bb5fc5c7365a7421a7ce9f855a0b0250b76c2cb7cd1369", + "tests/test_recovery_policy.py": "e50879d0e2728f8ede3b67015d05bad5e34590dfdf315575b799adab1e23e186", + "tests/test_release_check.py": "8b6e755ed922ad129ba01c228989610a31f3a79841dc7cdddd4ddbd0e510971b", + "tests/test_settings_migration.py": "59fe9cd5f4564a6747a9a00fa422453830c6f94f6f1ba785d0592ef6feefe158", + "tests/test_site_discovery_policy.py": "79ccc06b74c05210428d602b4e22de1579523b163d5ab9ed2d52a29bed484896", + "tests/test_time_policy.py": "32c468c0a8852b7dfb873a93da80295434530131629eaca365a9c4aa9398c63a", + "tools/archive_native.py": "a302bd080275b72fbc47fa8108a98fb2689a377cbeb3cfe6e73596726bdab0bb", + "tools/check.py": "7460a22cf17fc9562fce73862c1b0791c830f2a8f25878626457618801599702", + "tools/compare_performance.py": "568acfee2525b8924f3e7a39784e8641f76d63bb3703dcce8251ab9ac9bb1854", + "tools/desktop/kwin-right-monitor.js": "8f0cf9ad290edf02e5f623cf1b0e36e2b266153ff81a022233c4cf67818b9499", + "tools/headless_game.py": "18ea1259e7f35121a7628edddecf5683ad49a1199f90f45ecdd7adbd120ca589", + "tools/headless_workbench.py": "7599cca63d7cad61201d7597ccb6776e3f8c681d1d7566b8d8261b35e3d8de69", + "tools/import_settings.py": "d9c250b52b6d29be3a80c3404f048b65a0b9b99e93b5213d5ce2be7d90a37324", + "tools/native_command.py": "4828826aa70b5ac31ab77157e658a8a3998de2829cdf782b8eee5b8c566d0385", + "tools/native_provenance.py": "d4777f1f6ffed6993f7009ee2af41b100e8e0138d60ebfdcc5404ff2128f8e2a", + "tools/native_report.py": "bb75ef5fe551f45776d441f15a49ccad4daf19abca505187f9b2d30102538658", + "tools/reference_guard.py": "545b67111927d73bf2020f291528ea6f2f687a994b3e37bf567f239c32c8cd78", + "tools/release_check.py": "65df1bff33638a583905ba5f6c583a095b9f7e38186b6f29d70b72a61525589e", + "tools/source_manifest.py": "c1a985348bad16f3b5b69ef7e545b6341eca298d8ae08111b8340b31535cc199" +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest.json b/docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest.json new file mode 100644 index 0000000..17402f1 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/source-manifest.json @@ -0,0 +1,279 @@ +{ + ".gitattributes": "86cd7c797b8cac2699f5959add72303d5474f34fb0d141c36e6d8d095f7bc718", + ".gitignore": "1647a8de89a13712bdb3678396c3d09b268e90e99b17bd56a1462eef7efd00d1", + "README.md": "557ecb725cb83911cba20c285624bc2f7cd527932407f87844f824e12821524d", + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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/ai/resourceDatabase.rdb": "129c2d601531447ffd1864982af3f9fec03ed64db23623d44e29115c0c1998c2", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "addons/chat/Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e", + "addons/chat/Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94", + "addons/chat/addon.gproj": "ea1587e0174cf795334d306c71d99b06797fc891427cd57b6cab6e21cf0e4e0e", + "addons/chat/resourceDatabase.rdb": "d9a737a8d09f9fced6b1e7fe108e477c0fc9877ad044f3c5be0aaa7c60b0056e", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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/core/resourceDatabase.rdb": "5765206693e176009ad2d37e0d46141ff57fec2348ea6331ed9511433eb001cb", + "addons/intel/Scripts/Game/ERR/ERR_IntelService.c": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "addons/intel/addon.gproj": "d0ced242cefb220a5cccd6779d61fda9bc55581701b9f78bcf13c09d92ddbcbe", + "addons/intel/resourceDatabase.rdb": "062996b9102e99d19eb680bed04880b0e087d9f8789681c0f3ff8ab6772339ba", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2", + "addons/map/UI/layouts/ERRMap/SharedMapRenderTarget.layout.meta": "5c846445cc089e2e08899ba703059d4adb805ff30ab5a16409a3cd59718cbd54", + "addons/map/addon.gproj": "1b371e5e01ea9fa46e76570fecb8aaa3a9298e34cba7ccca8a6bdb5ca86eb46a", + "addons/map/resourceDatabase.rdb": "fe2d3eea469f3a69dcdb8567a7bb8119dcc03f940b423ad0babfc3b84e5cb0da", + "docs/acceptance.json": "283f08dc1658d214d3551d8b22f3a1d179fbb95f9d85cfbe63015adffc3b365d", + "docs/addons.json": "be6097ca5fb6ccb8c17bf4c05849e3e75225473162cdffef18a1cad13d056186", + "docs/admin-discovery-setting.md": "a140f09cd1f27635824a9fa27e88e99259fc0030ff3228dd1376e2e949edbc1c", + "docs/architecture.md": "6d7b52d5456b8fcd396421a7d8ed04be01c9111dabf38fa3e42b5db5fe4dce72", + "docs/base-gameplay-gaps.md": "8fb9ce4bf3d36507fdcd03af9681657c473bdf1f1d188380e7e4a83d47b10625", + "docs/base-replacement.md": "e99b648932b784e2993d086d6f56176fda5d853f53a4363cbf4754774cd8afec", + "docs/casualty-ground-source-sha256.json": "90ffa7d0c61e3823922ca9d4773e3d12fd5e9a1760a35c3b29fd12a53642f83a", + "docs/casualty-ground-support.md": "bf5bdf19f9dfa0fb83dfdb9a9933e5cf6a63be3918f74953759a639f85f121e4", + "docs/casualty-incapacitation.md": "2811fa294de0348fbdf8e78b0c66bc31a59dd8f1e43fe16af8da87cb7e789820", + "docs/casualty-loading.md": "9970b46ae4b9d0247e6bfad8378bba33c237f16cb49a4f53da49706291872b18", + "docs/casualty-remove-source-sha256.json": "4799a5843315fe5b5b2e933e8068a8b4bae6d924a49438eccb7f68ffc8e12be9", + "docs/configuration.md": "654657c3c6a515d101e4f43dba74a2146358a8ead56aa5444cac4aec48177bf5", + "docs/current-status.md": "b1003d1b7c0167304b694b50e31b851cdf763f986885c593a3426f369ae2dfa9", + "docs/dependency-audit.json": "d5e6cbcdc59c0a25e5748c590d6a195da9c97e8296119e07185f4c360bdfc4ae", + "docs/environment-restart-fixture.md": "1c1bd3872a67c5a59c12c1293d075d52fe0b563fcd5e9e10a1ce1850c7efcea9", + "docs/environment.md": "eff60684482ca8332e6ac4909850b6acd1048a5518ac70ae121dd16afb1a4409", + "docs/extraction.md": "215c96cbc004b3817a70ee40f30b181a72e78123e69e16a3585ed4d8d566837d", + "docs/faction-catalog-source-hashes.json": "46060bf2bfe6c39517e3140acb004f9b129c26695a7ee890b4aae571b3f0da76", + "docs/finite-mortar-operations.md": "e3d230810bd42a02afc798639ea36f08fe0dcc45d73d14457cf37e7791d499f3", + "docs/ground-transport.md": "4ef0b23e1e752b807344100948e7d0f880448158292f96309dcec5de9583a1a0", + "docs/guard-cancellation-fix.md": "41f8bd169de714df4df4a61189d47a37f9be2f1b1554edc99c29d8a1fa4aaf19", + "docs/guard-cancellation-source-hashes.json": "a1bf169c021931cdcba835d52e420df44e5dd2ef351257f0be10f63c8727afd4", + "docs/guard-source-hashes.json": "874845def1458901d61adeb090a464bbee7c7b18816406ae3780ff48fe855266", + "docs/initial-extraction-placement-source-sha256.json": "a44a32cedc54a70f635bf5840e7b29d35850a2212fcf64b1fd36ca096f10fffa", + "docs/initial-extraction-placement.md": "643b50d231dd9ceb49b81fd8f061cd114a9618fd1ad5a6f88724c0199a5a304c", + "docs/initial-guard-readiness.md": "5f2b45f3744f1f0316f198225a34e25d93eb4795bb05d6cfded8de1f1a116c18", + "docs/inventory-identity.md": "02092960cf937b175c5a190b426b84e0383104fa71f324c8b3a0ceb4fbe01164", + "docs/local-singleplayer-admission.md": "79943060c67330bd0b386733306653b59b1cb92c0924ff3bb0ffd3b582bec70a", + "docs/medical-kit-teardown-ownership.md": "2116a4062425f6fba029142ea0239264d313ec52f69ec7f88ee7b250a90814bf", + "docs/migration-provenance.json": "3f0ab1e9d1314265a7cdea3535a9e81af441c1b7a5c9c925e84aa824a1730663", + "docs/migration.md": "42514af2fbef0663d05f3353a26f3b2fcd4f7359634652d23fda53a8e7bfcd0f", + "docs/mission-faction-catalogs.md": "2ce3e49404d103a4c372ab0386de3bcf831bee87d95b1092372345a3d32ef8d2", + "docs/mission-time.md": "29d9a18c7acef0587764becbd04c2c63684644a05c7b3b2fe77defe1881ae7a0", + "docs/mortar-transactions-source-sha256.json": "dabad1cbc6eb3dd6f66b3e9ece574edcabff94adceeb2494b1adb2147608dbc0", + "docs/native-casualty-remove.md": "d55f54fba75e6cd1b9c30b489db17d58aa708afed792d1eafcf33d6d43c55e76", + "docs/native-errors.md": "f0cbc674803f5254db0c823bce2df437cad121756e19f6c658087d5d2fddb349", + "docs/native-followup-snapshot.json": "6b686ee641830edbc223cfcee4d6a198fcfa36ce8531bb16855fa9cbe9f5cbd2", + "docs/native-guard-cancellation.md": "880b545b8451a86f16ef47e0a378d081c8fecb1175bf9a8a122bf853ff9b816c", + "docs/native-initial-snapshot.json": "1ba571aa6da7c72d3db3eaaac54f5399820603ac33d7b21b87946eee3aa4eaf3", + "docs/native-medical-fixture.md": "3c915a74afbcac1dfa45f0c1e9d8d4801f33704cac9ce1b66355121805ecfbb1", + "docs/native-mortar-firing.md": "5fd4a5a4059ea6f8a3fa353b16c8f507316689daa60a883387c20114c4c16892", + "docs/objective-widget-lifecycle.md": "3ec0ee8c74b2a3117356477a16125a077dfbf010050e53280a00769b710958a0", + "docs/ordinary-diagnostic-splash.md": "6e07a87a03df81dd5c9d6c0f9602b26e08ec7fd7cf941b91f2b8007bd9d33e6a", + "docs/ordinary-game-startup.md": "6a95a55aa5fbccbe9a54fd7c695929d392f30bf2ce0c9f509304cfc4b627e14e", + "docs/ordinary-identity-diagnostics.md": "6d5017ff1bf27a276208cc42d567ab2c9f0e8936bf7dca3156c649f67eca359b", + "docs/ordinary-launch-callback-fix.md": "b74b8d0d011f25c367ea07b37e1a5ef488a2b378542ddca63ff9e981e649b874", + "docs/ordinary-splash-source-hashes.json": "b2e277e3487c2b790bce741527555bb74f6b9820b9e5626950ab709533d9fa97", + "docs/original-feature-coverage.json": "27cc7d2934abb3d307a4cfc0fb1f10ac53611bef64dcca99aa939f68c842e98a", + "docs/original-feature-coverage.md": "2807936a75db548342e4f89c01795395038270a6793aafe15c6069c82537c30a", + "docs/original-resource-inventory.json": "bc52a981c42f933134e637a027d08a0924abb19784782731590b7ef0b0e2e73f", + "docs/performance-comparison.md": "8065fae91ef0ef572b06f9aba079bd9f6ab96b25fa8c63e7a4a30b34f77765a0", + "docs/player-lifecycle.md": "903302c21da86668d6a3ff78a11d5eb2a5c36c30062f65a2039df717c195a140", + "docs/prisoner-loadout.md": "0b27f5fce4af457bea7133e461dbc37d8fa73fe126c8c3de90d723b358af389a", + "docs/radio-defence.md": "845078af4648e21781357b263916ce351e38489e4f49ebf17fb0bc75d7a859ff", + "docs/radio-document-loss.md": "44ce397e471b2fa5d8b773379f475e2c4cb93b33b936a76919e64e15251c2b9d", + "docs/radio-feedback.md": "3aaaecb318e2f737321bd08f9deb9323af153f2ae9ed196b55104c0616dd2be8", + "docs/recovery.md": "a91e170b0ea164f50db64acc1f19b78a6dce9392736f194a9192e85c68a71a88", + "docs/release-qualification.md": "7bdf42f51fe3a4c1d6187d0e6f5248ac9a68ce16873281909bd96e1cea6c406b", + "docs/runtime-testing.md": "2db2fc790785633e701e503e087a8a9de8633a11ed8f1b4f9f22972506005524", + "docs/site-authoring.md": "7a2e66e75ca3fdab43bd730f16e864c31909ab42fe060b00715caa13b8352ce7", + "docs/site-patrols.md": "5956f70a5ebea4167819a43c2a15f8b6d6460bc724b000f989d5ad5265d48d56", + "docs/validation.md": "48206348ef58afe52daf5dc8dca4aa65beaf00086aabfc995c808b5b0e8233fa", + "docs/vanilla-resources.json": "a18dbb7683641c439418091530219fd3d4de65b14e8a139577411c2a020a9903", + "tests/helicopter_availability_regression.py": "b8eabe0646467d6b55b7bc08c75121185410d3460c2c951f70737a5decbbfefe", + "tests/hq_network_regression.py": "3b077e1c527029d60432cbe2e0373c3a4a55ed4e80d6be59e639de8bc9411188", + "tests/mortar_salvo_regression.py": "6624f57ac28aabadd3ae2ba96b802910ffe739786d9aca0ad1caea68ad08eb5b", + "tests/policy_harness.py": "e861c30037b3e456f0c8ef1c02e9fe1417b601ffb15d2037974715008865e4be", + "tests/test_admin_setting_policy.py": "8d8ce49f4079d930c06bf23be410eb610e30082e3177a9f88bd6a0dfbf54189d", + "tests/test_casualty_ground_policy.py": "6b6fb5dccfef32eb46f7e5fee11d28acd3068c25837d2f1474491fd139be9316", + "tests/test_casualty_incapacitation.py": "fdeee4ae5b0e383c592ecbcd132b108ed6e92cb0e1f4767da02f95bfa33b7a4a", + "tests/test_casualty_loading_policy.py": "3a85d86dd1b19aa616fafb5d3a38f5374d5bb14d176844210150ef95df62033a", + "tests/test_casualty_remove_probe.py": "61578d8ca863d5e5be32dab2661fdd410e8441eaf1a9ae3b5123906eb3d57a68", + "tests/test_casualty_reservation_death.py": "dd5abb0ca2e7ec289f6933c406517515475d34ffeea95d732c329b42080773b7", + "tests/test_diagnostic_no_splash.py": "a9f54ced5864953c8031208d519c2dec9d604a70ad65bc738b51c6656a8aab22", + "tests/test_environment_policy.py": "4f844728d47ab3ad66c8a06f37833e0325f00bd04c0803d7dcf0eed14d8935c3", + "tests/test_environment_restart_runner.py": "05bc09bc45db70ba4a635b65b0a96aa38437ba50c98640b47ed8d0683c3a5f71", + "tests/test_extraction_placement_policy.py": "4cef86ff87338bc2e0bf66683c78050f3ba49d940d0c221a89333f4cb61a2442", + "tests/test_faction_catalog_scope.py": "c8fab92575f2621f47ed8685243338aa9ea717bb809c2ef9e8e0884af9df263b", + "tests/test_guard_cancellation_policy.py": "4a0671c62a5d875c0839d7cd9bdb0703cc28172ae6a3b483e041ec299b02efb1", + "tests/test_headless_game_runner.py": "29f045b65dbcb53f06359daa1ed7e981351517f9b08d0287da828eb1f8b4212a", + "tests/test_initial_guard_policy.py": "11354597457a240ec0427481ec0626cb952fbf06995a2955c24e81a5054edb5f", + "tests/test_inventory_enumeration_policy.py": "1a13ab9d7fdce46589a30ba005d65bada02a5a997f3fdb4dff025aec5514f802", + "tests/test_local_admission.py": "8ef122042a6c0c2258b1269e78606443546760ffdba6177c4f68f73769006e57", + "tests/test_mission_rules.py": "1561f50ea52a38227503ea3b5b2394a9303f82d9cea00268fbbe8fe83deb4b5b", + "tests/test_mortar_transactions.py": "3a17d444c1083336b52cb329fabaa1b9de7105cbe048e12b2d430600cc5bbcd1", + "tests/test_native_mortar_probe.py": "327f4c5ac1be24397c6c88c6b77d8889ae84d3b66c26caaeb400c1b2f373de5c", + "tests/test_performance_comparison.py": "5f932de9e9898acdd379f26c777a35c884269522dbf8c41991a7a25bf61c369a", + "tests/test_player_admission_policy.py": "9298c7f5f4b1da466ed044326e87f1b3ed6c7dc6fc65e8915ec08086fbc501e3", + "tests/test_prison_placement_policy.py": "269d8875e4a634bb0049acea644795ce6e58f335363d8e86ae1dae934d2ae28e", + "tests/test_radio_defence_policy.py": "9fd3c348d69c8c4e61c1135bb7e5df1b2b0ef07a2a5ad4faff1611d7b8e98097", + "tests/test_radio_feedback_policy.py": "d91c39d8291a16cfa5bb5fc5c7365a7421a7ce9f855a0b0250b76c2cb7cd1369", + "tests/test_recovery_policy.py": "e50879d0e2728f8ede3b67015d05bad5e34590dfdf315575b799adab1e23e186", + "tests/test_release_check.py": "8b6e755ed922ad129ba01c228989610a31f3a79841dc7cdddd4ddbd0e510971b", + "tests/test_settings_migration.py": "59fe9cd5f4564a6747a9a00fa422453830c6f94f6f1ba785d0592ef6feefe158", + "tests/test_site_discovery_policy.py": "79ccc06b74c05210428d602b4e22de1579523b163d5ab9ed2d52a29bed484896", + "tests/test_time_policy.py": "32c468c0a8852b7dfb873a93da80295434530131629eaca365a9c4aa9398c63a", + "tools/archive_native.py": "a302bd080275b72fbc47fa8108a98fb2689a377cbeb3cfe6e73596726bdab0bb", + "tools/check.py": "7460a22cf17fc9562fce73862c1b0791c830f2a8f25878626457618801599702", + "tools/compare_performance.py": "568acfee2525b8924f3e7a39784e8641f76d63bb3703dcce8251ab9ac9bb1854", + "tools/desktop/kwin-right-monitor.js": "8f0cf9ad290edf02e5f623cf1b0e36e2b266153ff81a022233c4cf67818b9499", + "tools/headless_game.py": "18ea1259e7f35121a7628edddecf5683ad49a1199f90f45ecdd7adbd120ca589", + "tools/headless_workbench.py": "7599cca63d7cad61201d7597ccb6776e3f8c681d1d7566b8d8261b35e3d8de69", + "tools/import_settings.py": "d9c250b52b6d29be3a80c3404f048b65a0b9b99e93b5213d5ce2be7d90a37324", + "tools/native_command.py": "4828826aa70b5ac31ab77157e658a8a3998de2829cdf782b8eee5b8c566d0385", + "tools/native_provenance.py": "d4777f1f6ffed6993f7009ee2af41b100e8e0138d60ebfdcc5404ff2128f8e2a", + "tools/native_report.py": "bb75ef5fe551f45776d441f15a49ccad4daf19abca505187f9b2d30102538658", + "tools/reference_guard.py": "545b67111927d73bf2020f291528ea6f2f687a994b3e37bf567f239c32c8cd78", + "tools/release_check.py": "65df1bff33638a583905ba5f6c583a095b9f7e38186b6f29d70b72a61525589e", + "tools/source_manifest.py": "c1a985348bad16f3b5b69ef7e545b6341eca298d8ae08111b8340b31535cc199" +} diff --git a/docs/evidence/dedicated-2026-09-19-084040-vanilla/stdout.log b/docs/evidence/dedicated-2026-09-19-084040-vanilla/stdout.log new file mode 100644 index 0000000..2819cc6 --- /dev/null +++ b/docs/evidence/dedicated-2026-09-19-084040-vanilla/stdout.log @@ -0,0 +1,223 @@ +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"} +ENGINE : Creating engine. +ENGINE : FileSystem: Adding relative directory '/tmp/work/profile/logs/logs_2026-09-19_08-40-40' 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 -server Missions/21_GM_Eden.conf +ENGINE : Addon dirs: + ENGINE : dir: './addons' + ENGINE : dir: '/tmp/work/profile/addons' +ENGINE : Available addons: + ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) + ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +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=ArmaReforger path=./addons/data/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=1 name=core path=./addons/core/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=2 name=profile path=/tmp/work/profile/profile/resourceDatabase.rdb) +RESOURCES : ResourceDB: loading cache (id=3 name=logs path=/tmp/work/profile/logs/logs_2026-09-19_08-40-40/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 : 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.026000 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: 15.461000 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: 21.243000 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: 29.171000 ms + SCRIPT : SCRISCRIPT : 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 +WORLD : Entities load '$ArmaReforger:worlds/GameMaster/GM_Eden.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" +WORLD : 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) + ENTITY : Create entity @"ENTITY:2305843009213693956" ('SCR_FactionManager') at <4808.321777 63.431000 6332.958008> @"FactionManager_Editor1" + RESOURCES : GetResourceObject @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et" + WORLD : Entity prefab load @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et" + RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et" + WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et" + RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et" + WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et" + WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1) + RESOURCES : GetResourceObject @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et" + WORLD : Entity prefab load @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et" + RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et" + WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et" + WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73) + WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033) + RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et" + WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et" + RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et" + WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et" + WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696) + WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d) + WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49) + WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216) + 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. +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +RESOURCES (E): Failed to load '' +PT : 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: 1405.522000 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 '{59AD59368755F41A}Missions/21_GM_Eden.conf'. + WORLD : WORLD : Entities load '$ArmaReforger:worlds/GameMaster/GM_Eden.ent' +PROFILING : Entities load took: 763.523000 ms + WORLD : WORLD : Game::LoadEntities + WORLD : WORLD : Initializing world systems @"{8DDC2A311929D52F}Configs/Systems/GameMasterSystems.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 2 addon(s)! + PROFILING : NotifyBeforeEntitiesCreated took: 0.771000 ms + WORLD : WORLD : Wait for preloading data + PROFILING : Wait for preloading data took: 3.708000 ms + ENTITY : Create entity @"ENTITY: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: 1209.616000 ms + WORLD : WORLD : NotifyBeforeEntitiesInitialized + PROFILING : NotifyBeforeEntitiesInitialized took: 0.029000 ms + WORLD : WORLD : NotifyEntitiesInitialized + TERRAIN : TERRAIN : Initializing road networks... + PROFILING : Initializing road networks... took: 2.090000 ms + DEFAULT : DEFAULT : WorldVolumesCollection + PROFILING : WorldVolumesCollection took: 60.935000 ms + INIT : INIT : SoundWorldInit + PROFILING : SoundWorldInit took: 6.625000 ms + PROFILING : NotifyEntitiesInitialized took: 69.886000 ms + PROFILING : CreateEntities took: 8207.920000 ms + PROFILING : CreateEntities took: 8207.927000 ms + WORLD : WORLD : EOnActivate + PROFILING : EOnActivate took: 30.935000 ms +PROFILING : Game::LoadEntities took: 8244.411000 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.377000 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 +WORLD : UpdateEntities + WORLD : Frame + 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.5 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.3 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.8 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.1 ms, max: 34.4 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 30.7 ms, max: 35.4 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.3 ms, max: 34.5 ms, mean: 33.3 ms, median: 33.5 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.2 ms, max: 35.3 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.8 ms, max: 34.6 ms, mean: 33.3 ms, median: 33.5 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) +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: 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 32.0 ms, max: 34.8 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.2 ms, max: 35.7 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.6 ms, max: 35.0 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg: 33.3 ms, min: 31.9 ms, max: 34.2 ms, mean: 33.3 ms, median: 33.5 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) +WORLD : UpdateEntities + WORLD : Frame + DEFAULT : FPS: 30.0, frame time (avg \ No newline at end of file diff --git a/docs/evidence/dedicated-resource-audit/authored-source-audit.json b/docs/evidence/dedicated-resource-audit/authored-source-audit.json new file mode 100644 index 0000000..95fc0df --- /dev/null +++ b/docs/evidence/dedicated-resource-audit/authored-source-audit.json @@ -0,0 +1,22 @@ +{ + "sourceManifestSHA256": "d66a6a1a256aec91b752acb153dd1fac94d0950419e3a10ccecb74d50a914a15", + "checkedAddonTextFiles": 133, + "directMatches": [], + "world": "SubScene {\n Parent \"{853E92315D1D9EFE}worlds/Eden/Eden.ent\"\n}\n", + "authoredTopLevelEntityTypes": [ + "ERR_GameMode", + "SCR_AIWorld", + "PerceptionManager", + "SCR_FactionManager", + "SCR_LoadoutManager", + "RadioManagerEntity", + "ScriptedChatEntity" + ], + "installedSources": { + "Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et": "4d0dec7b5600cd55457ca5619feb8f33d670fbceeac9ff1f6a63d8d967501c62", + "Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et": "99634e8c71539e96ad9803ce2f7c9b2d4df864dabc5a36dc1c14c318d7625540", + "PrefabsEditable/Auto/Structures/Cultural/Calvaries/E_CalvaryLarge_01.et": "d8c0b17de3349e263188da31b9f8fed4e35189ac3f2046d0779002188460c09f", + "worlds/Eden/Eden.ent": "83b7c3c645ed7e1537663463ba5d54bc16eda82b305db65759d01c6232e26451" + }, + "nativeControlExecuted": false +} diff --git a/docs/evidence/dedicated-resource-audit/installed-reference-scan.json b/docs/evidence/dedicated-resource-audit/installed-reference-scan.json new file mode 100644 index 0000000..69a39b2 --- /dev/null +++ b/docs/evidence/dedicated-resource-audit/installed-reference-scan.json @@ -0,0 +1,377 @@ +{ + "hits": [ + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Helicopter/Helicopter_Explosion.ptc", + "sha256": "92a78d9033e9f4971e6a57cea17126de145cf3ce140021de37ee56bf23c3bc7d", + "lines": [ + { + "line": 1059, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Helicopter/Helicopter_MI8_rotor_destruction.ptc", + "sha256": "d663243e2a38f4d0ab932d6ad0795839ccee350e9feea9e56f53fcddf9765675", + "lines": [ + { + "line": 1394, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Helicopter/Helicopter_MI8_rotor_tail_destruction.ptc", + "sha256": "2aa427681e040a03adca978762c31cbc5eddb8ccd693675a4431d3653c06dcc2", + "lines": [ + { + "line": 439, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Helicopter/Helicopter_rotor_desintegration.ptc", + "sha256": "17982337934069f6f32232f10ced0f88489aba55a3592dba024978a2e8f364ca", + "lines": [ + { + "line": 385, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Helicopter/Helicopter_UH1H_rotor_destruction.ptc", + "sha256": "7287915d98d238ac96a5c4f347209f4c4bef81af25ce1d1a6826e81fdb867290", + "lines": [ + { + "line": 699, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Helicopter/Helicopter_UH1H_rotor_tail_destruction.ptc", + "sha256": "f90e107c08a5fd924e5508d60315848330b1e66454b4a2008d21cc5ffe47637a", + "lines": [ + { + "line": 379, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Vehicle_explosion_medium_01.ptc", + "sha256": "24d43511565335d3cf075a4b4f629cd212555ed5cf91ddbbbaeb6e72aaad172d", + "lines": [ + { + "line": 912, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Vehicle/Vehicle_explosion_small_01.ptc", + "sha256": "3b6ef83188e3b15b79eca944995d8d394cde1f760bd12b2186c8263179a31704", + "lines": [ + { + "line": 914, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Blast_Mortar_Default.ptc", + "sha256": "e4865ab31953afb475df73e858acf05af8a08d8e3df22f27fe9b98ca41da2190", + "lines": [ + { + "line": 348, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Blast_Mortar_Dirt.ptc", + "sha256": "7512b8da4d747d92bdc6eb461befd1c09f170d24c97ef2565d2747057f1a84c2", + "lines": [ + { + "line": 494, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Blast_Mortar_Sand.ptc", + "sha256": "7204817678b2942b1ef3d240cdc4135f26751894fbf6f20e28a4ba184881bdbe", + "lines": [ + { + "line": 421, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Blast_Mortar_Snow.ptc", + "sha256": "576e7b92d2679d5a4e93d5a08f889dff1d47e9b785268cf91392de6b0b0bc727", + "lines": [ + { + "line": 497, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Blast_Mortar_Solid.ptc", + "sha256": "b51186a95f37d32d3e0e8382cf4acb7521018b981202ffafb7f3671d774f621d", + "lines": [ + { + "line": 395, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Explosion_M14_AP_Mine.ptc", + "sha256": "5a4ed9c695cf868c34421112cc7a646cb827987a6a5dfe838aa9b170e5975221", + "lines": [ + { + "line": 354, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Explosion_M72LAW.ptc", + "sha256": "0acb76cd6de357c5bfcde33c2af92b07b55fed26d373ba6253523183d7bad7b7", + "lines": [ + { + "line": 234, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Explosion_PMN4_AP_Mine.ptc", + "sha256": "386e3cf6849590ed00e44bd06e73536410ca118f7c53255bce79df34128f7107", + "lines": [ + { + "line": 358, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Explosion_RGD5.ptc", + "sha256": "1484a906aecc872a8a47106d6e20cb993f03965a4f34d9298efb4e96398307e8", + "lines": [ + { + "line": 180, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Explosion_RPG7V1.ptc", + "sha256": "58399a5dc5c8865eb580d2f745d822fd3e167f623d931896a905d01713fb0efe", + "lines": [ + { + "line": 234, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Explosion_VOG25.ptc", + "sha256": "2d737288526b178803e72661317258fec6d5b1c9b0dd29e4b2343a386fada4d2", + "lines": [ + { + "line": 167, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Muzzle_M72LAW_02.ptc", + "sha256": "a4244014210272d114fb103e9a697b10d3bb6efc6304707391bf96020fe8bb86", + "lines": [ + { + "line": 405, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Muzzle_Mortar.ptc", + "sha256": "4f0d6ebadc9040ea075e7bdf108f2a0b5498d8f378d29e93cca415b31a4d4d14", + "lines": [ + { + "line": 292, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/Muzzle_RPG7V1_02.ptc", + "sha256": "c8c7a99a009799b9b56a263a30dd82996d1c5131743ca8b8ed90c303adabc51f", + "lines": [ + { + "line": 460, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/RPG_22_muzzle_back.ptc", + "sha256": "daf01c517b185d79af8492927dd8e4ffc1cb3d853a53e6a00b7347ebb8d1250d", + "lines": [ + { + "line": 26, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Particles/Weapon/RPG_75_muzzle_back.ptc", + "sha256": "1ecc024bebb516ce05129cbc4b8fbfc5fbdc3cceabde36a605c0130b0a850a88", + "lines": [ + { + "line": 26, + "text": "Prefab \"{58E62C5D17281925}Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Editor/Common/ValidationEntity.et", + "sha256": "5f92651cf164e4a1ac73ea03333206dda0fb3af2698cdfad85cd40d1da644f12", + "lines": [ + { + "line": 6, + "text": "m_Material \"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Blasts/Blast_big_Invisible_Trigger.et", + "sha256": "39b2973890a969b08726672ea6644601edb268473119dbf797b0b3744ac29751", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Blasts/Blast_huge_Invisible_Trigger.et", + "sha256": "f7040b04f8057f42a905de77eaab4fc4972f7ba8fcb3549a03e93fd552a9fd26", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Blasts/Blast_medium_Invisible_Trigger.et", + "sha256": "7e53559db9af509b4a17c36f6a3b7d8a880431d6e2bbc59dbde21f75c68c7c3a", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Blasts/Blast_Mortar_Invisible_Trigger.et", + "sha256": "a4749ab4b6963871ca6b4594699666b9bde84c0c0d1d31a156fcf5b4607f9d99", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Blasts/Blast_small_Invisible_Trigger.et", + "sha256": "4d0dec7b5600cd55457ca5619feb8f33d670fbceeac9ff1f6a63d8d967501c62", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Blasts/Blast_tiny_Invisible_Trigger.et", + "sha256": "9579afdc2fbbfa0562867b300e1b827a5bf955c453e1300501c693d512c1d61b", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Particles/Burnings/Burning_ground_small_Invisible_Trigger.et", + "sha256": "d32a55d8f548f4dc75706537126bdc65993239731a5ff60e06fec6a7c0894020", + "lines": [ + { + "line": 6, + "text": "Object \"{FF35BE9795BA3797}system/wbdata/Gizmo3D/sphere.xob\"" + } + ] + }, + { + "pak": "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "path": "Prefabs/Structures/Cultural/Calvaries/CalvaryLarge_01.et", + "sha256": "99634e8c71539e96ad9803ce2f7c9b2d4df864dabc5a36dc1c14c318d7625540", + "lines": [ + { + "line": 8, + "text": "AssignedMaterial \"{45ECF6B1797D3CD9}system/wbdata/PreviewWindow/TransparentMat.emat\"" + } + ] + } + ], + "helperEntries": [], + "packages": [ + "/tmp/erri-dedicated-runtime/server/addons/core/data.pak", + "/tmp/erri-dedicated-runtime/server/addons/data/data.pak", + "/tmp/erri-dedicated-runtime/server/addons/data/data001.pak", + "/tmp/erri-dedicated-runtime/server/addons/data/data002.pak", + "/tmp/erri-dedicated-runtime/server/addons/data/worlds.pak", + "/tmp/erri-dedicated-runtime/server/addons/data/worlds001.pak", + "/tmp/erri-dedicated-runtime/server/addons/data/worlds002.pak" + ] +} diff --git a/docs/evidence/game-2026-09-19-081359/console.log.txt b/docs/evidence/game-2026-09-19-081359/console.log.txt new file mode 100644 index 0000000..6fa6c31 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/console.log.txt @@ -0,0 +1,457 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-13-59\console.log started at 2026-09-19 08:13:59 (2026-09-19 06:13:59 UTC) + +08:13:59.702 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-13-59' to filesystem under name logs +08:13:59.702 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +08:13:59.702 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +08:13:59.703 ENGINE : Initializing engine, version 192142 +08:13:59.703 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons 2528466DE220D91C -profile Z:/tmp/erri-game-profile -errOrdinaryScenario core -noBackend -noSound -noSplash -noThrow -disableCrashReporter -logconsole +08:13:59.710 ENGINE : Addon dirs: +08:13:59.710 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:13:59.710 ENGINE : dir: './addons' +08:13:59.710 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +08:13:59.710 ENGINE : Available addons: +08:13:59.710 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:13:59.710 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:13:59.710 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:13:59.710 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:13:59.710 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:13:59.710 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:13:59.710 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:13:59.710 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:13:59.839 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +08:13:59.845 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:13:59.845 ENGINE : CPU vendor : AuthenticAMD +08:13:59.845 ENGINE : CPU type : 2 +08:13:59.845 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:13:59.845 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:13:59.845 ENGINE : CPU count logical : 16 +08:13:59.845 ENGINE : CPU count physical : 8 +08:13:59.845 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:13:59.845 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:13:59.846 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:13:59.988 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:13:59.990 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +08:13:59.990 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-13-59/resourceDatabase.rdb) +08:14:00.132 ENGINE : GameProject load +08:14:00.132 ENGINE : Loaded addons: +08:14:00.132 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:14:00.132 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:14:00.132 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:14:00.134 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:14:00.134 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:14:00.134 ENGINE : Engine user settings config loaded +08:14:00.134 PROFILING : Settings changed took: 0.002100 ms +08:14:00.134 ENGINE : Locale info: system en-US (English), user en-US (English) +08:14:00.260 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:14:00.262 RENDER : Basic screen setup: +08:14:00.262 RENDER : Back buffer width x height: 1280x720 +08:14:00.262 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:14:00.262 RENDER : MSAA : none +08:14:00.275 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:14:00.275 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:14:00.275 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:14:00.275 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:14:00.275 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:14:00.275 RENDER : AMD AGS correctly initialized +08:14:00.275 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 +08:14:00.275 RENDER : Detected output devices: +08:14:00.275 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:14:00.275 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:14:00.275 RENDER : Concurrent frames limit 2 +08:14:00.360 RENDER : DX12 device successfully created by AMD AGS library +08:14:00.360 RENDER : * user markers not supported in this version AMD SW +08:14:00.360 RENDER : Graphics device features +08:14:00.360 RENDER : Needed: +08:14:00.360 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:14:00.360 RENDER : Optional: +08:14:00.360 RENDER : * Allow tearing (VSYNC) : 1 +08:14:00.360 RENDER : * 16 bits : 1 +08:14:00.360 RENDER : * Resource heap tier : 3 +08:14:00.360 RENDER : * Persistent heaps (DRED) : 1 +08:14:00.360 RENDER : * DRED 1.2 is supported by compiler +08:14:00.381 RENDER : Main RT format setup. +08:14:00.381 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:14:00.381 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:14:00.386 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +08:14:00.411 PROFILING : Settings changed took: 1.399600 ms +08:14:00.418 RENDER : RENDER : Reload shaders +08:14:00.418 RENDER : Enfusion shader version 13 +08:14:00.418 INIT : INIT : ShaderListReload +08:14:00.418 PROFILING : ShaderListReload took: 0.000400 ms +08:14:01.023 RENDER : Loaded 3383 newer shader binaries +08:14:01.023 PROFILING : Reload shaders took: 604.855500 ms +08:14:01.025 ENGINE : Initializing inputs. +08:14:01.038 NETWORK : Initializing networking. +08:14:01.038 NETWORK : Using new GameRplScheduler. +08:14:01.038 SCRIPT : SCRIPT : Initializing scripts +08:14:01.038 SCRIPT : SCRIPT : ScriptProjectManager init +08:14:01.038 PROFILING : ScriptProjectManager init took: 0.016100 ms +08:14:01.070 PROFILING : Initializing scripts took: 31.820100 ms +08:14:01.070 BACKEND : Backend Services are disabled. +08:14:01.070 ENGINE : Enfusion engine successfully created. +08:14:01.077 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:14:01.099 GUI : Using default language (en_us) +08:14:01.099 GUI : Loading 'en_us' localization file. +08:14:01.099 INIT : INIT : Loading StringTable +08:14:01.122 PROFILING : Loading StringTable took: 23.433600 ms +08:14:01.122 SCRIPT : SCRIPT : Compiling GameLib scripts +08:14:01.161 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 +08:14:01.162 PROFILING : Compiling GameLib scripts took: 39.384800 ms +08:14:01.162 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:14:01.162 SCRIPT : SCRIPT : Compiling Game scripts +08:14:02.096 SCRIPT : Compiling Game scripts +08:14:02.096 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:14:02.096 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:14:02.321 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.331 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:14:02.358 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:14:02.482 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:14:02.526 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,56": 'GetPlayerIdentityId' is obsolete +08:14:02.539 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:14:02.539 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:14:02.540 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:14:02.580 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.580 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.581 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:14:02.581 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:14:02.643 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:14:02.763 SCRIPT : Module: Game; loaded 5731x files; 11112x classes; used 26711K 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: 6bd7ab2a +08:14:02.789 PROFILING : Compiling Game scripts took: 1627.557500 ms +08:14:02.789 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:14:02.831 ENGINE : Game successfully created. +08:14:02.865 PLATFORM : Save data from container 'settings' have been loaded +08:14:02.965 PLATFORM : Save data from container 'sessions' have been loaded +08:14:03.367 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:14:03.367 ENGINE : Game user settings config loaded +08:14:03.464 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +08:14:03.465 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +08:14:03.466 PROFILING : Entities load took: 0.511200 ms +08:14:03.467 WORLD : WORLD : Game::LoadEntities +08:14:03.467 WORLD : WORLD : Initializing world systems +08:14:03.468 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:14:03.469 WORLD : WORLD : CreateEntities +08:14:03.469 WORLD : WORLD : CreateEntities +08:14:03.469 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:14:03.473 RESOURCES : Loaded mission headers from 7 addon(s)! +08:14:03.473 PROFILING : NotifyBeforeEntitiesCreated took: 4.025300 ms +08:14:03.473 WORLD : WORLD : Wait for preloading data +08:14:03.473 PROFILING : Wait for preloading data took: 0.001000 ms +08:14:03.473 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:14:03.473 PROFILING : NotifyBeforeEntitiesInitialized took: 0.017800 ms +08:14:03.473 WORLD : InitEntities 'world' +08:14:03.473 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +08:14:03.473 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +08:14:03.481 WORLD : WORLD : NotifyEntitiesInitialized +08:14:03.482 DEFAULT : DEFAULT : WorldVolumesCollection +08:14:03.482 PROFILING : WorldVolumesCollection took: 0.004500 ms +08:14:03.482 PROFILING : NotifyEntitiesInitialized took: 0.056100 ms +08:14:03.482 PROFILING : CreateEntities took: 13.029900 ms +08:14:03.482 PROFILING : CreateEntities took: 13.036800 ms +08:14:03.482 WORLD : WORLD : EOnActivate +08:14:03.482 PROFILING : EOnActivate took: 0.001700 ms +08:14:03.482 PROFILING : Game::LoadEntities took: 14.479500 ms +08:14:03.663 DEFAULT : Entered main menu. +08:14:03.762 DEFAULT (W): No GameMode present in the world, using fallback logic! +08:14:03.763 SCRIPT : ERR ORDINARY: requesting header project=core +08:14:04.285 ENGINE : Game destroyed. +08:14:04.415 ENGINE : Addon dirs: +08:14:04.415 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:14:04.415 ENGINE : dir: './addons' +08:14:04.415 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +08:14:04.415 ENGINE : dir: '$profile:../addons/' +08:14:04.415 ENGINE : Available addons: +08:14:04.415 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:14:04.415 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:14:04.415 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:14:04.415 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:14:04.415 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:14:04.415 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:14:04.415 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:14:04.415 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:14:04.514 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +08:14:04.517 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:14:04.517 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:14:04.518 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:14:04.629 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:14:04.631 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +08:14:04.631 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-13-59/resourceDatabase.rdb) +08:14:04.772 ENGINE : GameProject load +08:14:04.772 ENGINE : Loaded addons: +08:14:04.772 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:14:04.772 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:14:04.772 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:14:04.793 GUI : Using default language (en_us) +08:14:04.793 GUI : Loading 'en_us' localization file. +08:14:04.793 INIT : INIT : Loading StringTable +08:14:04.812 PROFILING : Loading StringTable took: 19.440200 ms +08:14:04.812 SCRIPT : SCRIPT : Compiling GameLib scripts +08:14:04.851 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 +08:14:04.852 PROFILING : Compiling GameLib scripts took: 39.757100 ms +08:14:04.852 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:14:04.852 SCRIPT : SCRIPT : Compiling Game scripts +08:14:05.742 SCRIPT : Compiling Game scripts +08:14:05.742 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:14:05.742 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:14:05.975 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:05.986 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:14:06.011 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:14:06.135 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:14:06.185 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,56": 'GetPlayerIdentityId' is obsolete +08:14:06.196 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:14:06.196 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:14:06.197 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:14:06.233 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:06.233 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:06.234 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:14:06.234 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:14:06.293 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:14:06.405 SCRIPT : Module: Game; loaded 5731x files; 11112x classes; used 26685K 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: 6bd7ab2a +08:14:06.433 PROFILING : Compiling Game scripts took: 1580.736700 ms +08:14:06.433 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:14:06.453 ENGINE : Game successfully created. +08:14:06.546 PLATFORM : Save data from container 'settings' have been loaded +08:14:06.645 PLATFORM : Save data from container 'sessions' have been loaded +08:14:06.645 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:14:06.645 ENGINE : Game user settings config loaded +08:14:06.745 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'. +08:14:06.746 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:14:07.727 PROFILING : Entities load took: 980.940200 ms +08:14:07.730 WORLD : WORLD : Game::LoadEntities +08:14:07.730 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +08:14:07.731 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:14:07.731 WORLD : WORLD : CreateEntities +08:14:07.731 WORLD : WORLD : CreateEntities +08:14:07.731 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:14:07.735 RESOURCES : Loaded mission headers from 7 addon(s)! +08:14:07.735 PROFILING : NotifyBeforeEntitiesCreated took: 4.160300 ms +08:14:07.735 WORLD : WORLD : Wait for preloading data +08:14:07.739 PROFILING : Wait for preloading data took: 4.302100 ms +08:14:07.860 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:14:07.860 PROFILING : PROFILING : Terrain load +08:14:09.506 PROFILING : Terrain load took: 1646.293400 ms +08:14:12.167 WORLD : Game::LoadEntities +08:14:12.167 WORLD : CreateEntities +08:14:12.167 WORLD : CreateEntities +08:14:12.167 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" +08:14:12.167 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:14:12.167 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:14:17.353 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:14:17.353 PROFILING : NotifyBeforeEntitiesInitialized took: 0.041800 ms +08:14:17.901 WORLD : InitEntities 'world' +08:14:17.901 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:14:17.901 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:14:17.919 WORLD : WORLD : NotifyEntitiesInitialized +08:14:17.919 TERRAIN : TERRAIN : Initializing road networks... +08:14:17.922 PROFILING : Initializing road networks... took: 3.028700 ms +08:14:17.923 DEFAULT : DEFAULT : WorldVolumesCollection +08:14:17.979 PROFILING : WorldVolumesCollection took: 56.197400 ms +08:14:17.979 INIT : INIT : SoundWorldInit +08:14:17.994 PROFILING : SoundWorldInit took: 15.359600 ms +08:14:17.994 PROFILING : NotifyEntitiesInitialized took: 74.751000 ms +08:14:17.994 PROFILING : CreateEntities took: 10263.219700 ms +08:14:17.995 PROFILING : CreateEntities took: 10263.455500 ms +08:14:17.995 WORLD : WORLD : Wait for preloading data around camera +08:14:18.246 PROFILING : Wait for preloading data around camera took: 250.331600 ms +08:14:18.246 WORLD : WORLD : EOnActivate +08:14:18.272 PROFILING : EOnActivate took: 26.520300 ms +08:14:18.272 PROFILING : Game::LoadEntities took: 10542.526700 ms +08:14:18.758 DEFAULT : Entered offline game state. +08:14:18.863 SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems +08:14:18.863 NETWORK : Player connected: connectionID=2147483646 +08:14:18.863 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:14:18.863 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:14:18.868 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:14:18.868 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:14:18.868 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:14:18.868 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! +08:14:18.868 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! +08:14:18.869 SCRIPT (W): Can't open config file "" +08:14:18.869 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:14:18.870 WORLD : InitEntities 'world' +08:14:18.870 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:14:18.870 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:14:18.870 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:14:18.870 SCRIPT (W): Slot_Chat Has no Content! +08:14:18.870 SCRIPT (W): Slot_VON Has no Content! +08:14:18.870 SCRIPT (W): Slot_AvailableActions Has no Content! +08:14:18.870 SCRIPT (W): Slot_Vehicle Has no Content! +08:14:18.870 SCRIPT (W): Slot_GameVersion Has no Content! +08:14:18.870 SCRIPT (W): Slot_Notifications Has no Content! +08:14:18.870 SCRIPT (W): Slot_Hints Has no Content! +08:14:18.875 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:14:18.875 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +08:14:18.875 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld +08:14:18.875 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:14:18.875 NETWORK : Players connecting: 0 +08:14:18.875 NETWORK : Players connected: 1 / 1 +08:14:18.885 WORLD : Frame start +08:14:18.885 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:14:18.895 WORLD : UpdateEntities +08:14:18.895 WORLD : Frame +08:14:18.895 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:14:19.051 WORLD : UpdateEntities +08:14:19.051 WORLD : PostFrame +08:14:19.051 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:14:19.051 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:14:19.101 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:14:19.101 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:14:19.101 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:14:19.101 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:14:19.254 RENDER : RENDER : ObjectsHeightMap::Build +08:14:19.254 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:14:19.377 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 122.198900 ms +08:14:19.384 PROFILING : ObjectsHeightMap::Build took: 129.900700 ms +08:14:20.378 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:14:20.390 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:14:20.390 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:14:20.413 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:14:20.415 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:14:20.455 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:14:20.455 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:14:20.461 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:14:20.498 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:14:20.498 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:14:20.499 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:14:20.499 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:14:20.502 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:14:20.503 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:14:20.503 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:14:20.504 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:14:20.504 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:14:20.504 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:14:20.504 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:14:20.504 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:14:20.504 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:14:20.504 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 +08:14:20.504 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:14:20.504 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:14:20.504 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 +08:14:20.504 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:14:20.504 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:14:20.504 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 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.710 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.06,63.5095,7499.69> up=0.995096 +08:14:21.710 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.108467 angularSpeed=0.1119 +08:14:21.710 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +08:14:21.710 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6125,7501.96> +08:14:21.710 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3125,7501.96> terrainY=63.3182 tireTerrainGap=-0.00563049 +08:14:21.710 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6125,7501.96> radius=0.3 bottom=<7012.03,63.3125,7501.96> fraction=0.428411 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00574875 +08:14:21.710 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6137,7497.69> +08:14:21.710 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1637,7497.69> terrainY=64.1573 tireTerrainGap=0.00644684 +08:14:21.710 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6137,7497.69> radius=0.45 bottom=<7009.87,64.1637,7497.69> fraction=0.484016 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00648499 +08:14:21.710 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2607,7497.76> +08:14:21.710 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8107,7497.76> terrainY=63.8174 tireTerrainGap=-0.00666428 +08:14:21.710 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2607,7497.76> radius=0.45 bottom=<7014.42,63.8107,7497.76> fraction=0.424167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00668335 +08:14:21.710 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:22.509 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:22.509 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:22.509 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:22.775 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994124 +08:14:22.776 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0934182 angularSpeed=0.0616026 +08:14:22.776 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:22.776 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6155,7501.99> +08:14:22.776 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3155,7501.99> terrainY=63.3138 tireTerrainGap=0.0017128 +08:14:22.776 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6155,7501.99> radius=0.3 bottom=<7012.06,63.3155,7501.99> fraction=0.462444 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0017395 +08:14:22.776 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6051,7497.71> +08:14:22.776 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1551,7497.71> terrainY=64.1493 tireTerrainGap=0.00579834 +08:14:22.776 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6051,7497.71> radius=0.45 bottom=<7009.92,64.1551,7497.71> fraction=0.481481 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00592804 +08:14:22.776 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2645,7497.79> +08:14:22.776 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8145,7497.79> terrainY=63.8153 tireTerrainGap=-0.000759125 +08:14:22.776 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2645,7497.79> radius=0.45 bottom=<7014.46,63.8145,7497.79> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:14:22.776 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:23.044 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.842 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5279,7499.75> up=0.994176 +08:14:23.842 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.104164 angularSpeed=0.0420108 +08:14:23.842 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:23.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6114,7502.02> +08:14:23.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3114,7502.02> terrainY=63.3107 tireTerrainGap=0.000705719 +08:14:23.842 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6114,7502.02> radius=0.3 bottom=<7012.07,63.3114,7502.02> fraction=0.457707 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000694275 +08:14:23.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5958,7497.73> +08:14:23.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1458,7497.73> terrainY=64.1423 tireTerrainGap=0.00347137 +08:14:23.842 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5958,7497.73> radius=0.45 bottom=<7009.97,64.1458,7497.73> fraction=0.470555 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00352478 +08:14:23.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2606,7497.84> +08:14:23.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8106,7497.84> terrainY=63.8122 tireTerrainGap=-0.00161362 +08:14:23.842 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2606,7497.84> radius=0.45 bottom=<7014.51,63.8106,7497.84> fraction=0.447222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0016098 +08:14:23.842 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.642 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:24.642 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:24.642 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:24.643 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.908 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994125 +08:14:24.908 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:14:24.909 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:24.909 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:14:24.909 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151825 +08:14:24.909 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461453 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00151825 +08:14:24.909 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:14:24.909 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00226593 +08:14:24.909 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:14:24.909 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:14:24.909 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.00213242 +08:14:24.909 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:14:24.909 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.977 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994125 +08:14:25.977 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:14:25.977 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:25.977 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:14:25.977 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151825 +08:14:25.977 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461453 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00151825 +08:14:25.977 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:14:25.977 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00226593 +08:14:25.977 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:14:25.977 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:14:25.977 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.00213242 +08:14:25.977 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:14:25.977 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:25.977 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.978 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:14:25.978 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:14:25.979 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:14:25.979 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 diff --git a/docs/evidence/game-2026-09-19-081359/error.log.txt b/docs/evidence/game-2026-09-19-081359/error.log.txt new file mode 100644 index 0000000..c052936 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/error.log.txt @@ -0,0 +1,82 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-13-59\error.log started at 2026-09-19 08:14:01 (2026-09-19 06:14:01 UTC) + +08:14:01.077 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:14:02.096 SCRIPT : Compiling Game scripts +08:14:02.096 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:14:02.096 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:14:02.321 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.331 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:14:02.358 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:14:02.482 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:14:02.526 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,56": 'GetPlayerIdentityId' is obsolete +08:14:02.539 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:14:02.539 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:14:02.540 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:14:02.580 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.580 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.581 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:14:02.581 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:14:02.642 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:14:03.762 DEFAULT (W): No GameMode present in the world, using fallback logic! +08:14:05.742 SCRIPT : Compiling Game scripts +08:14:05.742 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:14:05.742 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:14:05.975 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:05.986 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:14:06.011 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:14:06.135 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:14:06.185 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,56": 'GetPlayerIdentityId' is obsolete +08:14:06.196 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:14:06.196 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:14:06.197 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:14:06.233 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:06.233 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:06.234 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:14:06.234 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:14:06.293 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:14:12.167 WORLD : Game::LoadEntities +08:14:12.167 WORLD : CreateEntities +08:14:12.167 WORLD : CreateEntities +08:14:12.167 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" +08:14:12.167 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:14:12.167 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:14:17.901 WORLD : InitEntities 'world' +08:14:17.901 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:14:17.901 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:14:18.868 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:14:18.868 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:14:18.868 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:14:18.868 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! +08:14:18.868 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! +08:14:18.869 SCRIPT (W): Can't open config file "" +08:14:18.869 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:14:18.870 WORLD : InitEntities 'world' +08:14:18.870 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:14:18.870 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:14:18.870 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:14:18.870 SCRIPT (W): Slot_Chat Has no Content! +08:14:18.870 SCRIPT (W): Slot_VON Has no Content! +08:14:18.870 SCRIPT (W): Slot_AvailableActions Has no Content! +08:14:18.870 SCRIPT (W): Slot_Vehicle Has no Content! +08:14:18.870 SCRIPT (W): Slot_GameVersion Has no Content! +08:14:18.870 SCRIPT (W): Slot_Notifications Has no Content! +08:14:18.870 SCRIPT (W): Slot_Hints Has no Content! +08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld +08:14:18.875 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:14:19.051 WORLD : UpdateEntities +08:14:19.051 WORLD : PostFrame +08:14:19.051 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:14:19.051 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:14:19.101 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:14:19.101 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:14:19.101 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:14:19.101 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab diff --git a/docs/evidence/game-2026-09-19-081359/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-081359/game-startup-report.json.txt new file mode 100644 index 0000000..53448de --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/game-startup-report.json.txt @@ -0,0 +1,28 @@ +{ + "log": "console.log", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [ + "08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld" + ], + "engine_errors": [ + "08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld" + ], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": false, + "scenario_header_verified": true, + "verified_header_projects": [ + "core" + ], + "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": false, + "unexpected_smoke_fixture": false, + "failed": true, + "ready": false, + "failure_observed_during_polling": true +} diff --git a/docs/evidence/game-2026-09-19-081359/headless-launch.log.txt b/docs/evidence/game-2026-09-19-081359/headless-launch.log.txt new file mode 100644 index 0000000..6bd7f6d --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/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: 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. +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: 0x7f843c10dd60 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f843c10dd60 +[Gamescope WSI] Destroyed swapchain: 0x7f843c10dd60 +[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: 0x7f843c10dd60 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-081359/launch-source-sha256.json b/docs/evidence/game-2026-09-19-081359/launch-source-sha256.json new file mode 100644 index 0000000..cde50e0 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/launch-source-sha256.json @@ -0,0 +1,159 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "0b954c856cfee9b5dbb6241a5001726ca6940c885f968c2ed60a84264be7a1f4", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "657e96d1112b68c8ced37793e99f88e6078b38a579190e63d00b1f9a9a032e26", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "12d8fc39d47e03c3838e0642aa9e4a80baf60f250357493bff812d5c75812c86", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-081359/launch-source.json b/docs/evidence/game-2026-09-19-081359/launch-source.json new file mode 100644 index 0000000..5dcc642 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/launch-source.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "launch_id": "bb67540f-9d77-42f6-851f-84451c5039c9", + "captured_unix": 1789798438.0655093, + "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", + "2528466DE220D91C", + "-profile", + "Z:/tmp/erri-game-profile", + "-errOrdinaryScenario", + "core", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "00e228fb8e6b21add8617f4ccd44bb48b5a3111a7a7c40477c0b08510c00b693" +} diff --git a/docs/evidence/game-2026-09-19-081359/report.json b/docs/evidence/game-2026-09-19-081359/report.json new file mode 100644 index 0000000..5f9cbef --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/report.json @@ -0,0 +1,27 @@ +{ + "log": "docs/evidence/game-2026-09-19-081359/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [ + "08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld" + ], + "engine_errors": [ + "08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld" + ], + "missing_end_screen": [], + "scope": "ordinary local game startup only; no player input, full escape, multiplayer or FPS proof", + "local_participant_verified": false, + "scenario_header_verified": true, + "verified_header_projects": [ + "core" + ], + "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": false, + "unexpected_smoke_fixture": false, + "failed": true, + "ready": false +} diff --git a/docs/evidence/game-2026-09-19-081359/runner.json.txt b/docs/evidence/game-2026-09-19-081359/runner.json.txt new file mode 100644 index 0000000..b2c71f0 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/runner.json.txt @@ -0,0 +1,25 @@ +{ + "stopped_unix": 1789798489.8924336, + "console_sha256": "8c279375ee57786fb743c999b94c4c029a7a270ea47e0d21813b6f5ae7ea63ce", + "end_source_sha256": "00e228fb8e6b21add8617f4ccd44bb48b5a3111a7a7c40477c0b08510c00b693", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "bb67540f-9d77-42f6-851f-84451c5039c9", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "00e228fb8e6b21add8617f4ccd44bb48b5a3111a7a7c40477c0b08510c00b693", + "started_unix": 1789798438.0655713, + "result": "game-failed", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_08-13-59", + "project": "core", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 30, + "failure_observed_during_polling": true, + "first_failure_elapsed_seconds": 21.360663403989747, + "executable": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe", + "dedicated_server": false, + "display": "headless Gamescope", + "audio": "-noSound plus own silent sink", + "scope": "ordinary game compile/startup; no scripted fixture, full escape or multiplayer acceptance" +} diff --git a/docs/evidence/game-2026-09-19-081359/script.log.txt b/docs/evidence/game-2026-09-19-081359/script.log.txt new file mode 100644 index 0000000..0224651 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/script.log.txt @@ -0,0 +1,222 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-13-59\script.log started at 2026-09-19 08:14:01 (2026-09-19 06:14:01 UTC) + +08:14:01.038 SCRIPT : SCRIPT : Initializing scripts +08:14:01.038 SCRIPT : SCRIPT : ScriptProjectManager init +08:14:01.122 SCRIPT : SCRIPT : Compiling GameLib scripts +08:14:01.161 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 +08:14:01.162 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:14:01.162 SCRIPT : SCRIPT : Compiling Game scripts +08:14:02.096 SCRIPT : Compiling Game scripts +08:14:02.096 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:14:02.096 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:14:02.321 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.331 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:14:02.358 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:14:02.452 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:14:02.482 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:14:02.526 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,56": 'GetPlayerIdentityId' is obsolete +08:14:02.539 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:14:02.539 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:14:02.540 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:14:02.580 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.580 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:02.581 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:14:02.581 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:14:02.643 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:14:02.763 SCRIPT : Module: Game; loaded 5731x files; 11112x classes; used 26711K 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: 6bd7ab2a +08:14:03.473 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +08:14:03.481 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +08:14:03.763 SCRIPT : ERR ORDINARY: requesting header project=core +08:14:04.812 SCRIPT : SCRIPT : Compiling GameLib scripts +08:14:04.851 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 +08:14:04.852 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:14:04.852 SCRIPT : SCRIPT : Compiling Game scripts +08:14:05.742 SCRIPT : Compiling Game scripts +08:14:05.742 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:14:05.742 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:14:05.975 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:05.986 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:14:06.011 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:14:06.105 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:14:06.135 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:14:06.185 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,56": 'GetPlayerIdentityId' is obsolete +08:14:06.196 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:14:06.196 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:14:06.197 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:14:06.233 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:06.233 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:14:06.234 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:14:06.234 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:14:06.293 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:14:06.405 SCRIPT : Module: Game; loaded 5731x files; 11112x classes; used 26685K 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: 6bd7ab2a +08:14:17.901 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:14:18.863 SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems +08:14:18.868 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! +08:14:18.868 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! +08:14:18.869 SCRIPT (W): Can't open config file "" +08:14:18.869 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:14:18.870 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:14:18.870 SCRIPT (W): Slot_Chat Has no Content! +08:14:18.870 SCRIPT (W): Slot_VON Has no Content! +08:14:18.870 SCRIPT (W): Slot_AvailableActions Has no Content! +08:14:18.870 SCRIPT (W): Slot_Vehicle Has no Content! +08:14:18.870 SCRIPT (W): Slot_GameVersion Has no Content! +08:14:18.870 SCRIPT (W): Slot_Notifications Has no Content! +08:14:18.870 SCRIPT (W): Slot_Hints Has no Content! +08:14:18.875 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +08:14:18.875 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +08:14:18.875 SCRIPT (E): Rereintroduced: player identity could not be bound; spawn withheld +08:14:18.875 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:14:18.885 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:14:18.895 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:14:19.051 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:14:20.378 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:14:20.390 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:14:20.390 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:14:20.413 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:14:20.415 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:14:20.455 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:14:20.455 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:14:20.461 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:14:20.498 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:14:20.498 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:14:20.499 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:14:20.499 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:14:20.502 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:14:20.503 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:14:20.503 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:14:20.504 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:14:20.504 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:14:20.504 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:14:20.504 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:14:20.504 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:14:20.504 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:14:20.504 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 +08:14:20.504 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:14:20.504 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:14:20.504 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 +08:14:20.504 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:14:20.504 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:14:20.504 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 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:20.504 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.442 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.710 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.06,63.5095,7499.69> up=0.995096 +08:14:21.710 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.108467 angularSpeed=0.1119 +08:14:21.710 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +08:14:21.710 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6125,7501.96> +08:14:21.710 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3125,7501.96> terrainY=63.3182 tireTerrainGap=-0.00563049 +08:14:21.710 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6125,7501.96> radius=0.3 bottom=<7012.03,63.3125,7501.96> fraction=0.428411 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00574875 +08:14:21.710 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6137,7497.69> +08:14:21.710 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1637,7497.69> terrainY=64.1573 tireTerrainGap=0.00644684 +08:14:21.710 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6137,7497.69> radius=0.45 bottom=<7009.87,64.1637,7497.69> fraction=0.484016 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00648499 +08:14:21.710 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2607,7497.76> +08:14:21.710 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8107,7497.76> terrainY=63.8174 tireTerrainGap=-0.00666428 +08:14:21.710 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2607,7497.76> radius=0.45 bottom=<7014.42,63.8107,7497.76> fraction=0.424167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00668335 +08:14:21.710 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:21.975 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:14:22.509 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:22.509 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:22.509 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:22.775 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5432,7499.72> up=0.994124 +08:14:22.776 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0934182 angularSpeed=0.0616026 +08:14:22.776 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:22.776 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6155,7501.99> +08:14:22.776 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3155,7501.99> terrainY=63.3138 tireTerrainGap=0.0017128 +08:14:22.776 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6155,7501.99> radius=0.3 bottom=<7012.06,63.3155,7501.99> fraction=0.462444 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0017395 +08:14:22.776 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6051,7497.71> +08:14:22.776 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1551,7497.71> terrainY=64.1493 tireTerrainGap=0.00579834 +08:14:22.776 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6051,7497.71> radius=0.45 bottom=<7009.92,64.1551,7497.71> fraction=0.481481 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00592804 +08:14:22.776 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2645,7497.79> +08:14:22.776 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8145,7497.79> terrainY=63.8153 tireTerrainGap=-0.000759125 +08:14:22.776 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2645,7497.79> radius=0.45 bottom=<7014.46,63.8145,7497.79> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:14:22.776 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:23.044 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:14:23.044 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.575 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:14:23.842 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5279,7499.75> up=0.994176 +08:14:23.842 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.104164 angularSpeed=0.0420108 +08:14:23.842 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:23.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6114,7502.02> +08:14:23.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3114,7502.02> terrainY=63.3107 tireTerrainGap=0.000705719 +08:14:23.842 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6114,7502.02> radius=0.3 bottom=<7012.07,63.3114,7502.02> fraction=0.457707 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000694275 +08:14:23.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5958,7497.73> +08:14:23.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1458,7497.73> terrainY=64.1423 tireTerrainGap=0.00347137 +08:14:23.842 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5958,7497.73> radius=0.45 bottom=<7009.97,64.1458,7497.73> fraction=0.470555 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00352478 +08:14:23.842 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2606,7497.84> +08:14:23.842 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8106,7497.84> terrainY=63.8122 tireTerrainGap=-0.00161362 +08:14:23.842 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2606,7497.84> radius=0.45 bottom=<7014.51,63.8106,7497.84> fraction=0.447222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0016098 +08:14:23.842 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.109 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.642 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:24.642 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:24.642 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:24.643 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:14:24.908 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994125 +08:14:24.908 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:14:24.909 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:24.909 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:14:24.909 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151825 +08:14:24.909 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461453 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00151825 +08:14:24.909 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:14:24.909 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00226593 +08:14:24.909 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:14:24.909 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:14:24.909 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.00213242 +08:14:24.909 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:14:24.909 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:25.176 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.711 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.977 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994125 +08:14:25.977 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:14:25.977 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:14:25.977 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:14:25.977 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151825 +08:14:25.977 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461453 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00151825 +08:14:25.977 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:14:25.977 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00226593 +08:14:25.977 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5939,7497.73> radius=0.45 bottom=<7009.97,64.1439,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:14:25.977 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:14:25.977 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.00213242 +08:14:25.977 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:14:25.977 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:14:25.977 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:14:25.978 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:14:25.978 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:14:25.979 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:14:25.979 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 diff --git a/docs/evidence/game-2026-09-19-081359/source-provenance.json b/docs/evidence/game-2026-09-19-081359/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-081359/source-sha256.json b/docs/evidence/game-2026-09-19-081359/source-sha256.json new file mode 100644 index 0000000..cde50e0 --- /dev/null +++ b/docs/evidence/game-2026-09-19-081359/source-sha256.json @@ -0,0 +1,159 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "0b954c856cfee9b5dbb6241a5001726ca6940c885f968c2ed60a84264be7a1f4", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "657e96d1112b68c8ced37793e99f88e6078b38a579190e63d00b1f9a9a032e26", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "12d8fc39d47e03c3838e0642aa9e4a80baf60f250357493bff812d5c75812c86", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-082733/console.log.txt b/docs/evidence/game-2026-09-19-082733/console.log.txt new file mode 100644 index 0000000..d150b49 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/console.log.txt @@ -0,0 +1,460 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-27-33\console.log started at 2026-09-19 08:27:33 (2026-09-19 06:27:33 UTC) + +08:27:33.185 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-27-33' to filesystem under name logs +08:27:33.185 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +08:27:33.185 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +08:27:33.186 ENGINE : Initializing engine, version 192142 +08:27:33.186 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons 2528466DE220D91C -profile Z:/tmp/erri-game-profile -errOrdinaryScenario core -noBackend -noSound -noSplash -noThrow -disableCrashReporter -logconsole +08:27:33.193 ENGINE : Addon dirs: +08:27:33.193 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:27:33.193 ENGINE : dir: './addons' +08:27:33.193 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +08:27:33.193 ENGINE : Available addons: +08:27:33.193 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:27:33.193 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:27:33.193 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:27:33.193 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:27:33.193 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:27:33.193 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:27:33.193 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:27:33.193 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:27:33.323 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +08:27:33.327 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:27:33.327 ENGINE : CPU vendor : AuthenticAMD +08:27:33.327 ENGINE : CPU type : 2 +08:27:33.327 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:27:33.327 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:27:33.327 ENGINE : CPU count logical : 16 +08:27:33.327 ENGINE : CPU count physical : 8 +08:27:33.327 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:27:33.327 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:27:33.327 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:27:33.470 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:27:33.471 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +08:27:33.471 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-27-33/resourceDatabase.rdb) +08:27:33.622 ENGINE : GameProject load +08:27:33.622 ENGINE : Loaded addons: +08:27:33.622 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:27:33.622 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:27:33.622 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:27:33.624 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:27:33.625 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:27:33.625 ENGINE : Engine user settings config loaded +08:27:33.625 PROFILING : Settings changed took: 0.002200 ms +08:27:33.625 ENGINE : Locale info: system en-US (English), user en-US (English) +08:27:33.764 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:27:33.766 RENDER : Basic screen setup: +08:27:33.766 RENDER : Back buffer width x height: 1280x720 +08:27:33.766 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:27:33.766 RENDER : MSAA : none +08:27:33.781 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:27:33.781 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:27:33.781 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:27:33.781 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:27:33.781 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:27:33.781 RENDER : AMD AGS correctly initialized +08:27:33.782 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 +08:27:33.782 RENDER : Detected output devices: +08:27:33.782 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:27:33.782 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:27:33.782 RENDER : Concurrent frames limit 2 +08:27:33.881 RENDER : DX12 device successfully created by AMD AGS library +08:27:33.881 RENDER : * user markers not supported in this version AMD SW +08:27:33.881 RENDER : Graphics device features +08:27:33.881 RENDER : Needed: +08:27:33.881 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:27:33.881 RENDER : Optional: +08:27:33.881 RENDER : * Allow tearing (VSYNC) : 1 +08:27:33.881 RENDER : * 16 bits : 1 +08:27:33.881 RENDER : * Resource heap tier : 3 +08:27:33.881 RENDER : * Persistent heaps (DRED) : 1 +08:27:33.881 RENDER : * DRED 1.2 is supported by compiler +08:27:33.905 RENDER : Main RT format setup. +08:27:33.905 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:27:33.905 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:27:33.910 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +08:27:33.943 PROFILING : Settings changed took: 1.379500 ms +08:27:33.951 RENDER : RENDER : Reload shaders +08:27:33.951 RENDER : Enfusion shader version 13 +08:27:33.951 INIT : INIT : ShaderListReload +08:27:33.951 PROFILING : ShaderListReload took: 0.000400 ms +08:27:34.550 RENDER : Loaded 3383 newer shader binaries +08:27:34.550 PROFILING : Reload shaders took: 599.465300 ms +08:27:34.555 ENGINE : Initializing inputs. +08:27:34.568 NETWORK : Initializing networking. +08:27:34.568 NETWORK : Using new GameRplScheduler. +08:27:34.568 SCRIPT : SCRIPT : Initializing scripts +08:27:34.568 SCRIPT : SCRIPT : ScriptProjectManager init +08:27:34.568 PROFILING : ScriptProjectManager init took: 0.009800 ms +08:27:34.601 PROFILING : Initializing scripts took: 33.111400 ms +08:27:34.601 BACKEND : Backend Services are disabled. +08:27:34.601 ENGINE : Enfusion engine successfully created. +08:27:34.608 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:27:34.631 GUI : Using default language (en_us) +08:27:34.631 GUI : Loading 'en_us' localization file. +08:27:34.631 INIT : INIT : Loading StringTable +08:27:34.656 PROFILING : Loading StringTable took: 25.247600 ms +08:27:34.657 SCRIPT : SCRIPT : Compiling GameLib scripts +08:27:34.700 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 +08:27:34.701 PROFILING : Compiling GameLib scripts took: 44.491200 ms +08:27:34.701 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:27:34.701 SCRIPT : SCRIPT : Compiling Game scripts +08:27:35.653 SCRIPT : Compiling Game scripts +08:27:35.653 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:27:35.653 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:27:35.932 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:35.943 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:27:35.970 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:27:36.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:27:36.141 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:27:36.154 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:27:36.154 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:27:36.155 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:27:36.192 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:36.192 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:36.194 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:27:36.194 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:27:36.251 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:27:36.368 SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 26720K 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: 2ef250fb +08:27:36.393 PROFILING : Compiling Game scripts took: 1691.873300 ms +08:27:36.393 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:27:36.433 ENGINE : Game successfully created. +08:27:36.495 PLATFORM : Save data from container 'settings' have been loaded +08:27:36.595 PLATFORM : Save data from container 'sessions' have been loaded +08:27:36.997 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:27:36.997 ENGINE : Game user settings config loaded +08:27:37.093 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +08:27:37.093 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +08:27:37.094 PROFILING : Entities load took: 0.475900 ms +08:27:37.096 WORLD : WORLD : Game::LoadEntities +08:27:37.096 WORLD : WORLD : Initializing world systems +08:27:37.097 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:27:37.097 WORLD : WORLD : CreateEntities +08:27:37.097 WORLD : WORLD : CreateEntities +08:27:37.097 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:27:37.102 RESOURCES : Loaded mission headers from 7 addon(s)! +08:27:37.102 PROFILING : NotifyBeforeEntitiesCreated took: 4.546200 ms +08:27:37.102 WORLD : WORLD : Wait for preloading data +08:27:37.102 PROFILING : Wait for preloading data took: 0.000900 ms +08:27:37.102 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:27:37.102 PROFILING : NotifyBeforeEntitiesInitialized took: 0.025300 ms +08:27:37.102 WORLD : InitEntities 'world' +08:27:37.102 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +08:27:37.102 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +08:27:37.112 WORLD : WORLD : NotifyEntitiesInitialized +08:27:37.112 DEFAULT : DEFAULT : WorldVolumesCollection +08:27:37.112 PROFILING : WorldVolumesCollection took: 0.007600 ms +08:27:37.112 PROFILING : NotifyEntitiesInitialized took: 0.082300 ms +08:27:37.112 PROFILING : CreateEntities took: 15.005100 ms +08:27:37.112 PROFILING : CreateEntities took: 15.012300 ms +08:27:37.112 WORLD : WORLD : EOnActivate +08:27:37.112 PROFILING : EOnActivate took: 0.002800 ms +08:27:37.112 PROFILING : Game::LoadEntities took: 16.448300 ms +08:27:37.292 DEFAULT : Entered main menu. +08:27:37.391 DEFAULT (W): No GameMode present in the world, using fallback logic! +08:27:37.392 SCRIPT : ERR ORDINARY: requesting header project=core +08:27:37.929 ENGINE : Game destroyed. +08:27:38.052 ENGINE : Addon dirs: +08:27:38.052 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:27:38.052 ENGINE : dir: './addons' +08:27:38.052 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +08:27:38.052 ENGINE : dir: '$profile:../addons/' +08:27:38.052 ENGINE : Available addons: +08:27:38.052 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:27:38.052 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:27:38.052 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:27:38.052 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:27:38.052 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:27:38.052 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:27:38.052 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:27:38.052 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:27:38.161 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +08:27:38.165 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:27:38.165 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:27:38.166 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:27:38.282 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:27:38.283 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +08:27:38.283 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-27-33/resourceDatabase.rdb) +08:27:38.428 ENGINE : GameProject load +08:27:38.428 ENGINE : Loaded addons: +08:27:38.428 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:27:38.428 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:27:38.428 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:27:38.449 GUI : Using default language (en_us) +08:27:38.449 GUI : Loading 'en_us' localization file. +08:27:38.449 INIT : INIT : Loading StringTable +08:27:38.468 PROFILING : Loading StringTable took: 19.127300 ms +08:27:38.468 SCRIPT : SCRIPT : Compiling GameLib scripts +08:27:38.507 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 +08:27:38.508 PROFILING : Compiling GameLib scripts took: 39.362700 ms +08:27:38.508 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:27:38.508 SCRIPT : SCRIPT : Compiling Game scripts +08:27:39.429 SCRIPT : Compiling Game scripts +08:27:39.429 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:27:39.429 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:27:39.659 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.671 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:27:39.717 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:27:39.845 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:27:39.894 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:27:39.906 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:27:39.906 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:27:39.907 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:27:39.942 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.942 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.944 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:27:39.944 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:27:39.998 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:27:40.104 SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 26693K 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: 2ef250fb +08:27:40.131 PROFILING : Compiling Game scripts took: 1623.257000 ms +08:27:40.131 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:27:40.152 ENGINE : Game successfully created. +08:27:40.192 PLATFORM : Save data from container 'settings' have been loaded +08:27:40.291 PLATFORM : Save data from container 'sessions' have been loaded +08:27:40.291 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:27:40.291 ENGINE : Game user settings config loaded +08:27:40.391 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{AD62322D5213C440}Missions/ERR_Everon_Base.conf'. +08:27:40.392 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:27:41.355 PROFILING : Entities load took: 963.101400 ms +08:27:41.356 WORLD : WORLD : Game::LoadEntities +08:27:41.356 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +08:27:41.357 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:27:41.357 WORLD : WORLD : CreateEntities +08:27:41.357 WORLD : WORLD : CreateEntities +08:27:41.357 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:27:41.361 RESOURCES : Loaded mission headers from 7 addon(s)! +08:27:41.361 PROFILING : NotifyBeforeEntitiesCreated took: 3.577700 ms +08:27:41.361 WORLD : WORLD : Wait for preloading data +08:27:41.373 PROFILING : Wait for preloading data took: 12.060500 ms +08:27:41.482 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:27:41.482 PROFILING : PROFILING : Terrain load +08:27:43.011 PROFILING : Terrain load took: 1529.281900 ms +08:27:45.643 WORLD : Game::LoadEntities +08:27:45.643 WORLD : CreateEntities +08:27:45.643 WORLD : CreateEntities +08:27:45.643 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" +08:27:45.643 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:27:45.643 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:27:50.700 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:27:50.700 PROFILING : NotifyBeforeEntitiesInitialized took: 0.068700 ms +08:27:51.230 WORLD : InitEntities 'world' +08:27:51.230 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:27:51.230 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:27:51.248 WORLD : WORLD : NotifyEntitiesInitialized +08:27:51.248 TERRAIN : TERRAIN : Initializing road networks... +08:27:51.251 PROFILING : Initializing road networks... took: 3.042600 ms +08:27:51.251 DEFAULT : DEFAULT : WorldVolumesCollection +08:27:51.307 PROFILING : WorldVolumesCollection took: 55.739900 ms +08:27:51.307 INIT : INIT : SoundWorldInit +08:27:51.320 PROFILING : SoundWorldInit took: 13.353300 ms +08:27:51.320 PROFILING : NotifyEntitiesInitialized took: 72.293700 ms +08:27:51.320 PROFILING : CreateEntities took: 9963.011200 ms +08:27:51.321 PROFILING : CreateEntities took: 9963.197600 ms +08:27:51.321 WORLD : WORLD : Wait for preloading data around camera +08:27:51.572 PROFILING : Wait for preloading data around camera took: 250.332800 ms +08:27:51.572 WORLD : WORLD : EOnActivate +08:27:51.598 PROFILING : EOnActivate took: 26.667000 ms +08:27:51.599 PROFILING : Game::LoadEntities took: 10242.235300 ms +08:27:51.999 DEFAULT : Entered offline game state. +08:27:52.104 SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems +08:27:52.104 NETWORK : Player connected: connectionID=2147483646 +08:27:52.104 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:27:52.104 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:27:52.108 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:27:52.108 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:27:52.108 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:27:52.108 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! +08:27:52.108 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! +08:27:52.109 SCRIPT (W): Can't open config file "" +08:27:52.109 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:27:52.110 WORLD : InitEntities 'world' +08:27:52.110 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:27:52.110 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:27:52.110 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:27:52.110 SCRIPT (W): Slot_Chat Has no Content! +08:27:52.110 SCRIPT (W): Slot_VON Has no Content! +08:27:52.110 SCRIPT (W): Slot_AvailableActions Has no Content! +08:27:52.110 SCRIPT (W): Slot_Vehicle Has no Content! +08:27:52.110 SCRIPT (W): Slot_GameVersion Has no Content! +08:27:52.110 SCRIPT (W): Slot_Notifications Has no Content! +08:27:52.110 SCRIPT (W): Slot_Hints Has no Content! +08:27:52.116 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:27:52.117 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +08:27:52.117 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +08:27:52.117 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +08:27:52.117 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:27:52.117 NETWORK : Players connecting: 0 +08:27:52.117 NETWORK : Players connected: 1 / 1 +08:27:52.127 WORLD : Frame start +08:27:52.127 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:27:52.137 WORLD : UpdateEntities +08:27:52.137 WORLD : Frame +08:27:52.137 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:27:52.282 WORLD : UpdateEntities +08:27:52.282 WORLD : PostFrame +08:27:52.282 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:27:52.282 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:27:52.323 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:27:52.323 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:27:52.323 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:27:52.323 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:27:52.468 RENDER : RENDER : ObjectsHeightMap::Build +08:27:52.468 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:27:52.604 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 135.353800 ms +08:27:52.612 PROFILING : ObjectsHeightMap::Build took: 143.599000 ms +08:27:53.596 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:27:53.608 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:27:53.608 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:27:53.636 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:27:53.637 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:27:53.680 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:27:53.680 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:27:53.689 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:27:53.731 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:27:53.731 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:27:53.732 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:27:53.732 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:27:53.736 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:27:53.737 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:27:53.737 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:27:53.739 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:27:53.739 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:27:53.739 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:27:53.739 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:27:53.739 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:27:53.739 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:27:53.739 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 +08:27:53.739 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:27:53.739 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:27:53.739 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 +08:27:53.739 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:27:53.739 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:27:53.739 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 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.925 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.06,63.5128,7499.69> up=0.995233 +08:27:54.925 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.158634 angularSpeed=0.100066 +08:27:54.925 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +08:27:54.925 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6076,7501.96> +08:27:54.925 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3076,7501.96> terrainY=63.3181 tireTerrainGap=-0.0104904 +08:27:54.925 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6076,7501.96> radius=0.3 bottom=<7012.03,63.3076,7501.96> fraction=0.406513 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.0105667 +08:27:54.925 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6097,7497.69> +08:27:54.925 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1597,7497.69> terrainY=64.1575 tireTerrainGap=0.00214386 +08:27:54.925 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6097,7497.69> radius=0.45 bottom=<7009.87,64.1597,7497.69> fraction=0.464646 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00222778 +08:27:54.925 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.41,64.2575,7497.75> +08:27:54.925 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.41,63.8075,7497.75> terrainY=63.8177 tireTerrainGap=-0.0101967 +08:27:54.925 SCRIPT : ERR GEAR SUPPORT: center=<7014.41,64.2575,7497.75> radius=0.45 bottom=<7014.41,63.8075,7497.75> fraction=0.408056 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0102272 +08:27:54.925 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:55.726 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:55.726 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.726 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.992 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5436,7499.72> up=0.994248 +08:27:55.992 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0659911 angularSpeed=0.0616801 +08:27:55.992 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:55.992 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6154,7501.99> +08:27:55.992 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3154,7501.99> terrainY=63.3134 tireTerrainGap=0.00198364 +08:27:55.992 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6154,7501.99> radius=0.3 bottom=<7012.06,63.3154,7501.99> fraction=0.463866 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00205231 +08:27:55.992 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.607,7497.72> +08:27:55.992 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.157,7497.72> terrainY=64.1494 tireTerrainGap=0.00762177 +08:27:55.992 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.607,7497.72> radius=0.45 bottom=<7009.92,64.157,7497.72> fraction=0.489338 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00765991 +08:27:55.992 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2656,7497.79> +08:27:55.992 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8156,7497.79> terrainY=63.8153 tireTerrainGap=0.000232697 +08:27:55.992 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2656,7497.79> radius=0.45 bottom=<7014.46,63.8156,7497.79> fraction=0.455556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000221252 +08:27:55.992 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:56.238 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:56.792 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:56.792 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:56.792 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:57.058 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5279,7499.75> up=0.994122 +08:27:57.058 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.021293 angularSpeed=0.0481501 +08:27:57.058 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:57.058 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6131,7502.02> +08:27:57.058 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3131,7502.02> terrainY=63.3109 tireTerrainGap=0.0022049 +08:27:57.058 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6131,7502.02> radius=0.3 bottom=<7012.08,63.3131,7502.02> fraction=0.464514 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00219345 +08:27:57.059 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5938,7497.73> +08:27:57.059 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1438,7497.73> terrainY=64.142 tireTerrainGap=0.00180817 +08:27:57.059 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5938,7497.73> radius=0.45 bottom=<7009.97,64.1438,7497.73> fraction=0.463004 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00186157 +08:27:57.059 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2593,7497.83> +08:27:57.059 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8093,7497.83> terrainY=63.8123 tireTerrainGap=-0.00294113 +08:27:57.059 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2593,7497.83> radius=0.45 bottom=<7014.51,63.8093,7497.83> fraction=0.441111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00295639 +08:27:57.059 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:58.125 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.76> up=0.994196 +08:27:58.125 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:27:58.125 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:58.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6115,7502.03> +08:27:58.125 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3115,7502.03> terrainY=63.3103 tireTerrainGap=0.00120926 +08:27:58.125 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6115,7502.03> radius=0.3 bottom=<7012.08,63.3115,7502.03> fraction=0.460061 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00121307 +08:27:58.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5934,7497.73> +08:27:58.125 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1434,7497.73> terrainY=64.1411 tireTerrainGap=0.00231934 +08:27:58.125 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5934,7497.73> radius=0.45 bottom=<7009.97,64.1434,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:27:58.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2595,7497.84> +08:27:58.125 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8095,7497.84> terrainY=63.8118 tireTerrainGap=-0.00229263 +08:27:58.125 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2595,7497.84> radius=0.45 bottom=<7014.52,63.8095,7497.84> fraction=0.443889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00234222 +08:27:58.125 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:58.391 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:58.391 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.391 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.392 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:59.191 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.76> up=0.994196 +08:27:59.191 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:27:59.191 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:59.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6115,7502.03> +08:27:59.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3115,7502.03> terrainY=63.3103 tireTerrainGap=0.00120926 +08:27:59.191 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6115,7502.03> radius=0.3 bottom=<7012.08,63.3115,7502.03> fraction=0.460061 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00121307 +08:27:59.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5934,7497.73> +08:27:59.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1434,7497.73> terrainY=64.1411 tireTerrainGap=0.00231934 +08:27:59.191 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5934,7497.73> radius=0.45 bottom=<7009.97,64.1434,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:27:59.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2595,7497.84> +08:27:59.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8095,7497.84> terrainY=63.8118 tireTerrainGap=-0.00229263 +08:27:59.191 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2595,7497.84> radius=0.45 bottom=<7014.52,63.8095,7497.84> fraction=0.443889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00234222 +08:27:59.191 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:59.459 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:59.459 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:59.459 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:27:59.459 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:27:59.460 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:27:59.460 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:28:00.159 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:28:00.196 SCRIPT : ERR ORDINARY: local participant verified project=core phase=prison +08:28:00.196 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> diff --git a/docs/evidence/game-2026-09-19-082733/error.log.txt b/docs/evidence/game-2026-09-19-082733/error.log.txt new file mode 100644 index 0000000..e2a0068 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/error.log.txt @@ -0,0 +1,81 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-27-33\error.log started at 2026-09-19 08:27:34 (2026-09-19 06:27:34 UTC) + +08:27:34.608 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:27:35.653 SCRIPT : Compiling Game scripts +08:27:35.653 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:27:35.653 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:27:35.932 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:35.943 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:27:35.970 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:27:36.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:27:36.141 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:27:36.154 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:27:36.154 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:27:36.155 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:27:36.192 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:36.192 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:36.194 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:27:36.194 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:27:36.251 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:27:37.391 DEFAULT (W): No GameMode present in the world, using fallback logic! +08:27:39.429 SCRIPT : Compiling Game scripts +08:27:39.429 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:27:39.429 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:27:39.659 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.671 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:27:39.717 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:27:39.845 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:27:39.894 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:27:39.906 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:27:39.906 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:27:39.907 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:27:39.942 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.942 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.944 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:27:39.944 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:27:39.998 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:27:45.643 WORLD : Game::LoadEntities +08:27:45.643 WORLD : CreateEntities +08:27:45.643 WORLD : CreateEntities +08:27:45.643 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" +08:27:45.643 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:27:45.643 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:27:51.229 WORLD : InitEntities 'world' +08:27:51.230 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:27:51.230 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:27:52.108 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:27:52.108 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:27:52.108 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:27:52.108 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! +08:27:52.108 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! +08:27:52.109 SCRIPT (W): Can't open config file "" +08:27:52.109 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:27:52.110 WORLD : InitEntities 'world' +08:27:52.110 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:27:52.110 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:27:52.110 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:27:52.110 SCRIPT (W): Slot_Chat Has no Content! +08:27:52.110 SCRIPT (W): Slot_VON Has no Content! +08:27:52.110 SCRIPT (W): Slot_AvailableActions Has no Content! +08:27:52.110 SCRIPT (W): Slot_Vehicle Has no Content! +08:27:52.110 SCRIPT (W): Slot_GameVersion Has no Content! +08:27:52.110 SCRIPT (W): Slot_Notifications Has no Content! +08:27:52.110 SCRIPT (W): Slot_Hints Has no Content! +08:27:52.117 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:27:52.282 WORLD : UpdateEntities +08:27:52.282 WORLD : PostFrame +08:27:52.282 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:27:52.282 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:27:52.323 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:27:52.323 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:27:52.323 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:27:52.323 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab diff --git a/docs/evidence/game-2026-09-19-082733/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-082733/game-startup-report.json.txt new file mode 100644 index 0000000..9bed3b1 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/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": [ + "core" + ], + "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-082733/headless-launch.log.txt b/docs/evidence/game-2026-09-19-082733/headless-launch.log.txt new file mode 100644 index 0000000..b422785 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/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: 165 +[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: 0x7f84a010dd60 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7f84a010dd60 +[Gamescope WSI] Destroyed swapchain: 0x7f84a010dd60 +[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: 0x7f84a010dd60 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-082733/launch-source-sha256.json b/docs/evidence/game-2026-09-19-082733/launch-source-sha256.json new file mode 100644 index 0000000..0f71883 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/launch-source-sha256.json @@ -0,0 +1,162 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-082733/launch-source.json b/docs/evidence/game-2026-09-19-082733/launch-source.json new file mode 100644 index 0000000..8758205 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/launch-source.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "launch_id": "9d2da35f-22ce-48a3-b20d-b366a77336fb", + "captured_unix": 1789799251.5088367, + "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", + "2528466DE220D91C", + "-profile", + "Z:/tmp/erri-game-profile", + "-errOrdinaryScenario", + "core", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "acfe86be51639bf0394e7992f9a33ec7d7f6f7b58449490994285ae6378e1315" +} diff --git a/docs/evidence/game-2026-09-19-082733/report.json b/docs/evidence/game-2026-09-19-082733/report.json new file mode 100644 index 0000000..b4a14fc --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/report.json @@ -0,0 +1,23 @@ +{ + "log": "docs/evidence/game-2026-09-19-082733/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": [ + "core" + ], + "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 +} diff --git a/docs/evidence/game-2026-09-19-082733/runner.json.txt b/docs/evidence/game-2026-09-19-082733/runner.json.txt new file mode 100644 index 0000000..336c88d --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/runner.json.txt @@ -0,0 +1,25 @@ +{ + "stopped_unix": 1789799296.6531878, + "console_sha256": "fd700ff9cdcb8c9fbbb1b06b651265a0c5259ab72fc6f24e746653d68100c0ec", + "end_source_sha256": "acfe86be51639bf0394e7992f9a33ec7d7f6f7b58449490994285ae6378e1315", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "9d2da35f-22ce-48a3-b20d-b366a77336fb", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "acfe86be51639bf0394e7992f9a33ec7d7f6f7b58449490994285ae6378e1315", + "started_unix": 1789799251.5089092, + "result": "game-started", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_08-27-33", + "project": "core", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 30, + "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", + "scope": "ordinary game compile/startup; no scripted fixture, full escape or multiplayer acceptance" +} diff --git a/docs/evidence/game-2026-09-19-082733/script.log.txt b/docs/evidence/game-2026-09-19-082733/script.log.txt new file mode 100644 index 0000000..413974b --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/script.log.txt @@ -0,0 +1,225 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-27-33\script.log started at 2026-09-19 08:27:34 (2026-09-19 06:27:34 UTC) + +08:27:34.568 SCRIPT : SCRIPT : Initializing scripts +08:27:34.568 SCRIPT : SCRIPT : ScriptProjectManager init +08:27:34.657 SCRIPT : SCRIPT : Compiling GameLib scripts +08:27:34.700 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 +08:27:34.701 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:27:34.701 SCRIPT : SCRIPT : Compiling Game scripts +08:27:35.653 SCRIPT : Compiling Game scripts +08:27:35.653 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:27:35.653 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:27:35.932 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:35.943 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:27:35.970 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:27:36.068 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:27:36.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:27:36.141 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:27:36.154 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:27:36.154 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:27:36.155 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:27:36.192 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:36.192 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:36.194 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:27:36.194 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:27:36.251 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:27:36.368 SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 26720K 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: 2ef250fb +08:27:37.102 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +08:27:37.112 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +08:27:37.392 SCRIPT : ERR ORDINARY: requesting header project=core +08:27:38.468 SCRIPT : SCRIPT : Compiling GameLib scripts +08:27:38.507 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 +08:27:38.508 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:27:38.508 SCRIPT : SCRIPT : Compiling Game scripts +08:27:39.429 SCRIPT : Compiling Game scripts +08:27:39.429 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:27:39.429 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:27:39.659 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.671 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:27:39.717 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:27:39.815 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:27:39.845 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:27:39.894 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:27:39.906 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:27:39.906 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:27:39.907 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:27:39.942 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.942 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:27:39.944 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:27:39.944 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:27:39.998 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:27:40.104 SCRIPT : Module: Game; loaded 5732x files; 11115x classes; used 26693K 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: 2ef250fb +08:27:51.230 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:27:52.104 SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems +08:27:52.108 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! +08:27:52.108 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! +08:27:52.109 SCRIPT (W): Can't open config file "" +08:27:52.109 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:27:52.110 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:27:52.110 SCRIPT (W): Slot_Chat Has no Content! +08:27:52.110 SCRIPT (W): Slot_VON Has no Content! +08:27:52.110 SCRIPT (W): Slot_AvailableActions Has no Content! +08:27:52.110 SCRIPT (W): Slot_Vehicle Has no Content! +08:27:52.110 SCRIPT (W): Slot_GameVersion Has no Content! +08:27:52.110 SCRIPT (W): Slot_Notifications Has no Content! +08:27:52.110 SCRIPT (W): Slot_Hints Has no Content! +08:27:52.117 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +08:27:52.117 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +08:27:52.117 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +08:27:52.117 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:27:52.127 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:27:52.137 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:27:52.282 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:27:53.596 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:27:53.608 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:27:53.608 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:27:53.636 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:27:53.637 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:27:53.680 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:27:53.680 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:27:53.689 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:27:53.731 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:27:53.731 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:27:53.732 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:27:53.732 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:27:53.736 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:27:53.737 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:27:53.737 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:27:53.739 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:27:53.739 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:27:53.739 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:27:53.739 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:27:53.739 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:27:53.739 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:27:53.739 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 +08:27:53.739 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:27:53.739 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:27:53.739 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 +08:27:53.739 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:27:53.739 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:27:53.739 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 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:53.739 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.643 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:54.925 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.06,63.5128,7499.69> up=0.995233 +08:27:54.925 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.158634 angularSpeed=0.100066 +08:27:54.925 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +08:27:54.925 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6076,7501.96> +08:27:54.925 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3076,7501.96> terrainY=63.3181 tireTerrainGap=-0.0104904 +08:27:54.925 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6076,7501.96> radius=0.3 bottom=<7012.03,63.3076,7501.96> fraction=0.406513 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.0105667 +08:27:54.925 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6097,7497.69> +08:27:54.925 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1597,7497.69> terrainY=64.1575 tireTerrainGap=0.00214386 +08:27:54.925 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6097,7497.69> radius=0.45 bottom=<7009.87,64.1597,7497.69> fraction=0.464646 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00222778 +08:27:54.925 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.41,64.2575,7497.75> +08:27:54.925 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.41,63.8075,7497.75> terrainY=63.8177 tireTerrainGap=-0.0101967 +08:27:54.925 SCRIPT : ERR GEAR SUPPORT: center=<7014.41,64.2575,7497.75> radius=0.45 bottom=<7014.41,63.8075,7497.75> fraction=0.408056 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0102272 +08:27:54.925 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:55.167 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:27:55.726 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:55.726 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.726 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:55.992 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5436,7499.72> up=0.994248 +08:27:55.992 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0659911 angularSpeed=0.0616801 +08:27:55.992 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:55.992 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6154,7501.99> +08:27:55.992 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3154,7501.99> terrainY=63.3134 tireTerrainGap=0.00198364 +08:27:55.992 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6154,7501.99> radius=0.3 bottom=<7012.06,63.3154,7501.99> fraction=0.463866 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00205231 +08:27:55.992 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.607,7497.72> +08:27:55.992 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.157,7497.72> terrainY=64.1494 tireTerrainGap=0.00762177 +08:27:55.992 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.607,7497.72> radius=0.45 bottom=<7009.92,64.157,7497.72> fraction=0.489338 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00765991 +08:27:55.992 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2656,7497.79> +08:27:55.992 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8156,7497.79> terrainY=63.8153 tireTerrainGap=0.000232697 +08:27:55.992 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2656,7497.79> radius=0.45 bottom=<7014.46,63.8156,7497.79> fraction=0.455556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000221252 +08:27:55.992 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:56.238 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:27:56.238 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:56.792 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:56.792 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:56.792 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:57.058 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5279,7499.75> up=0.994122 +08:27:57.058 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.021293 angularSpeed=0.0481501 +08:27:57.058 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:57.058 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6131,7502.02> +08:27:57.058 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3131,7502.02> terrainY=63.3109 tireTerrainGap=0.0022049 +08:27:57.058 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6131,7502.02> radius=0.3 bottom=<7012.08,63.3131,7502.02> fraction=0.464514 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00219345 +08:27:57.059 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5938,7497.73> +08:27:57.059 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1438,7497.73> terrainY=64.142 tireTerrainGap=0.00180817 +08:27:57.059 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5938,7497.73> radius=0.45 bottom=<7009.97,64.1438,7497.73> fraction=0.463004 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00186157 +08:27:57.059 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2593,7497.83> +08:27:57.059 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8093,7497.83> terrainY=63.8123 tireTerrainGap=-0.00294113 +08:27:57.059 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2593,7497.83> radius=0.45 bottom=<7014.51,63.8093,7497.83> fraction=0.441111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00295639 +08:27:57.059 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.325 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:57.859 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:27:58.125 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.76> up=0.994196 +08:27:58.125 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:27:58.125 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:58.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6115,7502.03> +08:27:58.125 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3115,7502.03> terrainY=63.3103 tireTerrainGap=0.00120926 +08:27:58.125 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6115,7502.03> radius=0.3 bottom=<7012.08,63.3115,7502.03> fraction=0.460061 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00121307 +08:27:58.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5934,7497.73> +08:27:58.125 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1434,7497.73> terrainY=64.1411 tireTerrainGap=0.00231934 +08:27:58.125 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5934,7497.73> radius=0.45 bottom=<7009.97,64.1434,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:27:58.125 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2595,7497.84> +08:27:58.125 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8095,7497.84> terrainY=63.8118 tireTerrainGap=-0.00229263 +08:27:58.125 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2595,7497.84> radius=0.45 bottom=<7014.52,63.8095,7497.84> fraction=0.443889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00234222 +08:27:58.125 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:58.391 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:58.391 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.391 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.392 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:58.925 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:59.191 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.76> up=0.994196 +08:27:59.191 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:27:59.191 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:27:59.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6115,7502.03> +08:27:59.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3115,7502.03> terrainY=63.3103 tireTerrainGap=0.00120926 +08:27:59.191 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6115,7502.03> radius=0.3 bottom=<7012.08,63.3115,7502.03> fraction=0.460061 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00121307 +08:27:59.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5934,7497.73> +08:27:59.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1434,7497.73> terrainY=64.1411 tireTerrainGap=0.00231934 +08:27:59.191 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5934,7497.73> radius=0.45 bottom=<7009.97,64.1434,7497.73> fraction=0.465208 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00234985 +08:27:59.191 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2595,7497.84> +08:27:59.191 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8095,7497.84> terrainY=63.8118 tireTerrainGap=-0.00229263 +08:27:59.191 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.2595,7497.84> radius=0.45 bottom=<7014.52,63.8095,7497.84> fraction=0.443889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00234222 +08:27:59.191 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:27:59.459 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:59.459 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:27:59.459 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:27:59.459 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:27:59.460 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:27:59.460 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:28:00.159 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:28:00.196 SCRIPT : ERR ORDINARY: local participant verified project=core phase=prison +08:28:00.196 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> diff --git a/docs/evidence/game-2026-09-19-082733/source-provenance.json b/docs/evidence/game-2026-09-19-082733/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-082733/source-sha256.json b/docs/evidence/game-2026-09-19-082733/source-sha256.json new file mode 100644 index 0000000..0f71883 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082733/source-sha256.json @@ -0,0 +1,162 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-082938/console.log.txt b/docs/evidence/game-2026-09-19-082938/console.log.txt new file mode 100644 index 0000000..4c4631c --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/console.log.txt @@ -0,0 +1,484 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-29-38\console.log started at 2026-09-19 08:29:38 (2026-09-19 06:29:38 UTC) + +08:29:38.835 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-29-38' to filesystem under name logs +08:29:38.835 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-game-profile\profile' to filesystem under name profile +08:29:38.835 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger\' +08:29:38.836 ENGINE : Initializing engine, version 192142 +08:29:38.836 ENGINE : CLI Params: -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/addons -addons FA804F411BDDF2C6 -profile Z:/tmp/erri-game-profile -errOrdinaryScenario chat -noBackend -noSound -noSplash -noThrow -disableCrashReporter -logconsole +08:29:38.845 ENGINE : Addon dirs: +08:29:38.845 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:29:38.845 ENGINE : dir: './addons' +08:29:38.845 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +08:29:38.845 ENGINE : Available addons: +08:29:38.845 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:29:38.845 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:29:38.845 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:29:38.845 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:29:38.845 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:29:38.845 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:29:38.845 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:29:38.845 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:29:38.845 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:29:38.845 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:29:38.846 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:29:38.846 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:29:38.967 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +08:29:38.970 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:29:38.970 ENGINE : CPU vendor : AuthenticAMD +08:29:38.970 ENGINE : CPU type : 2 +08:29:38.970 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:29:38.970 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:29:38.970 ENGINE : CPU count logical : 16 +08:29:38.970 ENGINE : CPU count physical : 8 +08:29:38.970 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:29:38.970 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:29:38.970 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:29:38.970 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:29:38.971 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:29:38.971 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:29:38.971 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:29:39.111 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:29:39.112 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +08:29:39.112 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-29-38/resourceDatabase.rdb) +08:29:39.262 ENGINE : GameProject load +08:29:39.262 ENGINE : Loaded addons: +08:29:39.262 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:29:39.262 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:29:39.262 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:29:39.262 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:29:39.262 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:29:39.262 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:29:39.262 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:29:39.264 ENGINE : Loading custom engine user config '$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:29:39.265 INIT : GameProject engine user settings load @"$profile:.save/app1874880_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:29:39.265 ENGINE : Engine user settings config loaded +08:29:39.265 PROFILING : Settings changed took: 0.001500 ms +08:29:39.265 ENGINE : Locale info: system en-US (English), user en-US (English) +08:29:39.398 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:29:39.399 RENDER : Basic screen setup: +08:29:39.399 RENDER : Back buffer width x height: 1280x720 +08:29:39.399 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:29:39.399 RENDER : MSAA : none +08:29:39.412 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:29:39.412 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:29:39.412 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:29:39.412 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:29:39.412 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:29:39.412 RENDER : AMD AGS correctly initialized +08:29:39.412 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 +08:29:39.412 RENDER : Detected output devices: +08:29:39.412 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:29:39.412 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:29:39.412 RENDER : Concurrent frames limit 2 +08:29:39.498 RENDER : DX12 device successfully created by AMD AGS library +08:29:39.498 RENDER : * user markers not supported in this version AMD SW +08:29:39.498 RENDER : Graphics device features +08:29:39.498 RENDER : Needed: +08:29:39.498 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:29:39.498 RENDER : Optional: +08:29:39.498 RENDER : * Allow tearing (VSYNC) : 1 +08:29:39.498 RENDER : * 16 bits : 1 +08:29:39.498 RENDER : * Resource heap tier : 3 +08:29:39.498 RENDER : * Persistent heaps (DRED) : 1 +08:29:39.498 RENDER : * DRED 1.2 is supported by compiler +08:29:39.521 RENDER : Main RT format setup. +08:29:39.521 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:29:39.521 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:29:39.526 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7 +08:29:39.556 PROFILING : Settings changed took: 1.179100 ms +08:29:39.564 RENDER : RENDER : Reload shaders +08:29:39.564 RENDER : Enfusion shader version 13 +08:29:39.564 INIT : INIT : ShaderListReload +08:29:39.564 PROFILING : ShaderListReload took: 0.000500 ms +08:29:40.817 RENDER : Loaded 3383 newer shader binaries +08:29:40.817 PROFILING : Reload shaders took: 1253.332000 ms +08:29:40.820 ENGINE : Initializing inputs. +08:29:40.833 NETWORK : Initializing networking. +08:29:40.833 NETWORK : Using new GameRplScheduler. +08:29:40.833 SCRIPT : SCRIPT : Initializing scripts +08:29:40.834 SCRIPT : SCRIPT : ScriptProjectManager init +08:29:40.834 PROFILING : ScriptProjectManager init took: 0.011100 ms +08:29:40.918 PROFILING : Initializing scripts took: 84.750200 ms +08:29:40.918 BACKEND : Backend Services are disabled. +08:29:40.918 ENGINE : Enfusion engine successfully created. +08:29:40.924 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:29:40.949 GUI : Using default language (en_us) +08:29:40.949 GUI : Loading 'en_us' localization file. +08:29:40.949 INIT : INIT : Loading StringTable +08:29:40.972 PROFILING : Loading StringTable took: 23.168500 ms +08:29:40.972 SCRIPT : SCRIPT : Compiling GameLib scripts +08:29:41.026 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 +08:29:41.027 PROFILING : Compiling GameLib scripts took: 54.879700 ms +08:29:41.027 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:29:41.027 SCRIPT : SCRIPT : Compiling Game scripts +08:29:42.185 SCRIPT : Compiling Game scripts +08:29:42.185 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:29:42.185 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:29:42.417 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.427 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:29:42.453 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:29:42.581 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:29:42.632 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:29:42.644 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:29:42.644 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:29:42.646 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:29:42.691 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.691 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.693 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:29:42.693 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:29:42.748 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:29:42.863 SCRIPT : Module: Game; loaded 5757x files; 11172x classes; used 26894K 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: a36d27f8 +08:29:42.888 PROFILING : Compiling Game scripts took: 1860.668000 ms +08:29:42.888 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:29:42.924 ENGINE : Game successfully created. +08:29:43.010 PLATFORM : Save data from container 'settings' have been loaded +08:29:43.110 PLATFORM : Save data from container 'sessions' have been loaded +08:29:43.512 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:29:43.512 ENGINE : Game user settings config loaded +08:29:43.608 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission 'worlds/MainMenuWorld/MainMenuWorld.ent'. +08:29:43.610 WORLD : WORLD : Entities load 'worlds/MainMenuWorld/MainMenuWorld.ent' +08:29:43.611 PROFILING : Entities load took: 0.917400 ms +08:29:43.612 WORLD : WORLD : Game::LoadEntities +08:29:43.612 WORLD : WORLD : Initializing world systems +08:29:43.614 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:29:43.614 WORLD : WORLD : CreateEntities +08:29:43.614 WORLD : WORLD : CreateEntities +08:29:43.614 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:29:43.624 RESOURCES : Loaded mission headers from 7 addon(s)! +08:29:43.624 PROFILING : NotifyBeforeEntitiesCreated took: 10.506000 ms +08:29:43.624 WORLD : WORLD : Wait for preloading data +08:29:43.624 PROFILING : Wait for preloading data took: 0.000900 ms +08:29:43.625 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:29:43.625 PROFILING : NotifyBeforeEntitiesInitialized took: 0.020500 ms +08:29:43.625 WORLD : InitEntities 'world' +08:29:43.625 ENTITY : Init entity @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> +08:29:43.625 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +08:29:43.634 WORLD : WORLD : NotifyEntitiesInitialized +08:29:43.634 DEFAULT : DEFAULT : WorldVolumesCollection +08:29:43.634 PROFILING : WorldVolumesCollection took: 0.006600 ms +08:29:43.634 PROFILING : NotifyEntitiesInitialized took: 0.081100 ms +08:29:43.634 PROFILING : CreateEntities took: 20.292000 ms +08:29:43.634 PROFILING : CreateEntities took: 20.299700 ms +08:29:43.634 WORLD : WORLD : EOnActivate +08:29:43.634 PROFILING : EOnActivate took: 0.003100 ms +08:29:43.634 PROFILING : Game::LoadEntities took: 21.958400 ms +08:29:43.808 DEFAULT : Entered main menu. +08:29:43.908 DEFAULT (W): No GameMode present in the world, using fallback logic! +08:29:43.908 SCRIPT : ERR ORDINARY: requesting header project=chat +08:29:44.428 ENGINE : Game destroyed. +08:29:44.553 ENGINE : Addon dirs: +08:29:44.553 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:29:44.553 ENGINE : dir: './addons' +08:29:44.553 ENGINE : dir: 'Z:/tmp/erri-game-profile/addons' +08:29:44.553 ENGINE : dir: '$profile:../addons/' +08:29:44.553 ENGINE : Available addons: +08:29:44.553 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:29:44.553 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:29:44.553 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:29:44.553 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:29:44.553 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:29:44.553 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:29:44.553 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:29:44.553 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:29:44.553 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:29:44.553 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:29:44.554 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:29:44.554 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:29:44.656 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger +08:29:44.660 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:29:44.660 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:29:44.660 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:29:44.660 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:29:44.661 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:29:44.661 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:29:44.661 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=./addons/data/resourceDatabase.rdb) +08:29:44.775 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:29:44.777 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-game-profile\profile/resourceDatabase.rdb) +08:29:44.777 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-29-38/resourceDatabase.rdb) +08:29:44.916 ENGINE : GameProject load +08:29:44.916 ENGINE : Loaded addons: +08:29:44.916 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:29:44.916 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:29:44.916 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:29:44.916 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:29:44.916 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:29:44.916 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:29:44.916 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:29:44.933 GUI : Using default language (en_us) +08:29:44.933 GUI : Loading 'en_us' localization file. +08:29:44.933 INIT : INIT : Loading StringTable +08:29:44.952 PROFILING : Loading StringTable took: 18.921800 ms +08:29:44.952 SCRIPT : SCRIPT : Compiling GameLib scripts +08:29:45.001 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 +08:29:45.001 PROFILING : Compiling GameLib scripts took: 48.548500 ms +08:29:45.001 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:29:45.001 SCRIPT : SCRIPT : Compiling Game scripts +08:29:46.050 SCRIPT : Compiling Game scripts +08:29:46.050 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:29:46.050 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:29:46.274 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.284 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:29:46.311 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:29:46.434 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:29:46.479 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:29:46.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:29:46.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:29:46.494 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:29:46.537 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.537 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.539 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:29:46.539 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:29:46.589 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:29:46.702 SCRIPT : Module: Game; loaded 5757x files; 11172x classes; used 26869K 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: a36d27f8 +08:29:46.728 PROFILING : Compiling Game scripts took: 1726.703500 ms +08:29:46.728 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:29:46.750 ENGINE : Game successfully created. +08:29:46.790 PLATFORM : Save data from container 'settings' have been loaded +08:29:46.889 PLATFORM : Save data from container 'sessions' have been loaded +08:29:46.889 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:29:46.889 ENGINE : Game user settings config loaded +08:29:46.989 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'. +08:29:46.990 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:29:47.944 PROFILING : Entities load took: 953.908300 ms +08:29:47.946 WORLD : WORLD : Game::LoadEntities +08:29:47.946 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf" +08:29:47.947 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:29:47.947 WORLD : WORLD : CreateEntities +08:29:47.947 WORLD : WORLD : CreateEntities +08:29:47.947 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:29:47.960 RESOURCES : Loaded mission headers from 7 addon(s)! +08:29:47.960 PROFILING : NotifyBeforeEntitiesCreated took: 12.749100 ms +08:29:47.960 WORLD : WORLD : Wait for preloading data +08:29:48.578 PROFILING : Wait for preloading data took: 618.300800 ms +08:29:48.691 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:29:48.691 PROFILING : PROFILING : Terrain load +08:29:50.681 PROFILING : Terrain load took: 1989.806500 ms +08:29:53.378 WORLD : Game::LoadEntities +08:29:53.378 WORLD : CreateEntities +08:29:53.378 WORLD : CreateEntities +08:29:53.378 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" +08:29:53.378 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:29:53.378 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:29:58.911 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:29:58.911 PROFILING : NotifyBeforeEntitiesInitialized took: 0.047300 ms +08:29:59.435 WORLD : InitEntities 'world' +08:29:59.435 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:29:59.435 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:29:59.457 WORLD : WORLD : NotifyEntitiesInitialized +08:29:59.457 TERRAIN : TERRAIN : Initializing road networks... +08:29:59.461 PROFILING : Initializing road networks... took: 4.068500 ms +08:29:59.461 DEFAULT : DEFAULT : WorldVolumesCollection +08:29:59.516 PROFILING : WorldVolumesCollection took: 55.601100 ms +08:29:59.517 INIT : INIT : SoundWorldInit +08:29:59.531 PROFILING : SoundWorldInit took: 14.486200 ms +08:29:59.531 PROFILING : NotifyEntitiesInitialized took: 74.358500 ms +08:29:59.531 PROFILING : CreateEntities took: 11583.521700 ms +08:29:59.531 PROFILING : CreateEntities took: 11583.689500 ms +08:29:59.532 WORLD : WORLD : Wait for preloading data around camera +08:29:59.782 PROFILING : Wait for preloading data around camera took: 250.402000 ms +08:29:59.782 WORLD : WORLD : EOnActivate +08:29:59.812 PROFILING : EOnActivate took: 29.196000 ms +08:29:59.812 PROFILING : Game::LoadEntities took: 11865.417800 ms +08:30:00.192 DEFAULT : Entered offline game state. +08:30:00.296 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +08:30:00.296 NETWORK : Player connected: connectionID=2147483646 +08:30:00.296 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:30:00.296 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:30:00.300 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:30:00.300 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:30:00.300 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:30:00.300 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! +08:30:00.300 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! +08:30:00.302 SCRIPT (W): Can't open config file "" +08:30:00.302 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:30:00.302 WORLD : InitEntities 'world' +08:30:00.303 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:30:00.303 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:30:00.303 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:30:00.303 SCRIPT (W): Slot_Chat Has no Content! +08:30:00.303 SCRIPT (W): Slot_VON Has no Content! +08:30:00.303 SCRIPT (W): Slot_AvailableActions Has no Content! +08:30:00.303 SCRIPT (W): Slot_Vehicle Has no Content! +08:30:00.303 SCRIPT (W): Slot_GameVersion Has no Content! +08:30:00.303 SCRIPT (W): Slot_Notifications Has no Content! +08:30:00.303 SCRIPT (W): Slot_Hints Has no Content! +08:30:00.308 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:30:00.309 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +08:30:00.309 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +08:30:00.309 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +08:30:00.309 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:30:00.309 NETWORK : Players connecting: 0 +08:30:00.309 NETWORK : Players connected: 1 / 1 +08:30:00.319 WORLD : Frame start +08:30:00.319 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:30:00.330 WORLD : UpdateEntities +08:30:00.330 WORLD : Frame +08:30:00.330 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:30:00.469 WORLD : UpdateEntities +08:30:00.469 WORLD : PostFrame +08:30:00.469 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:30:00.469 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:30:00.510 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:30:00.510 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:30:00.510 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:30:00.510 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:30:00.641 RENDER : RENDER : ObjectsHeightMap::Build +08:30:00.641 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:30:00.780 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 139.722500 ms +08:30:00.787 PROFILING : ObjectsHeightMap::Build took: 146.678500 ms +08:30:01.781 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:30:01.794 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:30:01.795 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:30:01.817 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:30:01.818 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:30:01.874 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:30:01.874 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:30:01.881 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:30:01.925 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:30:01.925 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:30:01.926 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:30:01.926 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:30:01.930 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:30:01.931 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:30:01.931 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:30:01.932 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:30:01.932 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:30:01.932 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:30:01.932 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:30:01.932 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:30:01.932 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:30:01.932 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 +08:30:01.932 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:30:01.932 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:30:01.932 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 +08:30:01.932 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:30:01.932 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:30:01.932 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 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:03.113 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5132,7499.69> up=0.995365 +08:30:03.113 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.151315 angularSpeed=0.099362 +08:30:03.113 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +08:30:03.113 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6103,7501.96> +08:30:03.113 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3103,7501.96> terrainY=63.3178 tireTerrainGap=-0.00753784 +08:30:03.113 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6103,7501.96> radius=0.3 bottom=<7012.03,63.3103,7501.96> fraction=0.420225 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00754929 +08:30:03.113 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6086,7497.69> +08:30:03.113 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1586,7497.69> terrainY=64.1573 tireTerrainGap=0.00125885 +08:30:03.113 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6086,7497.69> radius=0.45 bottom=<7009.87,64.1586,7497.69> fraction=0.460157 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00123596 +08:30:03.113 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2596,7497.75> +08:30:03.113 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8096,7497.75> terrainY=63.8176 tireTerrainGap=-0.00792313 +08:30:03.113 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2596,7497.75> radius=0.45 bottom=<7014.42,63.8096,7497.75> fraction=0.418611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00790405 +08:30:03.113 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:03.913 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:03.913 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:03.913 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:04.179 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5431,7499.72> up=0.994229 +08:30:04.179 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0742717 angularSpeed=0.0608579 +08:30:04.179 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:04.179 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6163,7501.99> +08:30:04.179 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3163,7501.99> terrainY=63.3139 tireTerrainGap=0.00242233 +08:30:04.179 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6163,7501.99> radius=0.3 bottom=<7012.06,63.3163,7501.99> fraction=0.466106 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0025444 +08:30:04.179 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6055,7497.71> +08:30:04.179 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1555,7497.71> terrainY=64.1496 tireTerrainGap=0.00593567 +08:30:04.179 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6055,7497.71> radius=0.45 bottom=<7009.92,64.1555,7497.71> fraction=0.481481 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00592804 +08:30:04.179 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2656,7497.78> +08:30:04.179 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8156,7497.78> terrainY=63.8154 tireTerrainGap=0.00018692 +08:30:04.179 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2656,7497.78> radius=0.45 bottom=<7014.46,63.8156,7497.78> fraction=0.455278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000160217 +08:30:04.179 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:04.179 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:05.246 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5282,7499.75> up=0.994216 +08:30:05.246 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0905053 angularSpeed=0.0382754 +08:30:05.246 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:05.246 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6113,7502.02> +08:30:05.246 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3113,7502.02> terrainY=63.3109 tireTerrainGap=0.000419617 +08:30:05.246 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6113,7502.02> radius=0.3 bottom=<7012.07,63.3113,7502.02> fraction=0.456443 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000419617 +08:30:05.246 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5958,7497.73> +08:30:05.246 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1458,7497.73> terrainY=64.1425 tireTerrainGap=0.00321198 +08:30:05.246 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5958,7497.73> radius=0.45 bottom=<7009.97,64.1458,7497.73> fraction=0.469136 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00321198 +08:30:05.246 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +08:30:05.246 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8123 tireTerrainGap=-0.00192642 +08:30:05.246 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.445556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00197601 +08:30:05.246 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:05.512 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:05.512 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:05.513 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:05.513 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:06.312 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994124 +08:30:06.312 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:30:06.312 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:06.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:30:06.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151062 +08:30:06.312 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +08:30:06.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:30:06.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00229645 +08:30:06.312 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 +08:30:06.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:30:06.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.0021019 +08:30:06.312 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:30:06.312 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:06.579 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:06.580 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.580 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.580 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:07.112 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.113 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.113 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.113 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.379 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994124 +08:30:07.379 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:30:07.379 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:07.379 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:30:07.379 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151062 +08:30:07.379 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +08:30:07.379 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:30:07.379 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00229645 +08:30:07.379 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 +08:30:07.379 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:30:07.379 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.0021019 +08:30:07.379 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:30:07.379 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:07.645 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.646 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:30:07.653 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:30:07.654 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:30:07.654 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:30:08.347 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:30:08.383 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +08:30:08.383 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> diff --git a/docs/evidence/game-2026-09-19-082938/error.log.txt b/docs/evidence/game-2026-09-19-082938/error.log.txt new file mode 100644 index 0000000..62a43c7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/error.log.txt @@ -0,0 +1,81 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-29-38\error.log started at 2026-09-19 08:29:40 (2026-09-19 06:29:40 UTC) + +08:29:40.924 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:29:42.185 SCRIPT : Compiling Game scripts +08:29:42.185 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:29:42.185 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:29:42.417 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.427 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:29:42.453 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:29:42.581 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:29:42.632 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:29:42.644 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:29:42.644 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:29:42.646 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:29:42.691 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.691 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.693 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:29:42.693 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:29:42.748 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:29:43.908 DEFAULT (W): No GameMode present in the world, using fallback logic! +08:29:46.050 SCRIPT : Compiling Game scripts +08:29:46.050 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:29:46.050 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:29:46.274 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.284 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:29:46.311 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:29:46.434 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:29:46.479 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:29:46.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:29:46.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:29:46.494 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:29:46.537 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.537 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.539 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:29:46.539 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:29:46.589 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:29:53.378 WORLD : Game::LoadEntities +08:29:53.378 WORLD : CreateEntities +08:29:53.378 WORLD : CreateEntities +08:29:53.378 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" +08:29:53.378 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:29:53.378 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:29:59.435 WORLD : InitEntities 'world' +08:29:59.435 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:29:59.435 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:30:00.300 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:30:00.300 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:30:00.300 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:30:00.300 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! +08:30:00.300 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! +08:30:00.302 SCRIPT (W): Can't open config file "" +08:30:00.302 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:30:00.302 WORLD : InitEntities 'world' +08:30:00.303 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:30:00.303 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:30:00.303 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:30:00.303 SCRIPT (W): Slot_Chat Has no Content! +08:30:00.303 SCRIPT (W): Slot_VON Has no Content! +08:30:00.303 SCRIPT (W): Slot_AvailableActions Has no Content! +08:30:00.303 SCRIPT (W): Slot_Vehicle Has no Content! +08:30:00.303 SCRIPT (W): Slot_GameVersion Has no Content! +08:30:00.303 SCRIPT (W): Slot_Notifications Has no Content! +08:30:00.303 SCRIPT (W): Slot_Hints Has no Content! +08:30:00.309 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:30:00.469 WORLD : UpdateEntities +08:30:00.469 WORLD : PostFrame +08:30:00.469 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:30:00.469 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:30:00.510 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:30:00.510 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:30:00.510 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:30:00.510 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab diff --git a/docs/evidence/game-2026-09-19-082938/game-startup-report.json.txt b/docs/evidence/game-2026-09-19-082938/game-startup-report.json.txt new file mode 100644 index 0000000..82f8203 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/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-082938/headless-launch.log.txt b/docs/evidence/game-2026-09-19-082938/headless-launch.log.txt new file mode 100644 index 0000000..34d946e --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/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: 165 +[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: 0x7fc4d01815c0 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x7fc4d01815c0 +[Gamescope WSI] Destroyed swapchain: 0x7fc4d01815c0 +[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: 0x7fc4d01815c0 - imageCount: 3 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/game-2026-09-19-082938/launch-source-sha256.json b/docs/evidence/game-2026-09-19-082938/launch-source-sha256.json new file mode 100644 index 0000000..0f71883 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/launch-source-sha256.json @@ -0,0 +1,162 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-082938/launch-source.json b/docs/evidence/game-2026-09-19-082938/launch-source.json new file mode 100644 index 0000000..171f2ec --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/launch-source.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "launch_id": "226695b7-892a-4dc5-9c84-f1c57dcf6b10", + "captured_unix": 1789799377.1936214, + "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", + "-noBackend", + "-noSound", + "-noSplash", + "-noThrow", + "-disableCrashReporter", + "-logconsole" + ], + "manifest_sha256": "acfe86be51639bf0394e7992f9a33ec7d7f6f7b58449490994285ae6378e1315" +} diff --git a/docs/evidence/game-2026-09-19-082938/report.json b/docs/evidence/game-2026-09-19-082938/report.json new file mode 100644 index 0000000..5c120f8 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/report.json @@ -0,0 +1,23 @@ +{ + "log": "docs/evidence/game-2026-09-19-082938/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 +} diff --git a/docs/evidence/game-2026-09-19-082938/rereintroduced-hq.log.txt b/docs/evidence/game-2026-09-19-082938/rereintroduced-hq.log.txt new file mode 100644 index 0000000..edd3e27 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/rereintroduced-hq.log.txt @@ -0,0 +1,9 @@ +#1 t=7s M0 REGISTER group 1 [session=1789799399-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=1789799399-1] +#3 t=9s M0 REGISTER group 2 [session=1789799399-1] +#4 t=9s M0 REGISTER group 3 [session=1789799399-1] +#5 t=9s M0 REGISTER group 4 [session=1789799399-1] +#6 t=9s M0 REGISTER group 5 [session=1789799399-1] +#7 t=9s M0 REGISTER group 6 [session=1789799399-1] +#8 t=9s M0 REGISTER group 7 [session=1789799399-1] +#9 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=1789799399-1] diff --git a/docs/evidence/game-2026-09-19-082938/runner.json.txt b/docs/evidence/game-2026-09-19-082938/runner.json.txt new file mode 100644 index 0000000..d3ba16f --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/runner.json.txt @@ -0,0 +1,25 @@ +{ + "stopped_unix": 1789799424.352471, + "console_sha256": "4f97a7b9b15f64a932d1bc77167112d1c7ad34399d9e6b12c81320310870eacf", + "end_source_sha256": "acfe86be51639bf0394e7992f9a33ec7d7f6f7b58449490994285ae6378e1315", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "226695b7-892a-4dc5-9c84-f1c57dcf6b10", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "acfe86be51639bf0394e7992f9a33ec7d7f6f7b58449490994285ae6378e1315", + "started_unix": 1789799377.1936934, + "result": "game-started", + "session": "/tmp/erri-game-profile/logs/logs_2026-09-19_08-29-38", + "project": "chat", + "cleanup_confirmed": true, + "runner_error": null, + "failure_grace_seconds": 30, + "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", + "scope": "ordinary game compile/startup; no scripted fixture, full escape or multiplayer acceptance" +} diff --git a/docs/evidence/game-2026-09-19-082938/script.log.txt b/docs/evidence/game-2026-09-19-082938/script.log.txt new file mode 100644 index 0000000..5b7dc2b --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/script.log.txt @@ -0,0 +1,225 @@ +--------------------------------------------- +Log Z:\tmp\erri-game-profile\logs\logs_2026-09-19_08-29-38\script.log started at 2026-09-19 08:29:40 (2026-09-19 06:29:40 UTC) + +08:29:40.834 SCRIPT : SCRIPT : Initializing scripts +08:29:40.834 SCRIPT : SCRIPT : ScriptProjectManager init +08:29:40.972 SCRIPT : SCRIPT : Compiling GameLib scripts +08:29:41.026 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 +08:29:41.027 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:29:41.027 SCRIPT : SCRIPT : Compiling Game scripts +08:29:42.185 SCRIPT : Compiling Game scripts +08:29:42.185 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:29:42.185 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:29:42.417 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.427 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:29:42.453 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:29:42.550 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:29:42.581 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:29:42.632 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:29:42.644 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:29:42.644 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:29:42.646 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:29:42.691 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.691 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:42.693 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:29:42.693 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:29:42.748 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:29:42.863 SCRIPT : Module: Game; loaded 5757x files; 11172x classes; used 26894K 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: a36d27f8 +08:29:43.625 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Internal_CheckAddons() +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Callback_CheckAddons_OnSuccess() +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> FinalizeInitAfterAsyncChecks() +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> Init Finished +08:29:43.634 SCRIPT : [SCR_AddonManager] SCR_AddonManager<0x000000002BB801D8> @"ENTITY:3" ('SCR_AddonManager') at <0.000000 0.000000 0.000000> User Workshop access: 1 +08:29:43.908 SCRIPT : ERR ORDINARY: requesting header project=chat +08:29:44.952 SCRIPT : SCRIPT : Compiling GameLib scripts +08:29:45.001 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 +08:29:45.001 SCRIPT : ERR ORDINARY: diagnostic noSplash honored before Game compilation +08:29:45.001 SCRIPT : SCRIPT : Compiling Game scripts +08:29:46.050 SCRIPT : Compiling Game scripts +08:29:46.050 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:29:46.050 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:29:46.274 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.284 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:29:46.311 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:29:46.404 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:29:46.434 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:29:46.479 SCRIPT (W): @"Scripts/Game/ERR/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete +08:29:46.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:29:46.492 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:29:46.494 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:29:46.537 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.537 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:29:46.539 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:29:46.539 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:29:46.589 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:29:46.702 SCRIPT : Module: Game; loaded 5757x files; 11172x classes; used 26869K 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: a36d27f8 +08:29:59.435 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:30:00.296 SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems +08:30:00.300 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! +08:30:00.300 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! +08:30:00.302 SCRIPT (W): Can't open config file "" +08:30:00.302 SCRIPT (W): Cannot update game blocklist. Backend is offline. +08:30:00.303 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:30:00.303 SCRIPT (W): Slot_Chat Has no Content! +08:30:00.303 SCRIPT (W): Slot_VON Has no Content! +08:30:00.303 SCRIPT (W): Slot_AvailableActions Has no Content! +08:30:00.303 SCRIPT (W): Slot_Vehicle Has no Content! +08:30:00.303 SCRIPT (W): Slot_GameVersion Has no Content! +08:30:00.303 SCRIPT (W): Slot_Notifications Has no Content! +08:30:00.303 SCRIPT (W): Slot_Hints Has no Content! +08:30:00.309 SCRIPT : ERR ORDINARY ADMISSION: server=1 sessionMode=0 modePresent=1 controllerPresent=1 identityPresent=0 nameLength=5 +08:30:00.309 SCRIPT : ERR ORDINARY IDENTITY: rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0 +08:30:00.309 SCRIPT : Rereintroduced [admission]: sole offline controller uses a generated local-round roster key; backend identity and permissions unchanged. +08:30:00.309 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:30:00.319 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:30:00.330 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:30:00.469 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:30:01.781 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:30:01.794 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:30:01.795 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:30:01.817 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:30:01.818 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:30:01.874 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:30:01.874 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:30:01.882 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:30:01.925 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:30:01.925 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:30:01.926 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:30:01.926 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:30:01.930 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:30:01.931 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:30:01.931 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:30:01.932 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:30:01.932 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:30:01.932 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:30:01.932 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:30:01.932 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:30:01.932 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:30:01.932 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 +08:30:01.932 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:30:01.932 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:30:01.932 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 +08:30:01.932 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:30:01.932 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:30:01.932 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 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:01.932 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:02.835 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:03.113 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.06,63.5132,7499.69> up=0.995365 +08:30:03.113 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.151315 angularSpeed=0.099362 +08:30:03.113 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.3 +08:30:03.113 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.03,63.6103,7501.96> +08:30:03.113 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.03,63.3103,7501.96> terrainY=63.3178 tireTerrainGap=-0.00753784 +08:30:03.113 SCRIPT : ERR GEAR SUPPORT: center=<7012.03,63.6103,7501.96> radius=0.3 bottom=<7012.03,63.3103,7501.96> fraction=0.420225 normal=<0.0154358,0.987894,0.154358> self=0 dynamic=0 supported=1 gap=-0.00754929 +08:30:03.113 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.87,64.6086,7497.69> +08:30:03.113 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.87,64.1586,7497.69> terrainY=64.1573 tireTerrainGap=0.00125885 +08:30:03.113 SCRIPT : ERR GEAR SUPPORT: center=<7009.87,64.6086,7497.69> radius=0.45 bottom=<7009.87,64.1586,7497.69> fraction=0.460157 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00123596 +08:30:03.113 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2596,7497.75> +08:30:03.113 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8096,7497.75> terrainY=63.8176 tireTerrainGap=-0.00792313 +08:30:03.113 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2596,7497.75> radius=0.45 bottom=<7014.42,63.8096,7497.75> fraction=0.418611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00790405 +08:30:03.113 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:03.351 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:30:03.913 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:03.913 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:03.913 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:04.179 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5431,7499.72> up=0.994229 +08:30:04.179 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0742717 angularSpeed=0.0608579 +08:30:04.179 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:04.179 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6163,7501.99> +08:30:04.179 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3163,7501.99> terrainY=63.3139 tireTerrainGap=0.00242233 +08:30:04.179 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6163,7501.99> radius=0.3 bottom=<7012.06,63.3163,7501.99> fraction=0.466106 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0025444 +08:30:04.179 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.92,64.6055,7497.71> +08:30:04.179 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.92,64.1555,7497.71> terrainY=64.1496 tireTerrainGap=0.00593567 +08:30:04.179 SCRIPT : ERR GEAR SUPPORT: center=<7009.92,64.6055,7497.71> radius=0.45 bottom=<7009.92,64.1555,7497.71> fraction=0.481481 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00592804 +08:30:04.179 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2656,7497.78> +08:30:04.179 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8156,7497.78> terrainY=63.8154 tireTerrainGap=0.00018692 +08:30:04.179 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2656,7497.78> radius=0.45 bottom=<7014.46,63.8156,7497.78> fraction=0.455278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=0.000160217 +08:30:04.179 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:04.179 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:30:04.447 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:04.979 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:30:05.246 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5282,7499.75> up=0.994216 +08:30:05.246 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0905053 angularSpeed=0.0382754 +08:30:05.246 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:05.246 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6113,7502.02> +08:30:05.246 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3113,7502.02> terrainY=63.3109 tireTerrainGap=0.000419617 +08:30:05.246 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6113,7502.02> radius=0.3 bottom=<7012.07,63.3113,7502.02> fraction=0.456443 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.000419617 +08:30:05.246 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5958,7497.73> +08:30:05.246 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1458,7497.73> terrainY=64.1425 tireTerrainGap=0.00321198 +08:30:05.246 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5958,7497.73> radius=0.45 bottom=<7009.97,64.1458,7497.73> fraction=0.469136 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00321198 +08:30:05.246 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +08:30:05.246 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8123 tireTerrainGap=-0.00192642 +08:30:05.246 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.445556 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00197601 +08:30:05.246 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:05.512 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:05.512 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:05.513 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:05.513 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.046 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:30:06.312 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994124 +08:30:06.312 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:30:06.312 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:06.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:30:06.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151062 +08:30:06.312 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +08:30:06.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:30:06.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00229645 +08:30:06.312 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 +08:30:06.312 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:30:06.312 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.0021019 +08:30:06.312 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:30:06.312 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:06.579 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:06.580 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.580 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:06.580 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:30:07.112 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.113 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.113 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.113 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.379 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5289,7499.75> up=0.994124 +08:30:07.379 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:30:07.379 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:30:07.379 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6119,7502.03> +08:30:07.379 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3119,7502.03> terrainY=63.3104 tireTerrainGap=0.00151062 +08:30:07.379 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6119,7502.03> radius=0.3 bottom=<7012.07,63.3119,7502.03> fraction=0.461324 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00149155 +08:30:07.379 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:30:07.379 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1416 tireTerrainGap=0.00229645 +08:30:07.379 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 +08:30:07.379 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2598,7497.84> +08:30:07.379 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8098,7497.84> terrainY=63.8119 tireTerrainGap=-0.0021019 +08:30:07.379 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2598,7497.84> radius=0.45 bottom=<7014.51,63.8098,7497.84> fraction=0.445 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00209808 +08:30:07.379 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:30:07.645 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:30:07.646 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:30:07.653 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:30:07.654 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:30:07.654 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:30:08.347 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:30:08.383 SCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison +08:30:08.383 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> diff --git a/docs/evidence/game-2026-09-19-082938/source-provenance.json b/docs/evidence/game-2026-09-19-082938/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/game-2026-09-19-082938/source-sha256.json b/docs/evidence/game-2026-09-19-082938/source-sha256.json new file mode 100644 index 0000000..0f71883 --- /dev/null +++ b/docs/evidence/game-2026-09-19-082938/source-sha256.json @@ -0,0 +1,162 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-080656/console.log.txt b/docs/evidence/native-2026-09-19-080656/console.log.txt new file mode 100644 index 0000000..5393c9b --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/console.log.txt @@ -0,0 +1,1478 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-06-56\console.log started at 2026-09-19 08:06:56 (2026-09-19 06:06:56 UTC) + +08:06:56.245 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-06-56' to filesystem under name logs +08:06:56.245 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:06:56.245 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:06:56.247 PROFILING : Workbench Create Engine took: 10.448600 ms +08:06:57.281 INIT : INIT : Workbench Init Engine +08:06:57.281 ENGINE : Initializing engine, version 192142 +08:06:57.281 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 -errStationTeardownDiag 1 +08:06:57.290 ENGINE : Addon dirs: +08:06:57.290 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:06:57.290 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:06:57.290 ENGINE : dir: './addons' +08:06:57.290 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:06:57.290 ENGINE : Available addons: +08:06:57.290 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:06:57.290 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:06:57.290 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:06:57.290 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:06:57.290 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:06:57.290 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:06:57.290 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:06:57.291 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:06:57.406 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:06:57.409 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:06:57.409 ENGINE : CPU vendor : AuthenticAMD +08:06:57.409 ENGINE : CPU type : 2 +08:06:57.409 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:06:57.409 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:06:57.409 ENGINE : CPU count logical : 16 +08:06:57.409 ENGINE : CPU count physical : 8 +08:06:57.409 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:06:57.409 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:06:57.409 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:06:57.541 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:06:57.543 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:06:57.543 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-06-56/resourceDatabase.rdb) +08:06:57.690 RESOURCES : RESOURCES : ResourceDB: full scan +08:06:57.694 RESOURCES : RESOURCES : scanning... +08:06:57.694 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:06:57.698 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:06:57.831 RESOURCES : RESOURCES : scanning @"core" +08:06:57.835 RESOURCES : RESOURCES : scanning @"profile" +08:06:57.836 RESOURCES : RESOURCES : scanning @"logs" +08:06:57.836 RESOURCES : RESOURCES : processing meta-files... +08:06:57.903 RESOURCES : RESOURCES : processing files... +08:06:57.913 INIT : Workbench startup +08:06:57.914 INIT : Workbench Init Engine +08:06:57.914 RESOURCES : ResourceDB: full scan +08:06:57.914 RESOURCES : processing files... +08:06:57.914 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:06:57.914 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:06:57.914 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:06:57.914 RESOURCES : RESOURCES : processing folders... +08:06:57.920 RESOURCES : RESOURCES : creating GUID-item mapping... +08:06:57.936 RESOURCES : RESOURCES : building tree... +08:06:57.990 PROFILING : ResourceDB: full scan took: 299.807100 ms +08:06:57.991 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:06:57.992 RESOURCES : ResourceDB: written 6147/6147 bytes +08:06:57.992 RESOURCES : ResourceDB: cache successfully saved +08:06:57.993 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:06:57.994 RESOURCES : ResourceDB: written 206/206 bytes +08:06:57.994 RESOURCES : ResourceDB: cache successfully saved +08:06:57.994 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-06-56/resourceDatabase.rdb) +08:06:57.995 RESOURCES : ResourceDB: written 162/162 bytes +08:06:57.995 RESOURCES : ResourceDB: cache successfully saved +08:06:57.995 ENGINE : GameProject load +08:06:57.995 ENGINE : Loaded addons: +08:06:57.995 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:06:57.995 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:06:57.995 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:06:57.997 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:06:57.998 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:06:57.998 ENGINE : Engine user settings config loaded +08:06:57.998 PROFILING : Settings changed took: 0.001600 ms +08:06:58.099 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:06:58.101 RENDER : Basic screen setup: +08:06:58.101 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:06:58.101 RENDER : MSAA : none +08:06:58.113 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:06:58.113 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:06:58.113 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:06:58.113 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:06:58.114 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:06:58.114 RENDER : AMD AGS correctly initialized +08:06:58.114 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 +08:06:58.114 RENDER : Detected output devices: +08:06:58.114 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:06:58.114 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:06:58.114 RENDER : Concurrent frames limit 2 +08:06:58.187 RENDER : DX12 device successfully created by AMD AGS library +08:06:58.187 RENDER : * user markers not supported in this version AMD SW +08:06:58.187 RENDER : Graphics device features +08:06:58.187 RENDER : Needed: +08:06:58.187 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:06:58.187 RENDER : Optional: +08:06:58.187 RENDER : * Allow tearing (VSYNC) : 1 +08:06:58.187 RENDER : * 16 bits : 1 +08:06:58.187 RENDER : * Resource heap tier : 3 +08:06:58.187 RENDER : * Persistent heaps (DRED) : 1 +08:06:58.187 RENDER : * DRED 1.2 is supported by compiler +08:06:58.209 RENDER : Main RT format setup. +08:06:58.209 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:06:58.209 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:06:58.210 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:06:58.238 PROFILING : Settings changed took: 0.017300 ms +08:06:58.655 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:06:58.655 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:06:58.655 AUDIO : Audio client: +08:06:58.655 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:06:58.658 RENDER : RENDER : Reload shaders +08:06:58.658 RENDER : Enfusion shader version 13 +08:06:58.658 INIT : INIT : ShaderListReload +08:06:58.658 PROFILING : ShaderListReload took: 0.000500 ms +08:06:58.797 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:06:58.797 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:06:58.797 AUDIO : Audio client: +08:06:58.797 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:06:58.900 RENDER : Loaded 3752 newer shader binaries +08:06:58.901 PROFILING : Reload shaders took: 242.775200 ms +08:06:58.901 ENGINE : Initializing inputs. +08:06:58.913 NETWORK : Initializing networking. +08:06:58.913 NETWORK : Using new GameRplScheduler. +08:06:58.913 SCRIPT : SCRIPT : Initializing scripts +08:06:58.913 SCRIPT : SCRIPT : ScriptProjectManager init +08:06:59.759 PROFILING : ScriptProjectManager init took: 845.946400 ms +08:06:59.794 PROFILING : Initializing scripts took: 881.106200 ms +08:06:59.811 ENGINE : Enfusion engine successfully created. +08:06:59.811 PROFILING : Workbench Init Engine took: 2530.182700 ms +08:06:59.811 INIT : INIT : Workbench Create Game +08:06:59.821 GUI : Using default language (en_us) +08:06:59.821 GUI : Loading 'en_us' localization file. +08:06:59.821 INIT : INIT : Loading StringTable +08:06:59.845 PROFILING : Loading StringTable took: 23.461300 ms +08:06:59.845 SCRIPT : SCRIPT : Compiling GameLib scripts +08:06:59.902 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 +08:06:59.902 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 +08:06:59.903 PROFILING : Compiling GameLib scripts took: 58.187700 ms +08:06:59.903 SCRIPT : SCRIPT : Compiling Game scripts +08:07:01.032 INIT : Workbench Create Game +08:07:01.032 SCRIPT : Compiling Game scripts +08:07:01.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:07:01.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:07:01.183 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.303 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:07:01.336 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:07:01.469 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:07:01.532 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:07:01.532 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:07:01.534 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:07:01.575 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.576 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.577 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:07:01.577 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:07:01.603 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.635 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:07:01.896 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 +08:07:01.904 SCRIPT : Module: Game; loaded 5731x files; 11226x classes; used 32853K 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: 1f1aa887 +08:07:01.942 PROFILING : Compiling Game scripts took: 2038.900000 ms +08:07:01.948 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:07:01.990 ENGINE : Game successfully created. +08:07:01.991 PROFILING : Workbench Create Game took: 2179.608700 ms +08:07:01.999 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +08:07:02.801 INIT : INIT : Workbench Reload Game +08:07:02.802 ENGINE : Game destroyed. +08:07:02.808 GUI : Using default language (en_us) +08:07:02.808 GUI : Loading 'en_us' localization file. +08:07:02.808 INIT : INIT : Loading StringTable +08:07:02.819 PROFILING : Loading StringTable took: 10.677900 ms +08:07:02.819 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:07:02.826 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:07:02.826 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:07:02.826 ENGINE : Game successfully created. +08:07:02.826 ENGINE : Game successfully initialized. +08:07:02.826 PROFILING : Workbench Reload Game took: 25.198500 ms +08:07:03.513 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:07:04.521 PROFILING : Entities load took: 1006.551000 ms +08:07:04.533 WORLD : WORLD : CreateEntities +08:07:04.538 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:07:04.538 PROFILING : NotifyBeforeEntitiesCreated took: 0.003500 ms +08:07:04.538 WORLD : WORLD : Wait for preloading data +08:07:04.538 PROFILING : Wait for preloading data took: 0.003300 ms +08:07:04.650 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:07:04.650 PROFILING : PROFILING : Terrain load +08:07:06.219 PROFILING : Terrain load took: 1568.252800 ms +08:07:10.179 WORLD : CreateEntities +08:07:10.180 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" +08:07:10.180 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:07:10.180 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:07:19.615 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:07:19.615 PROFILING : NotifyBeforeEntitiesInitialized took: 0.007100 ms +08:07:20.052 WORLD : WORLD : NotifyEntitiesInitialized +08:07:20.052 TERRAIN : TERRAIN : Initializing road networks... +08:07:20.055 PROFILING : Initializing road networks... took: 2.205100 ms +08:07:20.055 PROFILING : NotifyEntitiesInitialized took: 2.546900 ms +08:07:20.055 PROFILING : CreateEntities took: 15521.478300 ms +08:07:20.227 PROFILING : * WorldEditor: LoadWorld: 16719.416400 ms +08:07:21.800 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:07:21.800 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:07:21.801 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:07:21.802 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:07:21.920 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:07:21.944 BACKEND : Attempting online Game Config instead. +08:07:25.195 INIT : INIT : Workbench Reload Game +08:07:25.198 ENGINE : Game destroyed. +08:07:25.204 GUI : Using default language (en_us) +08:07:25.204 GUI : Loading 'en_us' localization file. +08:07:25.204 INIT : INIT : Loading StringTable +08:07:25.227 PROFILING : Loading StringTable took: 22.187700 ms +08:07:25.227 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:07:25.235 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:07:25.235 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:07:25.235 ENGINE : Game successfully created. +08:07:25.235 ENGINE : Game successfully initialized. +08:07:25.235 PROFILING : Workbench Reload Game took: 39.714800 ms +08:07:25.237 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:07:25.285 PLATFORM : Save data from container 'settings' have been loaded +08:07:25.376 PLATFORM : Save data from container 'sessions' have been loaded +08:07:25.376 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:07:25.376 ENGINE : Game user settings config loaded +08:07:25.473 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:07:25.480 WORLD : WORLD : Game::LoadEntities +08:07:25.480 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:07:25.481 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:07:25.481 WORLD : WORLD : CreateEntities +08:07:25.481 WORLD : WORLD : CreateEntities +08:07:25.481 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:07:25.486 RESOURCES : Loaded mission headers from 7 addon(s)! +08:07:25.486 PROFILING : NotifyBeforeEntitiesCreated took: 4.409200 ms +08:07:25.486 WORLD : WORLD : Wait for preloading data +08:07:25.486 PROFILING : Wait for preloading data took: 0.000500 ms +08:07:29.985 WORLD : Game::LoadEntities +08:07:29.985 WORLD : CreateEntities +08:07:29.985 WORLD : CreateEntities +08:07:29.985 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" +08:07:29.985 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:07:29.985 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:07:31.362 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:07:31.362 ENTITY : CreateComponent 'Hierarchy' +08:07:31.362 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>') +08:07:31.362 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:07:31.363 ENTITY : CreateComponent 'Hierarchy' +08:07:31.363 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>') +08:07:31.363 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:07:31.363 ENTITY : CreateComponent 'Hierarchy' +08:07:31.363 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>') +08:07:31.368 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:07:31.368 ENTITY : CreateComponent 'Hierarchy' +08:07:31.368 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>') +08:07:31.368 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:07:31.368 ENTITY : CreateComponent 'Hierarchy' +08:07:31.368 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>') +08:07:31.368 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:07:31.368 ENTITY : CreateComponent 'Hierarchy' +08:07:31.368 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>') +08:07:31.372 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:07:31.372 ENTITY : CreateComponent 'Hierarchy' +08:07:31.372 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>') +08:07:31.372 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:07:31.372 ENTITY : CreateComponent 'Hierarchy' +08:07:31.372 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>') +08:07:31.372 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:07:31.372 ENTITY : CreateComponent 'Hierarchy' +08:07:31.372 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>') +08:07:36.192 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:07:36.192 PROFILING : NotifyBeforeEntitiesInitialized took: 0.048500 ms +08:07:38.152 WORLD : InitEntities 'world' +08:07:38.152 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:07:38.152 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:07:38.187 WORLD : InitEntities 'world' +08:07:38.187 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:07:38.187 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:07:38.188 WORLD : WORLD : NotifyEntitiesInitialized +08:07:38.188 TERRAIN : TERRAIN : Initializing road networks... +08:07:38.190 PROFILING : Initializing road networks... took: 2.262100 ms +08:07:38.190 DEFAULT : DEFAULT : WorldVolumesCollection +08:07:38.258 PROFILING : WorldVolumesCollection took: 68.290900 ms +08:07:38.258 INIT : INIT : SoundWorldInit +08:07:38.273 PROFILING : SoundWorldInit took: 15.027000 ms +08:07:38.273 PROFILING : NotifyEntitiesInitialized took: 85.814100 ms +08:07:38.274 PROFILING : CreateEntities took: 12792.104300 ms +08:07:38.274 PROFILING : CreateEntities took: 12792.299500 ms +08:07:38.274 WORLD : WORLD : Wait for preloading data around camera +08:07:38.274 PROFILING : Wait for preloading data around camera took: 0.001300 ms +08:07:38.274 WORLD : WORLD : EOnActivate +08:07:38.310 PROFILING : EOnActivate took: 36.133500 ms +08:07:38.311 PROFILING : Game::LoadEntities took: 12830.557400 ms +08:07:38.572 DEFAULT : Entered offline game state. +08:07:38.675 NETWORK : Player connected: connectionID=2147483646 +08:07:38.675 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:07:38.676 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:07:38.680 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:07:38.680 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:07:38.681 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:07:38.681 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! +08:07:38.681 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! +08:07:38.683 SCRIPT (W): Can't open config file "" +08:07:38.688 WORLD : InitEntities 'world' +08:07:38.688 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:07:38.688 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:07:38.688 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:07:38.688 SCRIPT (W): Slot_Chat Has no Content! +08:07:38.689 SCRIPT (W): Slot_VON Has no Content! +08:07:38.689 SCRIPT (W): Slot_AvailableActions Has no Content! +08:07:38.689 SCRIPT (W): Slot_Vehicle Has no Content! +08:07:38.689 SCRIPT (W): Slot_GameVersion Has no Content! +08:07:38.689 SCRIPT (W): Slot_Notifications Has no Content! +08:07:38.689 SCRIPT (W): Slot_Hints Has no Content! +08:07:38.699 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:07:38.699 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:07:38.700 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:07:38.700 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. +08:07:38.700 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. +08:07:38.703 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:07:38.704 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:07:38.704 NETWORK : Players connecting: 0 +08:07:38.704 NETWORK : Players connected: 1 / 1 +08:07:38.736 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/autosaves +08:07:38.738 PROFILING : Workbench startup took: 42559.561600 ms +08:07:38.748 SCRIPT : ERR STATION INIT OWNERSHIP: n=1 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:07:38.749 SCRIPT : ERR STATION INIT OWNERSHIP: n=2 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:07:38.763 WORLD : Frame start +08:07:38.763 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:07:38.775 WORLD : UpdateEntities +08:07:38.775 WORLD : Frame +08:07:38.775 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:07:38.943 WORLD : UpdateEntities +08:07:38.943 WORLD : PostFrame +08:07:38.943 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:07:38.943 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:07:38.990 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:07:38.990 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:07:38.990 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:07:38.990 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:07:39.127 RENDER : RENDER : ObjectsHeightMap::Build +08:07:39.127 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:07:39.303 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 175.758100 ms +08:07:39.311 PROFILING : ObjectsHeightMap::Build took: 183.208300 ms +08:07:40.480 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:07:40.498 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:07:40.499 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:07:40.526 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:07:40.529 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:07:40.581 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:07:40.581 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:07:40.586 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:07:40.634 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:07:40.634 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:07:40.635 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:07:40.636 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:07:40.639 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:07:40.640 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:07:40.640 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:07:40.641 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:07:40.641 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:07:40.642 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:07:40.642 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:07:40.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:07:40.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:07:40.643 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 +08:07:40.643 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:07:40.643 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:07:40.643 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 +08:07:40.643 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:07:40.644 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:07:40.644 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 +08:07:40.644 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.644 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.644 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.645 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.645 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.645 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:41.398 WORLD : UpdateEntities +08:07:41.398 WORLD : AfterPostSimulate +08:07:41.398 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.749 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5235,7499.7> up=0.995654 +08:07:41.749 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.259243 angularSpeed=0.0359662 +08:07:41.749 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:41.749 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6129,7501.97> +08:07:41.749 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3129,7501.97> terrainY=63.3166 tireTerrainGap=-0.00376129 +08:07:41.749 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6129,7501.97> radius=0.3 bottom=<7012.06,63.3129,7501.97> fraction=0.437535 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00374222 +08:07:41.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6018,7497.71> +08:07:41.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1518,7497.71> terrainY=64.1557 tireTerrainGap=-0.0038681 +08:07:41.750 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6018,7497.71> radius=0.45 bottom=<7009.88,64.1518,7497.71> fraction=0.437149 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00382233 +08:07:41.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2622,7497.75> +08:07:41.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8122,7497.75> terrainY=63.8178 tireTerrainGap=-0.00556564 +08:07:41.750 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2622,7497.75> radius=0.45 bottom=<7014.42,63.8122,7497.75> fraction=0.429167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00558472 +08:07:41.750 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:42.295 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:42.295 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.296 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.802 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.71> up=0.994322 +08:07:42.802 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:07:42.802 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:42.802 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6201,7501.98> +08:07:42.803 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3201,7501.98> terrainY=63.3146 tireTerrainGap=0.00546265 +08:07:42.803 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6201,7501.98> radius=0.3 bottom=<7012.07,63.3201,7501.98> fraction=0.479821 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00556183 +08:07:42.803 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6026,7497.71> +08:07:42.803 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1526,7497.71> terrainY=64.1491 tireTerrainGap=0.0035553 +08:07:42.803 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6026,7497.71> radius=0.45 bottom=<7009.93,64.1526,7497.71> fraction=0.470819 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00358582 +08:07:42.803 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +08:07:42.804 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.00018692 +08:07:42.804 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000144958 +08:07:42.804 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:42.804 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:42.804 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.804 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.805 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.302 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:07:43.302 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.303 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.303 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.806 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5315,7499.74> up=0.994217 +08:07:43.806 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0409494 angularSpeed=0.0213691 +08:07:43.807 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:43.807 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6137,7502.01> +08:07:43.807 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3137,7502.01> terrainY=63.3116 tireTerrainGap=0.00212097 +08:07:43.807 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6137,7502.01> radius=0.3 bottom=<7012.08,63.3137,7502.01> fraction=0.464236 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00213242 +08:07:43.807 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +08:07:43.808 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1428 tireTerrainGap=0.00196838 +08:07:43.808 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +08:07:43.808 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.82> +08:07:43.808 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.82> terrainY=63.8128 tireTerrainGap=-0.00240707 +08:07:43.809 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.82> radius=0.45 bottom=<7014.51,63.8104,7497.82> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +08:07:43.809 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:43.809 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:43.809 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.810 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:43.810 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:44.827 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:07:44.827 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:07:44.827 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:44.827 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:07:44.827 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00161743 +08:07:44.828 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 +08:07:44.828 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:07:44.828 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247192 +08:07:44.828 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 +08:07:44.828 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:07:44.828 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207901 +08:07:44.829 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 +08:07:44.829 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:44.829 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:44.829 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.830 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.845 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:07:45.845 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:07:45.846 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:45.846 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:07:45.846 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00161743 +08:07:45.846 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 +08:07:45.846 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:07:45.846 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247192 +08:07:45.847 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 +08:07:45.847 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:07:45.847 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207901 +08:07:45.847 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 +08:07:45.847 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:45.847 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.848 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.848 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:07:45.848 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:07:45.849 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:07:45.849 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:07:45.994 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:07:46.033 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:07:46.276 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:07:46.276 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.278 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.278 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:07:46.279 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:07:46.279 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:07:46.279 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.280 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:07:46.280 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:07:46.280 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.280 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:07:46.281 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.281 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.282 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:07:46.282 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:07:46.282 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:07:46.283 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:07:46.283 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:07:46.284 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:07:46.285 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:07:46.285 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:07:46.285 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:07:46.285 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:07:46.285 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:07:46.290 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:07:46.777 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:07:46.778 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:46.780 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:07:46.780 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:07:47.283 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:07:47.283 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:07:47.283 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:07:47.284 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:07:47.284 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:07:47.284 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:07:47.286 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:07:47.286 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:07:47.286 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:07:47.289 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:07:47.291 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:07:47.291 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:07:47.295 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:07:47.295 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:07:47.296 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:07:47.296 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:07:47.301 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:07:47.301 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:07:47.305 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:07:47.305 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:07:47.305 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:07:47.305 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:07:47.306 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:07:47.306 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:07:47.306 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:07:47.306 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:07:47.306 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:07:47.307 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:07:47.307 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:07:47.307 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:07:47.308 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:07:47.308 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:07:47.312 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:07:47.313 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:07:47.314 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:07:47.314 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:07:47.315 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:07:47.315 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:07:47.316 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:07:47.324 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:07:47.325 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:07:47.325 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:07:47.325 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:47.326 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:07:47.326 SCRIPT : ERR BASE STOCK: cache items=54 +08:07:47.326 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:07:47.326 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:07:47.326 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:07:47.326 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:07:47.327 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:07:47.328 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:07:47.330 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:07:47.330 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:07:47.330 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:07:47.330 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:47.333 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:07:47.333 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:47.335 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:07:47.335 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:07:53.349 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:07:59.416 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:07:59.417 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:07:59.417 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6338.6,174.62,7465.53> target=<6340,175.788,7400> +08:08:05.503 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:08:11.583 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:08:11.583 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:08:12.087 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:08:12.105 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:08:14.611 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:08:15.119 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:08:17.142 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:08:17.142 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:08:17.142 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:08:17.143 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:08:17.143 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:08:17.143 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:08:17.146 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:08:17.146 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:08:18.663 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:08:18.663 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:08:18.666 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:08:18.672 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:08:19.679 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:08:19.680 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:08:19.680 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:08:20.712 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200> radio=<6500,159.756,7200> distanceXZ=6.00586 +08:08:20.712 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:08:21.728 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.05,159.667,7200.04> radio=<6500,159.756,7200> distanceXZ=2.05316 +08:08:21.728 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:08:22.731 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.668,7200.04> +08:08:23.745 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.668,7200.04> +08:08:24.755 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.529,7200.04> +08:08:25.256 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.05,159.529,7200.04> +08:08:25.256 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.05219 +08:08:25.256 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:08:25.256 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:08:25.257 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:08:25.257 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:08:26.269 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:08:27.285 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:08:27.285 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:08:28.305 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:08:29.316 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:08:30.330 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:08:31.341 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:08:32.353 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.1,159.666,7200.09> +08:08:33.368 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.1,159.527,7200.09> +08:08:33.868 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.1,159.527,7200.09> +08:08:33.868 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:08:34.889 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.68,159.875,7199.32> +08:08:35.907 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.68,159.875,7199.32> +08:08:36.407 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.68,159.875,7199.32> +08:08:36.407 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:08:37.418 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4946 +08:08:37.419 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:08:38.433 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:08:39.442 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:08:39.443 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:08:39.445 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:08:39.445 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:08:39.447 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:08:40.450 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:08:40.450 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00127774 +08:08:40.450 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:08:40.450 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:08:40.450 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:08:40.451 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:08:40.452 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:08:45.509 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:08:45.509 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:08:45.509 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:08:45.509 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:08:45.513 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:08:45.513 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:09:20.885 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +08:09:20.885 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +08:09:20.885 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +08:09:20.886 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +08:09:26.953 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +08:09:26.953 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +08:09:26.953 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +08:09:29.491 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +08:09:29.491 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +08:09:29.491 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +08:09:29.491 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:09:29.491 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:09:29.492 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:09:29.492 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:09:29.492 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:09:59.722 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:10:02.872 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +08:10:02.872 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +08:10:02.872 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +08:10:02.872 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +08:10:02.872 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +08:10:02.873 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:10:02.875 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:10:02.875 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:10:02.876 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +08:10:05.913 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +08:10:06.753 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:10:06.753 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +08:10:06.753 SCRIPT : ERR SMOKE COMPLETE: core-only escape +08:10:06.862 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:10:06.865 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:10:06.865 SCRIPT (W): Slot_Chat Has no Content! +08:10:06.865 SCRIPT (W): Slot_VON Has no Content! +08:10:06.865 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:06.865 SCRIPT (W): Slot_Notifications Has no Content! +08:10:08.913 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:10:08.913 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:10:08.913 SCRIPT : -- Stack trace -- +08:10:08.914 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:10:08.914 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:10:08.914 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:10:08.914 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:10:08.914 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:10:08.914 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:10:08.914 SCRIPT : ----------------- +08:10:08.914 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:10:08.914 SCRIPT : -- Stack trace -- +08:10:08.915 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:10:08.915 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:10:08.915 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:10:08.915 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:10:08.915 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:10:08.915 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:10:08.915 SCRIPT : ----------------- +08:10:08.917 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:10:08.917 SCRIPT (W): Slot_Chat Has no Content! +08:10:08.917 SCRIPT (W): Slot_VON Has no Content! +08:10:08.917 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:08.917 SCRIPT (W): Slot_Notifications Has no Content! +08:10:08.919 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:10:36.786 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:10:36.787 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:10:37.008 DEFAULT (W): Achievements cannot be saved. +08:10:37.008 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +08:10:37.308 PLATFORM : Save data from container 'settings' have been loaded +08:10:37.407 PLATFORM : Save data from container 'sessions' have been loaded +08:10:37.408 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:10:37.408 ENGINE : Game user settings config loaded +08:10:40.449 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=1 owner= prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:10:40.454 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=2 owner= prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:10:40.601 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:10:40.602 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:10:41.339 PROFILING : Entities load took: 737.249100 ms +08:10:41.341 WORLD : WORLD : Game::LoadEntities +08:10:41.342 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:10:41.342 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:10:41.342 WORLD : WORLD : CreateEntities +08:10:41.342 WORLD : WORLD : CreateEntities 'world' +08:10:41.342 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:10:41.343 RESOURCES : Unloading all loaded mission headers from 7 addon(s)! +08:10:41.347 RESOURCES : Loaded mission headers from 7 addon(s)! +08:10:41.347 PROFILING : NotifyBeforeEntitiesCreated took: 4.550300 ms +08:10:41.347 WORLD : WORLD : Wait for preloading data +08:10:41.347 PROFILING : Wait for preloading data took: 0.001300 ms +08:10:41.348 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:10:41.348 PROFILING : PROFILING : Terrain load +08:10:42.607 PROFILING : Terrain load took: 1259.709800 ms +08:10:45.496 WORLD : Game::LoadEntities +08:10:45.496 WORLD : CreateEntities +08:10:45.496 WORLD : CreateEntities 'world' +08:10:45.496 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" +08:10:45.496 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:10:45.496 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:10:46.826 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:10:46.826 ENTITY : CreateComponent 'Hierarchy' +08:10:46.826 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>') +08:10:46.826 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:10:46.826 ENTITY : CreateComponent 'Hierarchy' +08:10:46.826 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>') +08:10:46.826 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:10:46.826 ENTITY : CreateComponent 'Hierarchy' +08:10:46.826 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>') +08:10:46.831 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:10:46.831 ENTITY : CreateComponent 'Hierarchy' +08:10:46.831 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>') +08:10:46.831 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:10:46.831 ENTITY : CreateComponent 'Hierarchy' +08:10:46.831 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>') +08:10:46.831 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:10:46.831 ENTITY : CreateComponent 'Hierarchy' +08:10:46.831 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>') +08:10:46.835 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:10:46.835 ENTITY : CreateComponent 'Hierarchy' +08:10:46.835 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>') +08:10:46.835 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:10:46.835 ENTITY : CreateComponent 'Hierarchy' +08:10:46.835 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>') +08:10:46.835 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:10:46.835 ENTITY : CreateComponent 'Hierarchy' +08:10:46.835 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>') +08:10:51.483 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:10:51.483 PROFILING : NotifyBeforeEntitiesInitialized took: 0.056500 ms +08:10:53.446 WORLD : InitEntities 'world' +08:10:53.446 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:10:53.446 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:10:53.447 WORLD : InitEntities 'world' +08:10:53.447 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:10:53.447 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:10:53.447 WORLD : WORLD : NotifyEntitiesInitialized +08:10:53.447 TERRAIN : TERRAIN : Initializing road networks... +08:10:53.449 PROFILING : Initializing road networks... took: 1.766400 ms +08:10:53.449 DEFAULT : DEFAULT : WorldVolumesCollection +08:10:53.508 PROFILING : WorldVolumesCollection took: 58.799700 ms +08:10:53.508 INIT : INIT : SoundWorldInit +08:10:53.508 PROFILING : SoundWorldInit took: 0.205300 ms +08:10:53.508 PROFILING : NotifyEntitiesInitialized took: 60.916900 ms +08:10:53.508 PROFILING : CreateEntities took: 12165.271600 ms +08:10:53.508 PROFILING : CreateEntities took: 12165.455400 ms +08:10:53.509 WORLD : WORLD : Wait for preloading data around camera +08:10:53.509 PROFILING : Wait for preloading data around camera took: 0.001400 ms +08:10:53.509 WORLD : WORLD : EOnActivate +08:10:53.538 PROFILING : EOnActivate took: 29.082300 ms +08:10:53.538 PROFILING : Game::LoadEntities took: 12196.901600 ms +08:10:53.538 PROFILING : * LoadEntities: 12197.203400 ms +08:10:53.991 DEFAULT : Entered offline game state. +08:10:54.100 NETWORK : Player connected: connectionID=2147483646 +08:10:54.100 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:10:54.100 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:10:54.102 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:10:54.102 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:10:54.102 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:10:54.103 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! +08:10:54.103 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! +08:10:54.105 SCRIPT (W): Can't open config file "" +08:10:54.105 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:10:54.105 WORLD : InitEntities 'world' +08:10:54.106 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:10:54.106 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:10:54.106 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:10:54.106 SCRIPT (W): Slot_Chat Has no Content! +08:10:54.107 SCRIPT (W): Slot_VON Has no Content! +08:10:54.107 SCRIPT (W): Slot_AvailableActions Has no Content! +08:10:54.107 SCRIPT (W): Slot_Vehicle Has no Content! +08:10:54.107 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:54.107 SCRIPT (W): Slot_Notifications Has no Content! +08:10:54.108 SCRIPT (W): Slot_Hints Has no Content! +08:10:54.112 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:10:54.112 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:10:54.112 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:10:54.112 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. +08:10:54.113 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. +08:10:54.115 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:10:54.116 NETWORK : Players connecting: 0 +08:10:54.116 NETWORK : Players connected: 1 / 1 +08:10:54.123 SCRIPT : ERR STATION INIT OWNERSHIP: n=3 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:10:54.124 SCRIPT : ERR STATION INIT OWNERSHIP: n=4 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:10:54.136 WORLD : Frame start +08:10:54.136 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:10:54.149 WORLD : UpdateEntities +08:10:54.149 WORLD : Frame +08:10:54.149 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:10:54.279 WORLD : UpdateEntities +08:10:54.279 WORLD : PostFrame +08:10:54.279 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:10:54.280 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:10:54.301 RENDER : RENDER : ObjectsHeightMap::Build +08:10:54.302 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:10:54.458 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 156.348400 ms +08:10:54.464 PROFILING : ObjectsHeightMap::Build took: 162.276800 ms +08:10:55.652 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:10:55.658 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:10:55.658 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:10:55.667 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:10:55.669 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:10:55.679 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:10:55.680 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:10:55.685 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:10:55.697 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:10:55.698 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:10:55.700 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:10:55.701 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:10:55.704 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:10:55.705 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:10:55.705 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:10:55.707 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:10:55.707 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:10:55.707 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:10:55.707 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:10:55.707 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:10:55.708 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:10:55.708 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 +08:10:55.708 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:10:55.708 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:10:55.708 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 +08:10:55.708 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:10:55.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:10:55.709 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 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.710 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.710 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:56.372 WORLD : UpdateEntities +08:10:56.372 WORLD : AfterPostSimulate +08:10:56.372 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.662 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5673,7499.7> up=0.995201 +08:10:56.662 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.36388 angularSpeed=0.125462 +08:10:56.662 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:56.662 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6183,7501.98> +08:10:56.662 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3183,7501.98> terrainY=63.3149 tireTerrainGap=0.00342941 +08:10:56.662 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6183,7501.98> radius=0.3 bottom=<7012.07,63.3183,7501.98> fraction=0.470028 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00340652 +08:10:56.663 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5988,7497.72> +08:10:56.663 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1488,7497.72> terrainY=64.1552 tireTerrainGap=-0.00646973 +08:10:56.663 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5988,7497.72> radius=0.45 bottom=<7009.88,64.1488,7497.72> fraction=0.425687 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00634766 +08:10:56.663 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2666,7497.74> +08:10:56.663 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8166,7497.74> terrainY=63.818 tireTerrainGap=-0.00136185 +08:10:56.663 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2666,7497.74> radius=0.45 bottom=<7014.42,63.8166,7497.74> fraction=0.448333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00136566 +08:10:56.663 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:57.426 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:57.427 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.427 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.679 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5244,7499.72> up=0.993947 +08:10:57.679 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0532861 angularSpeed=0.0688037 +08:10:57.679 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:57.679 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6187,7501.99> +08:10:57.679 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3187,7501.99> terrainY=63.3144 tireTerrainGap=0.00434113 +08:10:57.680 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6187,7501.99> radius=0.3 bottom=<7012.06,63.3187,7501.99> fraction=0.47451 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00439072 +08:10:57.680 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.602,7497.72> +08:10:57.680 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.152,7497.72> terrainY=64.1502 tireTerrainGap=0.00185394 +08:10:57.680 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.602,7497.72> radius=0.45 bottom=<7009.91,64.152,7497.72> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +08:10:57.680 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2649,7497.78> +08:10:57.680 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8149,7497.78> terrainY=63.8156 tireTerrainGap=-0.000614166 +08:10:57.681 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2649,7497.78> radius=0.45 bottom=<7014.46,63.8149,7497.78> fraction=0.451667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00063324 +08:10:57.681 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:57.933 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.694 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5346,7499.74> up=0.993776 +08:10:58.694 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0252265 angularSpeed=0.0313119 +08:10:58.695 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:58.695 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6139,7502.01> +08:10:58.695 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3139,7502.01> terrainY=63.3117 tireTerrainGap=0.00211716 +08:10:58.695 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6139,7502.01> radius=0.3 bottom=<7012.06,63.3139,7502.01> fraction=0.463958 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00207138 +08:10:58.695 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5962,7497.72> +08:10:58.695 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1462,7497.72> terrainY=64.1441 tireTerrainGap=0.00217438 +08:10:58.696 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5962,7497.72> radius=0.45 bottom=<7009.96,64.1462,7497.72> fraction=0.464947 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00228882 +08:10:58.696 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.261,7497.83> +08:10:58.696 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.811,7497.83> terrainY=63.8128 tireTerrainGap=-0.00178909 +08:10:58.696 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.261,7497.83> radius=0.45 bottom=<7014.5,63.811,7497.83> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:10:58.696 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:58.944 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:58.944 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:58.945 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:58.945 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:59.455 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.455 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.455 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.456 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:59.733 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993809 +08:10:59.734 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:10:59.734 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:59.734 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +08:10:59.734 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00188828 +08:10:59.734 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463272 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00191879 +08:10:59.734 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +08:10:59.735 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00229645 +08:10:59.735 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 +08:10:59.735 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:10:59.735 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00201035 +08:10:59.735 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:10:59.735 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:59.983 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:10:59.983 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.984 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.984 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:11:00.492 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.492 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.492 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.493 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.747 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993809 +08:11:00.747 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:11:00.747 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:11:00.747 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +08:11:00.747 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00188828 +08:11:00.747 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463272 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00191879 +08:11:00.748 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +08:11:00.748 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00229645 +08:11:00.748 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 +08:11:00.748 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:11:00.748 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00201035 +08:11:00.748 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:11:00.748 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:11:00.998 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.999 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:11:00.999 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:11:01.000 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:11:01.000 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:11:01.175 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:11:01.204 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:11:01.272 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.274 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.274 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:11:01.274 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:11:01.275 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:11:01.275 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:11:01.276 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:11:01.276 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.277 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.277 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:11:01.277 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:11:01.278 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:11:01.278 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:11:01.279 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:11:01.279 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:11:01.280 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:11:01.280 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:11:01.280 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:11:01.280 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:11:01.280 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:01.283 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:11:01.283 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:01.285 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:11:01.285 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:11:01.285 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:11:01.775 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:11:01.775 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:01.777 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:01.779 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:11:02.283 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:11:02.283 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:11:02.286 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:11:02.291 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:11:02.295 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:11:02.296 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:11:02.296 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:11:02.296 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:11:02.297 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:11:02.297 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:11:02.297 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:11:02.299 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:11:02.299 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:11:02.299 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:11:02.300 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:11:02.300 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:11:02.301 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:11:02.301 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:11:02.301 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:11:02.304 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:11:02.304 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:11:02.308 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:11:02.308 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:11:02.308 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:11:02.309 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:11:02.311 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:11:02.311 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:11:02.311 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:11:02.311 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:11:02.311 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:11:02.312 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:11:02.312 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:11:02.312 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:11:02.312 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:11:02.312 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:11:02.312 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:11:02.312 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:11:02.313 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:11:02.313 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:11:02.313 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:11:02.314 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:11:02.314 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:11:02.314 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:11:02.326 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:11:02.327 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:11:02.328 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:11:02.328 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:11:02.329 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:11:02.330 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:11:02.330 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:11:02.331 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:11:02.331 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:11:02.332 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:11:02.332 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:11:02.332 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:11:02.340 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:11:02.341 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:11:02.341 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:11:02.341 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:11:02.341 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:02.342 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:11:02.342 SCRIPT : ERR BASE STOCK: cache items=54 +08:11:02.343 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:11:02.343 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:11:02.343 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:11:02.343 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:11:02.343 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:11:02.344 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:11:02.347 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:11:02.347 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:11:02.347 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:11:02.347 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:02.350 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:11:02.350 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:11:02.351 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:02.351 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:02.351 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:02.352 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:02.352 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:11:02.352 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:11:08.325 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:11:14.384 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:11:14.384 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:11:14.384 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.18,174.68,7466.34> target=<6340,175.788,7400> +08:11:20.442 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:11:26.503 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:11:26.504 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:11:27.011 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:11:27.326 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:11:29.551 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:11:30.344 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:11:32.069 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:32.070 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:32.072 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:11:32.072 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:11:33.597 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:11:33.597 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:11:33.600 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:11:33.607 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:11:34.603 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:11:34.604 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:11:34.604 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:11:35.606 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200.01> radio=<6500,159.756,7200> distanceXZ=6.00537 +08:11:35.606 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:11:36.607 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.02,159.672,7200.04> radio=<6500,159.756,7200> distanceXZ=2.0238 +08:11:36.608 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:11:37.620 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.02,159.671,7200.04> +08:11:38.634 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.02,159.671,7200.04> +08:11:39.645 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.02,159.53,7200.04> +08:11:40.145 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.02,159.53,7200.04> +08:11:40.145 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.02427 +08:11:40.145 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:11:40.146 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:11:40.146 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:11:40.146 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:11:41.157 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:11:42.167 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:11:42.167 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:11:43.178 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:11:44.191 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:11:45.207 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:11:46.212 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:11:47.221 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.668,7200.08> +08:11:48.244 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.528,7200.08> +08:11:48.745 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.07,159.528,7200.08> +08:11:48.745 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:11:49.751 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.79,159.868,7199.32> +08:11:50.765 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.79,159.868,7199.32> +08:11:51.266 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.79,159.868,7199.32> +08:11:51.266 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:11:52.284 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4946 +08:11:52.285 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:11:53.287 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:11:54.290 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:11:54.291 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:11:54.294 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:11:54.294 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:11:55.294 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:11:55.294 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00139591 +08:11:55.294 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:11:55.294 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:11:55.295 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:11:55.296 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:11:55.296 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:12:00.339 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:12:00.339 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:12:00.339 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:12:00.340 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:12:00.343 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:12:00.343 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:12:35.703 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +08:12:35.703 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +08:12:35.703 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +08:12:35.704 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +08:12:41.772 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +08:12:41.773 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +08:12:41.773 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +08:12:44.316 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +08:12:44.316 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +08:12:44.316 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +08:12:44.316 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:12:44.316 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:13:14.884 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:13:17.771 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +08:13:17.771 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +08:13:17.772 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +08:13:17.772 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +08:13:17.772 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +08:13:17.772 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:13:17.774 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:13:17.774 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:13:17.775 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +08:13:20.837 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +08:13:20.926 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:13:20.927 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +08:13:20.927 SCRIPT : ERR SMOKE COMPLETE: core-only escape +08:13:21.035 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:13:21.037 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:13:21.037 SCRIPT (W): Slot_Chat Has no Content! +08:13:21.038 SCRIPT (W): Slot_VON Has no Content! +08:13:21.038 SCRIPT (W): Slot_GameVersion Has no Content! +08:13:21.038 SCRIPT (W): Slot_Notifications Has no Content! +08:13:23.107 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:13:23.108 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:13:23.108 SCRIPT : -- Stack trace -- +08:13:23.108 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:13:23.108 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:13:23.108 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:13:23.108 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:13:23.108 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:13:23.108 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:13:23.109 SCRIPT : ----------------- +08:13:23.109 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:13:23.109 SCRIPT : -- Stack trace -- +08:13:23.109 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:13:23.109 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:13:23.109 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:13:23.109 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:13:23.109 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:13:23.109 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:13:23.110 SCRIPT : ----------------- +08:13:23.112 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:13:23.112 SCRIPT (W): Slot_Chat Has no Content! +08:13:23.112 SCRIPT (W): Slot_VON Has no Content! +08:13:23.112 SCRIPT (W): Slot_GameVersion Has no Content! +08:13:23.112 SCRIPT (W): Slot_Notifications Has no Content! +08:13:23.113 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-080656/error.log.txt b/docs/evidence/native-2026-09-19-080656/error.log.txt new file mode 100644 index 0000000..8ae3383 --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/error.log.txt @@ -0,0 +1,200 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-06-56\error.log started at 2026-09-19 08:06:57 (2026-09-19 06:06:57 UTC) + +08:06:57.913 INIT : Workbench startup +08:06:57.913 INIT : Workbench Init Engine +08:06:57.914 RESOURCES : ResourceDB: full scan +08:06:57.914 RESOURCES : processing files... +08:06:57.914 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:06:57.914 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:06:57.914 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:07:01.032 INIT : Workbench Create Game +08:07:01.032 SCRIPT : Compiling Game scripts +08:07:01.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:07:01.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:07:01.183 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.303 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:07:01.336 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:07:01.469 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:07:01.532 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:07:01.532 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:07:01.534 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:07:01.575 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.576 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.577 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:07:01.577 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:07:01.603 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.635 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:07:10.179 WORLD : CreateEntities +08:07:10.180 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" +08:07:10.180 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:07:10.180 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:07:25.237 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:07:29.985 WORLD : Game::LoadEntities +08:07:29.985 WORLD : CreateEntities +08:07:29.985 WORLD : CreateEntities +08:07:29.985 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" +08:07:29.985 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:07:29.985 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:07:31.362 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:07:31.362 ENTITY : CreateComponent 'Hierarchy' +08:07:31.362 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>') +08:07:31.362 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:07:31.362 ENTITY : CreateComponent 'Hierarchy' +08:07:31.363 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>') +08:07:31.363 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:07:31.363 ENTITY : CreateComponent 'Hierarchy' +08:07:31.363 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>') +08:07:31.367 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:07:31.368 ENTITY : CreateComponent 'Hierarchy' +08:07:31.368 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>') +08:07:31.368 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:07:31.368 ENTITY : CreateComponent 'Hierarchy' +08:07:31.368 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>') +08:07:31.368 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:07:31.368 ENTITY : CreateComponent 'Hierarchy' +08:07:31.368 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>') +08:07:31.372 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:07:31.372 ENTITY : CreateComponent 'Hierarchy' +08:07:31.372 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>') +08:07:31.372 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:07:31.372 ENTITY : CreateComponent 'Hierarchy' +08:07:31.372 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>') +08:07:31.372 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:07:31.372 ENTITY : CreateComponent 'Hierarchy' +08:07:31.372 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>') +08:07:38.152 WORLD : InitEntities 'world' +08:07:38.152 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:07:38.152 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:07:38.680 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:07:38.680 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:07:38.681 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:07:38.681 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! +08:07:38.681 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! +08:07:38.683 SCRIPT (W): Can't open config file "" +08:07:38.688 WORLD : InitEntities 'world' +08:07:38.688 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:07:38.688 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:07:38.688 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:07:38.688 SCRIPT (W): Slot_Chat Has no Content! +08:07:38.689 SCRIPT (W): Slot_VON Has no Content! +08:07:38.689 SCRIPT (W): Slot_AvailableActions Has no Content! +08:07:38.689 SCRIPT (W): Slot_Vehicle Has no Content! +08:07:38.689 SCRIPT (W): Slot_GameVersion Has no Content! +08:07:38.689 SCRIPT (W): Slot_Notifications Has no Content! +08:07:38.689 SCRIPT (W): Slot_Hints Has no Content! +08:07:38.699 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:07:38.699 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:07:38.700 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:07:38.700 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. +08:07:38.700 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. +08:07:38.704 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:07:38.943 WORLD : UpdateEntities +08:07:38.943 WORLD : PostFrame +08:07:38.943 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:07:38.943 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:07:38.990 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:07:38.990 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:07:38.990 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:07:38.990 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:07:41.398 WORLD : UpdateEntities +08:07:41.398 WORLD : AfterPostSimulate +08:07:41.398 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:10:06.865 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:10:06.865 SCRIPT (W): Slot_Chat Has no Content! +08:10:06.865 SCRIPT (W): Slot_VON Has no Content! +08:10:06.865 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:06.865 SCRIPT (W): Slot_Notifications Has no Content! +08:10:08.913 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:10:08.914 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:10:08.917 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:10:08.917 SCRIPT (W): Slot_Chat Has no Content! +08:10:08.917 SCRIPT (W): Slot_VON Has no Content! +08:10:08.917 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:08.917 SCRIPT (W): Slot_Notifications Has no Content! +08:10:36.786 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:10:36.787 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:10:37.008 DEFAULT (W): Achievements cannot be saved. +08:10:37.008 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +08:10:45.496 WORLD : Game::LoadEntities +08:10:45.496 WORLD : CreateEntities +08:10:45.496 WORLD : CreateEntities 'world' +08:10:45.496 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" +08:10:45.496 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:10:45.496 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:10:46.826 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:10:46.826 ENTITY : CreateComponent 'Hierarchy' +08:10:46.826 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>') +08:10:46.826 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:10:46.826 ENTITY : CreateComponent 'Hierarchy' +08:10:46.826 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>') +08:10:46.826 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:10:46.826 ENTITY : CreateComponent 'Hierarchy' +08:10:46.826 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>') +08:10:46.831 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:10:46.831 ENTITY : CreateComponent 'Hierarchy' +08:10:46.831 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>') +08:10:46.831 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:10:46.831 ENTITY : CreateComponent 'Hierarchy' +08:10:46.831 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>') +08:10:46.831 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:10:46.831 ENTITY : CreateComponent 'Hierarchy' +08:10:46.831 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>') +08:10:46.835 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:10:46.835 ENTITY : CreateComponent 'Hierarchy' +08:10:46.835 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>') +08:10:46.835 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:10:46.835 ENTITY : CreateComponent 'Hierarchy' +08:10:46.835 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>') +08:10:46.835 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:10:46.835 ENTITY : CreateComponent 'Hierarchy' +08:10:46.835 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>') +08:10:53.446 WORLD : InitEntities 'world' +08:10:53.446 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:10:53.446 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:10:54.102 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:10:54.102 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:10:54.102 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:10:54.103 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! +08:10:54.103 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! +08:10:54.105 SCRIPT (W): Can't open config file "" +08:10:54.105 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:10:54.105 WORLD : InitEntities 'world' +08:10:54.106 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:10:54.106 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:10:54.106 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:10:54.106 SCRIPT (W): Slot_Chat Has no Content! +08:10:54.107 SCRIPT (W): Slot_VON Has no Content! +08:10:54.107 SCRIPT (W): Slot_AvailableActions Has no Content! +08:10:54.107 SCRIPT (W): Slot_Vehicle Has no Content! +08:10:54.107 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:54.107 SCRIPT (W): Slot_Notifications Has no Content! +08:10:54.108 SCRIPT (W): Slot_Hints Has no Content! +08:10:54.112 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:10:54.112 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:10:54.112 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:10:54.112 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. +08:10:54.113 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. +08:10:54.279 WORLD : UpdateEntities +08:10:54.279 WORLD : PostFrame +08:10:54.279 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:10:54.280 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:10:56.372 WORLD : UpdateEntities +08:10:56.372 WORLD : AfterPostSimulate +08:10:56.372 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:13:21.037 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:13:21.037 SCRIPT (W): Slot_Chat Has no Content! +08:13:21.038 SCRIPT (W): Slot_VON Has no Content! +08:13:21.038 SCRIPT (W): Slot_GameVersion Has no Content! +08:13:21.038 SCRIPT (W): Slot_Notifications Has no Content! +08:13:23.108 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:13:23.109 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:13:23.112 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:13:23.112 SCRIPT (W): Slot_Chat Has no Content! +08:13:23.112 SCRIPT (W): Slot_VON Has no Content! +08:13:23.112 SCRIPT (W): Slot_GameVersion Has no Content! +08:13:23.112 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-080656/headless-launch.log.txt b/docs/evidence/native-2026-09-19-080656/headless-launch.log.txt new file mode 100644 index 0000000..7388b17 --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/headless-launch.log.txt @@ -0,0 +1,157 @@ +[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: 167 +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x555573537d60 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x555573537d60 +[Gamescope WSI] Destroyed swapchain: 0x555573537d60 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x555573537d60 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x555573537d60 +[Gamescope WSI] Destroyed swapchain: 0x555573537d60 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555734d6460 - 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: 0x555573c7a390 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x555573c7a390 +[Gamescope WSI] Destroyed swapchain: 0x555573c7a390 +[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: 0x555573c7a390 - imageCount: 3 +[gamescope] [Info] wlserver: [wayland] Data too big for buffer (4092 + 12 > 4096). +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-080656/launch-source-sha256.json b/docs/evidence/native-2026-09-19-080656/launch-source-sha256.json new file mode 100644 index 0000000..b5c1cac --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/launch-source-sha256.json @@ -0,0 +1,158 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "0b954c856cfee9b5dbb6241a5001726ca6940c885f968c2ed60a84264be7a1f4", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "657e96d1112b68c8ced37793e99f88e6078b38a579190e63d00b1f9a9a032e26", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "12d8fc39d47e03c3838e0642aa9e4a80baf60f250357493bff812d5c75812c86", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "becf85c5d1eb31d6bd480e9854aaab426118ad81b7a01f549314668d29216bae", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "8094399f3ba4f46ab9659c5a92599dd63e5a8533505bf6073cf0dc27dd0acaad", + "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_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": "bdd87d9e5eaddb08bbcb0f82741550f73f0d0036dbf6e4dd57a1c0ce825e3077", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-080656/launch-source.json b/docs/evidence/native-2026-09-19-080656/launch-source.json new file mode 100644 index 0000000..cf5bdeb --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/launch-source.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "launch_id": "fdbab8e3-644e-44f9-b64a-9c71ad9db7db", + "captured_unix": 1789798014.5840108, + "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", + "-errStationTeardownDiag", + "1" + ], + "manifest_sha256": "b5b69668097c576e5c97e27b96a2bf1f7533011ae34d8d5bc6f016f30bc9b983" +} diff --git a/docs/evidence/native-2026-09-19-080656/report.json b/docs/evidence/native-2026-09-19-080656/report.json new file mode 100644 index 0000000..304f571 --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-080656/console.log.txt", + "smoke_completions": 2, + "assertions_passed": 564, + "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-080656/runner.json.txt b/docs/evidence/native-2026-09-19-080656/runner.json.txt new file mode 100644 index 0000000..8139616 --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789798408.2429104, + "console_sha256": "dd2f0519a51b68453e19d07f60d4a75f10f06e6b7df3f5a2f1bd7e12b6cf9651", + "end_source_sha256": "b5b69668097c576e5c97e27b96a2bf1f7533011ae34d8d5bc6f016f30bc9b983", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "fdbab8e3-644e-44f9-b64a-9c71ad9db7db", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "b5b69668097c576e5c97e27b96a2bf1f7533011ae34d8d5bc6f016f30bc9b983", + "started_unix": 1789798014.5840921, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-06-56", + "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-080656/script.log.txt b/docs/evidence/native-2026-09-19-080656/script.log.txt new file mode 100644 index 0000000..c0137dc --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/script.log.txt @@ -0,0 +1,1078 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-06-56\script.log started at 2026-09-19 08:06:58 (2026-09-19 06:06:58 UTC) + +08:06:58.913 SCRIPT : SCRIPT : Initializing scripts +08:06:58.913 SCRIPT : SCRIPT : ScriptProjectManager init +08:06:59.845 SCRIPT : SCRIPT : Compiling GameLib scripts +08:06:59.902 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 +08:06:59.902 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 +08:06:59.903 SCRIPT : SCRIPT : Compiling Game scripts +08:07:01.032 SCRIPT : Compiling Game scripts +08:07:01.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:07:01.032 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:07:01.183 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.303 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:07:01.336 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:07:01.437 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:07:01.469 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:07:01.532 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:07:01.532 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:07:01.534 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:07:01.576 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.576 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.577 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:07:01.577 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:07:01.603 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:07:01.635 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:07:01.896 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 +08:07:01.904 SCRIPT : Module: Game; loaded 5731x files; 11226x classes; used 32853K 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: 1f1aa887 +08:07:02.826 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:07:02.826 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:07:21.920 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:07:25.235 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:07:25.235 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:07:38.152 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:07:38.187 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:07:38.681 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! +08:07:38.681 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! +08:07:38.683 SCRIPT (W): Can't open config file "" +08:07:38.688 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:07:38.688 SCRIPT (W): Slot_Chat Has no Content! +08:07:38.689 SCRIPT (W): Slot_VON Has no Content! +08:07:38.689 SCRIPT (W): Slot_AvailableActions Has no Content! +08:07:38.689 SCRIPT (W): Slot_Vehicle Has no Content! +08:07:38.689 SCRIPT (W): Slot_GameVersion Has no Content! +08:07:38.689 SCRIPT (W): Slot_Notifications Has no Content! +08:07:38.689 SCRIPT (W): Slot_Hints Has no Content! +08:07:38.700 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. +08:07:38.700 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. +08:07:38.704 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:07:38.748 SCRIPT : ERR STATION INIT OWNERSHIP: n=1 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:07:38.749 SCRIPT : ERR STATION INIT OWNERSHIP: n=2 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:07:38.763 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:07:38.775 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:07:38.943 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:07:40.480 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:07:40.498 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:07:40.499 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:07:40.526 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:07:40.529 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:07:40.581 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:07:40.581 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:07:40.586 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:07:40.634 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:07:40.634 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:07:40.636 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:07:40.636 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:07:40.639 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:07:40.640 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:07:40.640 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:07:40.641 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:07:40.641 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:07:40.642 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:07:40.642 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:07:40.642 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:07:40.642 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:07:40.643 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 +08:07:40.643 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:07:40.643 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:07:40.643 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 +08:07:40.643 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:07:40.644 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:07:40.644 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 +08:07:40.644 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.644 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.644 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.645 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.645 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:40.645 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.494 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:41.749 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5235,7499.7> up=0.995654 +08:07:41.749 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.259243 angularSpeed=0.0359662 +08:07:41.749 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:41.749 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6129,7501.97> +08:07:41.749 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3129,7501.97> terrainY=63.3166 tireTerrainGap=-0.00376129 +08:07:41.749 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6129,7501.97> radius=0.3 bottom=<7012.06,63.3129,7501.97> fraction=0.437535 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00374222 +08:07:41.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6018,7497.71> +08:07:41.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1518,7497.71> terrainY=64.1557 tireTerrainGap=-0.0038681 +08:07:41.750 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6018,7497.71> radius=0.45 bottom=<7009.88,64.1518,7497.71> fraction=0.437149 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00382233 +08:07:41.750 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2622,7497.75> +08:07:41.750 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8122,7497.75> terrainY=63.8178 tireTerrainGap=-0.00556564 +08:07:41.750 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2622,7497.75> radius=0.45 bottom=<7014.42,63.8122,7497.75> fraction=0.429167 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00558472 +08:07:41.750 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:42.004 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:07:42.295 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:42.295 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.296 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.802 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.71> up=0.994322 +08:07:42.802 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:07:42.802 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:42.802 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6201,7501.98> +08:07:42.803 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3201,7501.98> terrainY=63.3146 tireTerrainGap=0.00546265 +08:07:42.803 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6201,7501.98> radius=0.3 bottom=<7012.07,63.3201,7501.98> fraction=0.479821 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00556183 +08:07:42.803 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6026,7497.71> +08:07:42.803 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1526,7497.71> terrainY=64.1491 tireTerrainGap=0.0035553 +08:07:42.803 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6026,7497.71> radius=0.45 bottom=<7009.93,64.1526,7497.71> fraction=0.470819 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00358582 +08:07:42.803 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +08:07:42.804 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.00018692 +08:07:42.804 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000144958 +08:07:42.804 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:42.804 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:42.804 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.804 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:07:42.805 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.302 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:07:43.302 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.303 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.303 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.806 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5315,7499.74> up=0.994217 +08:07:43.806 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0409494 angularSpeed=0.0213691 +08:07:43.807 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:43.807 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6137,7502.01> +08:07:43.807 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3137,7502.01> terrainY=63.3116 tireTerrainGap=0.00212097 +08:07:43.807 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6137,7502.01> radius=0.3 bottom=<7012.08,63.3137,7502.01> fraction=0.464236 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00213242 +08:07:43.807 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +08:07:43.808 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1428 tireTerrainGap=0.00196838 +08:07:43.808 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +08:07:43.808 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.82> +08:07:43.808 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.82> terrainY=63.8128 tireTerrainGap=-0.00240707 +08:07:43.809 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.82> radius=0.45 bottom=<7014.51,63.8104,7497.82> fraction=0.443333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00246811 +08:07:43.809 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:43.809 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:43.809 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:07:43.810 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:43.810 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:44.320 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:07:44.827 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:07:44.827 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:07:44.827 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:44.827 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:07:44.827 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00161743 +08:07:44.828 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 +08:07:44.828 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:07:44.828 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247192 +08:07:44.828 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 +08:07:44.828 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:07:44.828 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207901 +08:07:44.829 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 +08:07:44.829 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:44.829 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:44.829 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.830 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:44.830 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.339 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.845 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:07:45.845 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:07:45.846 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:07:45.846 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:07:45.846 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00161743 +08:07:45.846 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 +08:07:45.846 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:07:45.846 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00247192 +08:07:45.847 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 +08:07:45.847 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:07:45.847 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8122 tireTerrainGap=-0.00207901 +08:07:45.847 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 +08:07:45.847 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:07:45.847 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.848 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:07:45.848 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:07:45.848 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:07:45.849 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:07:45.849 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:07:45.994 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:07:46.033 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:07:46.276 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:07:46.276 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:07:46.277 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.278 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.278 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:07:46.278 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:07:46.279 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:07:46.279 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:07:46.279 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:07:46.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.280 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:07:46.280 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:07:46.280 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.280 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:07:46.281 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.281 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:07:46.281 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:07:46.282 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:07:46.282 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.282 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:07:46.282 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:07:46.283 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.283 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:07:46.283 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:07:46.284 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:07:46.284 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:07:46.285 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:07:46.285 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:07:46.285 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:07:46.285 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:07:46.285 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:46.288 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:07:46.289 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:07:46.290 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:07:46.777 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:07:46.778 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:46.780 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:07:46.780 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:46.781 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:07:47.283 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:07:47.283 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:07:47.283 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:07:47.284 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:07:47.284 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:07:47.284 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:07:47.286 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:07:47.286 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:07:47.286 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:07:47.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:07:47.289 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:07:47.290 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:07:47.291 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:07:47.291 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:07:47.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:07:47.294 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:07:47.295 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:07:47.295 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:07:47.296 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:07:47.296 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:07:47.297 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:07:47.298 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:07:47.299 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:07:47.300 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:07:47.301 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:07:47.301 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:07:47.301 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:07:47.303 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:07:47.305 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:07:47.305 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:07:47.305 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:07:47.305 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:07:47.306 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:07:47.306 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:07:47.306 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:07:47.306 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:07:47.306 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:07:47.306 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:07:47.307 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:07:47.307 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:07:47.307 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:07:47.308 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:07:47.308 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:07:47.312 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:07:47.313 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:07:47.314 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:07:47.314 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:07:47.315 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:07:47.315 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:07:47.316 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:07:47.317 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:07:47.324 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:07:47.325 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:07:47.325 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:07:47.325 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:47.325 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:47.326 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:07:47.326 SCRIPT : ERR BASE STOCK: cache items=54 +08:07:47.326 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:07:47.326 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:07:47.326 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:07:47.326 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:07:47.327 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:07:47.328 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:07:47.330 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:07:47.330 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:07:47.330 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:07:47.330 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:07:47.333 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:07:47.333 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:07:47.334 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:07:47.335 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:07:47.335 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:07:53.349 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:07:59.416 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:07:59.417 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:07:59.417 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6338.6,174.62,7465.53> target=<6340,175.788,7400> +08:08:05.503 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:08:11.583 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:08:11.583 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:08:12.087 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:08:12.105 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:08:14.612 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:08:15.119 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:08:17.142 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:08:17.142 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:08:17.142 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:08:17.143 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:08:17.143 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:08:17.143 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:08:17.146 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:08:17.146 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:08:18.663 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:08:18.663 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:08:18.666 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:08:18.672 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:08:19.679 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:08:19.680 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:08:19.680 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:08:20.712 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200> radio=<6500,159.756,7200> distanceXZ=6.00586 +08:08:20.712 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:08:21.728 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.05,159.667,7200.04> radio=<6500,159.756,7200> distanceXZ=2.05316 +08:08:21.728 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:08:22.731 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.668,7200.04> +08:08:23.745 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.668,7200.04> +08:08:24.755 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.529,7200.04> +08:08:25.256 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.05,159.529,7200.04> +08:08:25.256 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.05219 +08:08:25.256 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:08:25.257 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:08:25.257 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:08:25.257 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:08:26.269 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:08:27.285 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:08:27.285 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:08:28.305 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:08:29.316 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:08:30.330 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:08:31.341 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:08:32.353 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.1,159.666,7200.09> +08:08:33.368 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.1,159.527,7200.09> +08:08:33.868 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.1,159.527,7200.09> +08:08:33.868 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:08:34.889 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.68,159.875,7199.32> +08:08:35.907 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.68,159.875,7199.32> +08:08:36.407 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.68,159.875,7199.32> +08:08:36.407 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:08:37.418 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4946 +08:08:37.419 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:08:38.433 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:08:39.442 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:08:39.443 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:08:39.445 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:08:39.445 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:08:39.448 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:08:40.450 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:08:40.450 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00127774 +08:08:40.450 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:08:40.450 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:08:40.451 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:08:40.451 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:08:40.452 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:08:45.509 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:08:45.509 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:08:45.509 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:08:45.509 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:08:45.512 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:08:45.513 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:08:45.513 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:09:20.885 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +08:09:20.885 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +08:09:20.885 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +08:09:20.886 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +08:09:26.953 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +08:09:26.953 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +08:09:26.953 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +08:09:29.491 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +08:09:29.491 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +08:09:29.491 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +08:09:29.491 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:09:29.491 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:09:29.492 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:09:29.492 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:09:29.492 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:09:59.722 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:10:02.872 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +08:10:02.872 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +08:10:02.872 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +08:10:02.872 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +08:10:02.872 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +08:10:02.873 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:10:02.875 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:10:02.875 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:10:02.876 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:10:02.876 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +08:10:05.914 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +08:10:06.753 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:10:06.753 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +08:10:06.753 SCRIPT : ERR SMOKE COMPLETE: core-only escape +08:10:06.862 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:10:06.865 SCRIPT (W): Slot_Chat Has no Content! +08:10:06.865 SCRIPT (W): Slot_VON Has no Content! +08:10:06.865 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:06.865 SCRIPT (W): Slot_Notifications Has no Content! +08:10:08.913 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:10:08.913 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:10:08.913 SCRIPT : -- Stack trace -- +08:10:08.914 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:10:08.914 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:10:08.914 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:10:08.914 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:10:08.914 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:10:08.914 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:10:08.914 SCRIPT : ----------------- +08:10:08.914 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:10:08.914 SCRIPT : -- Stack trace -- +08:10:08.915 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:10:08.915 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:10:08.915 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:10:08.915 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:10:08.915 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:10:08.915 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:10:08.915 SCRIPT : ----------------- +08:10:08.917 SCRIPT (W): Slot_Chat Has no Content! +08:10:08.917 SCRIPT (W): Slot_VON Has no Content! +08:10:08.917 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:08.917 SCRIPT (W): Slot_Notifications Has no Content! +08:10:08.919 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:10:36.786 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:10:36.787 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:10:40.449 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=1 owner= prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:10:40.454 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=2 owner= prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:10:53.446 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:10:53.447 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:10:54.103 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! +08:10:54.103 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! +08:10:54.105 SCRIPT (W): Can't open config file "" +08:10:54.105 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:10:54.106 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:10:54.106 SCRIPT (W): Slot_Chat Has no Content! +08:10:54.107 SCRIPT (W): Slot_VON Has no Content! +08:10:54.107 SCRIPT (W): Slot_AvailableActions Has no Content! +08:10:54.107 SCRIPT (W): Slot_Vehicle Has no Content! +08:10:54.107 SCRIPT (W): Slot_GameVersion Has no Content! +08:10:54.107 SCRIPT (W): Slot_Notifications Has no Content! +08:10:54.108 SCRIPT (W): Slot_Hints Has no Content! +08:10:54.112 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. +08:10:54.113 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. +08:10:54.123 SCRIPT : ERR STATION INIT OWNERSHIP: n=3 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:10:54.124 SCRIPT : ERR STATION INIT OWNERSHIP: n=4 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:10:54.136 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:10:54.149 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:10:54.280 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:10:55.652 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:10:55.658 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:10:55.658 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:10:55.667 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:10:55.669 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:10:55.679 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:10:55.680 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:10:55.685 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:10:55.698 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:10:55.698 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:10:55.700 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:10:55.701 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:10:55.704 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:10:55.705 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:10:55.705 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:10:55.707 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:10:55.707 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:10:55.707 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:10:55.707 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:10:55.707 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:10:55.708 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:10:55.708 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 +08:10:55.708 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:10:55.708 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:10:55.708 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 +08:10:55.708 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:10:55.709 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:10:55.709 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 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.709 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.710 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:55.710 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.411 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.662 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5673,7499.7> up=0.995201 +08:10:56.662 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.36388 angularSpeed=0.125462 +08:10:56.662 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:56.662 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6183,7501.98> +08:10:56.662 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3183,7501.98> terrainY=63.3149 tireTerrainGap=0.00342941 +08:10:56.662 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6183,7501.98> radius=0.3 bottom=<7012.07,63.3183,7501.98> fraction=0.470028 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00340652 +08:10:56.663 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5988,7497.72> +08:10:56.663 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1488,7497.72> terrainY=64.1552 tireTerrainGap=-0.00646973 +08:10:56.663 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5988,7497.72> radius=0.45 bottom=<7009.88,64.1488,7497.72> fraction=0.425687 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00634766 +08:10:56.663 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2666,7497.74> +08:10:56.663 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8166,7497.74> terrainY=63.818 tireTerrainGap=-0.00136185 +08:10:56.663 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2666,7497.74> radius=0.45 bottom=<7014.42,63.8166,7497.74> fraction=0.448333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00136566 +08:10:56.663 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:56.917 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:10:57.426 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:57.427 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.427 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.679 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5244,7499.72> up=0.993947 +08:10:57.679 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0532861 angularSpeed=0.0688037 +08:10:57.679 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:57.679 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6187,7501.99> +08:10:57.679 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3187,7501.99> terrainY=63.3144 tireTerrainGap=0.00434113 +08:10:57.680 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6187,7501.99> radius=0.3 bottom=<7012.06,63.3187,7501.99> fraction=0.47451 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00439072 +08:10:57.680 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.602,7497.72> +08:10:57.680 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.152,7497.72> terrainY=64.1502 tireTerrainGap=0.00185394 +08:10:57.680 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.602,7497.72> radius=0.45 bottom=<7009.91,64.152,7497.72> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +08:10:57.680 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2649,7497.78> +08:10:57.680 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8149,7497.78> terrainY=63.8156 tireTerrainGap=-0.000614166 +08:10:57.681 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2649,7497.78> radius=0.45 bottom=<7014.46,63.8149,7497.78> fraction=0.451667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00063324 +08:10:57.681 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:57.933 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:10:57.934 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.440 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:10:58.694 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5346,7499.74> up=0.993776 +08:10:58.694 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0252265 angularSpeed=0.0313119 +08:10:58.695 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:58.695 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6139,7502.01> +08:10:58.695 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3139,7502.01> terrainY=63.3117 tireTerrainGap=0.00211716 +08:10:58.695 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6139,7502.01> radius=0.3 bottom=<7012.06,63.3139,7502.01> fraction=0.463958 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00207138 +08:10:58.695 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5962,7497.72> +08:10:58.695 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1462,7497.72> terrainY=64.1441 tireTerrainGap=0.00217438 +08:10:58.696 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5962,7497.72> radius=0.45 bottom=<7009.96,64.1462,7497.72> fraction=0.464947 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00228882 +08:10:58.696 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.261,7497.83> +08:10:58.696 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.811,7497.83> terrainY=63.8128 tireTerrainGap=-0.00178909 +08:10:58.696 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.261,7497.83> radius=0.45 bottom=<7014.5,63.811,7497.83> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:10:58.696 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:58.944 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:58.944 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:58.945 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:58.945 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:59.455 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.455 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.455 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.456 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:10:59.733 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993809 +08:10:59.734 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:10:59.734 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:10:59.734 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +08:10:59.734 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00188828 +08:10:59.734 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463272 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00191879 +08:10:59.734 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +08:10:59.735 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00229645 +08:10:59.735 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 +08:10:59.735 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:10:59.735 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00201035 +08:10:59.735 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:10:59.735 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:10:59.983 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:10:59.983 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.984 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:10:59.984 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:11:00.492 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.492 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.492 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.493 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.747 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993809 +08:11:00.747 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:11:00.747 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:11:00.747 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7502.01> +08:11:00.747 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7502.01> terrainY=63.3116 tireTerrainGap=0.00188828 +08:11:00.747 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7502.01> radius=0.3 bottom=<7012.07,63.3134,7502.01> fraction=0.463272 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00191879 +08:11:00.748 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +08:11:00.748 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1423 tireTerrainGap=0.00229645 +08:11:00.748 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 +08:11:00.748 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2601,7497.84> +08:11:00.748 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8101,7497.84> terrainY=63.8121 tireTerrainGap=-0.00201035 +08:11:00.748 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2601,7497.84> radius=0.45 bottom=<7014.51,63.8101,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:11:00.748 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:11:00.998 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:11:00.999 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:11:00.999 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:11:01.000 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:11:01.000 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:11:01.175 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:11:01.204 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:11:01.272 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:11:01.273 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.274 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.274 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:11:01.274 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:11:01.274 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:11:01.275 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:11:01.275 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.275 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:11:01.276 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:11:01.276 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:11:01.276 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.277 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:11:01.277 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:11:01.277 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:11:01.277 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:11:01.278 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:11:01.278 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.278 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:11:01.279 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:11:01.279 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:11:01.279 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:11:01.280 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:11:01.280 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:11:01.280 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:11:01.280 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:11:01.280 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:01.283 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:11:01.283 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:01.284 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:01.285 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:11:01.285 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:11:01.285 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:11:01.775 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:11:01.775 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:01.777 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:01.778 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:01.779 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:11:02.283 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:11:02.283 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:11:02.284 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:11:02.286 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:11:02.287 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:11:02.288 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:11:02.291 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:11:02.292 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:11:02.293 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:11:02.295 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:11:02.296 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:11:02.296 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:11:02.296 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:11:02.297 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:11:02.297 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:11:02.297 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:11:02.298 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:11:02.299 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:11:02.299 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:11:02.300 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:11:02.300 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:11:02.300 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:11:02.301 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:11:02.301 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:11:02.301 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:11:02.302 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:11:02.303 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:11:02.304 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:11:02.304 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:11:02.304 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:11:02.305 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:11:02.308 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:11:02.308 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:11:02.308 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:11:02.309 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:11:02.311 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:11:02.311 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:11:02.311 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:11:02.311 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:11:02.311 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:11:02.312 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:11:02.312 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:11:02.312 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:11:02.312 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:11:02.312 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:11:02.312 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:11:02.312 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:11:02.313 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:11:02.313 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:11:02.313 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:11:02.314 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:11:02.314 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:11:02.314 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:11:02.326 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:11:02.327 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:11:02.328 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:11:02.328 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:11:02.329 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:11:02.330 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:11:02.330 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:11:02.331 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:11:02.331 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:11:02.332 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:11:02.332 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:11:02.332 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:11:02.340 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:11:02.341 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:11:02.341 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:11:02.341 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:11:02.341 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:02.342 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:02.342 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:11:02.342 SCRIPT : ERR BASE STOCK: cache items=54 +08:11:02.343 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:11:02.343 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:11:02.343 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:11:02.343 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:11:02.343 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:11:02.344 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:11:02.347 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:11:02.347 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:11:02.347 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:11:02.347 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:02.350 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:11:02.350 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:11:02.351 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:02.351 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:02.351 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:02.352 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:02.352 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:11:02.352 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:11:08.325 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:11:14.384 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:11:14.384 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:11:14.384 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.18,174.68,7466.34> target=<6340,175.788,7400> +08:11:20.442 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:11:26.503 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:11:26.504 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:11:27.011 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:11:27.326 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:11:29.551 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:11:30.344 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:11:32.069 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:11:32.069 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:11:32.070 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:11:32.070 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:11:32.072 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:11:32.072 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:11:33.597 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:11:33.597 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:11:33.600 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:11:33.607 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:11:34.604 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:11:34.604 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:11:34.604 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:11:35.606 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200.01> radio=<6500,159.756,7200> distanceXZ=6.00537 +08:11:35.606 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:11:36.607 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.02,159.672,7200.04> radio=<6500,159.756,7200> distanceXZ=2.0238 +08:11:36.608 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:11:37.620 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.02,159.671,7200.04> +08:11:38.634 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.02,159.671,7200.04> +08:11:39.645 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.02,159.53,7200.04> +08:11:40.145 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.02,159.53,7200.04> +08:11:40.145 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.02427 +08:11:40.145 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:11:40.146 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:11:40.146 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:11:40.146 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:11:41.157 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:11:42.167 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:11:42.167 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:11:43.178 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:11:44.191 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:11:45.207 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:11:46.212 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:11:47.221 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.668,7200.08> +08:11:48.244 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.07,159.528,7200.08> +08:11:48.745 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.07,159.528,7200.08> +08:11:48.745 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:11:49.751 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.79,159.868,7199.32> +08:11:50.765 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.79,159.868,7199.32> +08:11:51.266 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.79,159.868,7199.32> +08:11:51.266 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:11:52.284 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4946 +08:11:52.285 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:11:53.287 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:11:54.290 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:11:54.291 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:11:54.294 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:11:54.294 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:11:54.297 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:11:54.298 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:11:55.294 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:11:55.294 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00139591 +08:11:55.294 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:11:55.294 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:11:55.295 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:11:55.296 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:11:55.296 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:12:00.339 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:12:00.339 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:12:00.339 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:12:00.340 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:12:00.342 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:12:00.343 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:12:00.343 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:12:35.703 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +08:12:35.703 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +08:12:35.703 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +08:12:35.704 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +08:12:41.773 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +08:12:41.773 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +08:12:41.773 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +08:12:44.316 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +08:12:44.316 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +08:12:44.316 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +08:12:44.316 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:12:44.317 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:13:14.884 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:13:17.771 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +08:13:17.771 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +08:13:17.772 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +08:13:17.772 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +08:13:17.772 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +08:13:17.772 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:13:17.774 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:13:17.774 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:13:17.775 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:13:17.775 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +08:13:20.837 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +08:13:20.926 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:13:20.927 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +08:13:20.927 SCRIPT : ERR SMOKE COMPLETE: core-only escape +08:13:21.035 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:13:21.037 SCRIPT (W): Slot_Chat Has no Content! +08:13:21.038 SCRIPT (W): Slot_VON Has no Content! +08:13:21.038 SCRIPT (W): Slot_GameVersion Has no Content! +08:13:21.038 SCRIPT (W): Slot_Notifications Has no Content! +08:13:23.107 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:13:23.108 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:13:23.108 SCRIPT : -- Stack trace -- +08:13:23.108 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:13:23.108 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:13:23.108 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:13:23.108 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:13:23.108 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:13:23.108 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:13:23.109 SCRIPT : ----------------- +08:13:23.109 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:13:23.109 SCRIPT : -- Stack trace -- +08:13:23.109 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:13:23.109 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:13:23.109 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:13:23.109 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:13:23.109 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:13:23.109 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:13:23.110 SCRIPT : ----------------- +08:13:23.112 SCRIPT (W): Slot_Chat Has no Content! +08:13:23.112 SCRIPT (W): Slot_VON Has no Content! +08:13:23.112 SCRIPT (W): Slot_GameVersion Has no Content! +08:13:23.112 SCRIPT (W): Slot_Notifications Has no Content! +08:13:23.113 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-080656/source-provenance.json b/docs/evidence/native-2026-09-19-080656/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-080656/source-sha256.json b/docs/evidence/native-2026-09-19-080656/source-sha256.json new file mode 100644 index 0000000..b5c1cac --- /dev/null +++ b/docs/evidence/native-2026-09-19-080656/source-sha256.json @@ -0,0 +1,158 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "0b954c856cfee9b5dbb6241a5001726ca6940c885f968c2ed60a84264be7a1f4", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "657e96d1112b68c8ced37793e99f88e6078b38a579190e63d00b1f9a9a032e26", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "12d8fc39d47e03c3838e0642aa9e4a80baf60f250357493bff812d5c75812c86", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "becf85c5d1eb31d6bd480e9854aaab426118ad81b7a01f549314668d29216bae", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "8094399f3ba4f46ab9659c5a92599dd63e5a8533505bf6073cf0dc27dd0acaad", + "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_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": "bdd87d9e5eaddb08bbcb0f82741550f73f0d0036dbf6e4dd57a1c0ce825e3077", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-081601/console.log.txt b/docs/evidence/native-2026-09-19-081601/console.log.txt new file mode 100644 index 0000000..f157e58 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/console.log.txt @@ -0,0 +1,623 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-16-01\console.log started at 2026-09-19 08:16:01 (2026-09-19 06:16:01 UTC) + +08:16:01.522 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-16-01' to filesystem under name logs +08:16:01.522 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:16:01.522 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:16:01.524 PROFILING : Workbench Create Engine took: 9.473300 ms +08:16:02.560 INIT : INIT : Workbench Init Engine +08:16:02.560 ENGINE : Initializing engine, version 192142 +08:16:02.560 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 lifecycle -noThrow -disableCrashReporter +08:16:02.570 ENGINE : Addon dirs: +08:16:02.570 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:16:02.570 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:16:02.570 ENGINE : dir: './addons' +08:16:02.570 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:16:02.570 ENGINE : Available addons: +08:16:02.570 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:16:02.570 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:16:02.570 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:16:02.570 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:16:02.570 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:16:02.570 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:16:02.570 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:16:02.570 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:16:02.692 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:16:02.695 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:16:02.695 ENGINE : CPU vendor : AuthenticAMD +08:16:02.695 ENGINE : CPU type : 2 +08:16:02.695 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:16:02.695 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:16:02.695 ENGINE : CPU count logical : 16 +08:16:02.695 ENGINE : CPU count physical : 8 +08:16:02.695 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:16:02.695 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:16:02.696 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:16:02.840 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:16:02.841 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:16:02.842 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-16-01/resourceDatabase.rdb) +08:16:03.001 RESOURCES : RESOURCES : ResourceDB: full scan +08:16:03.006 RESOURCES : RESOURCES : scanning... +08:16:03.006 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:16:03.010 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:16:03.143 RESOURCES : RESOURCES : scanning @"core" +08:16:03.146 RESOURCES : RESOURCES : scanning @"profile" +08:16:03.147 RESOURCES : RESOURCES : scanning @"logs" +08:16:03.147 RESOURCES : RESOURCES : processing meta-files... +08:16:03.214 RESOURCES : RESOURCES : processing files... +08:16:03.224 INIT : Workbench startup +08:16:03.224 INIT : Workbench Init Engine +08:16:03.224 RESOURCES : ResourceDB: full scan +08:16:03.224 RESOURCES : processing files... +08:16:03.224 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:16:03.224 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:16:03.224 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:16:03.224 RESOURCES : RESOURCES : processing folders... +08:16:03.231 RESOURCES : RESOURCES : creating GUID-item mapping... +08:16:03.249 RESOURCES : RESOURCES : building tree... +08:16:03.304 PROFILING : ResourceDB: full scan took: 303.026600 ms +08:16:03.305 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:16:03.307 RESOURCES : ResourceDB: written 6147/6147 bytes +08:16:03.307 RESOURCES : ResourceDB: cache successfully saved +08:16:03.307 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:16:03.309 RESOURCES : ResourceDB: written 206/206 bytes +08:16:03.309 RESOURCES : ResourceDB: cache successfully saved +08:16:03.309 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-16-01/resourceDatabase.rdb) +08:16:03.311 RESOURCES : ResourceDB: written 162/162 bytes +08:16:03.311 RESOURCES : ResourceDB: cache successfully saved +08:16:03.311 ENGINE : GameProject load +08:16:03.311 ENGINE : Loaded addons: +08:16:03.311 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:16:03.311 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:16:03.311 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:16:03.312 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:16:03.313 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:16:03.313 ENGINE : Engine user settings config loaded +08:16:03.313 PROFILING : Settings changed took: 0.001900 ms +08:16:03.416 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:16:03.417 RENDER : Basic screen setup: +08:16:03.417 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:16:03.417 RENDER : MSAA : none +08:16:03.430 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:16:03.430 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:16:03.430 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:16:03.430 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:16:03.430 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:16:03.430 RENDER : AMD AGS correctly initialized +08:16:03.430 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 +08:16:03.430 RENDER : Detected output devices: +08:16:03.430 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:16:03.430 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:16:03.430 RENDER : Concurrent frames limit 2 +08:16:03.504 RENDER : DX12 device successfully created by AMD AGS library +08:16:03.504 RENDER : * user markers not supported in this version AMD SW +08:16:03.504 RENDER : Graphics device features +08:16:03.504 RENDER : Needed: +08:16:03.504 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:16:03.504 RENDER : Optional: +08:16:03.504 RENDER : * Allow tearing (VSYNC) : 1 +08:16:03.504 RENDER : * 16 bits : 1 +08:16:03.504 RENDER : * Resource heap tier : 3 +08:16:03.504 RENDER : * Persistent heaps (DRED) : 1 +08:16:03.504 RENDER : * DRED 1.2 is supported by compiler +08:16:03.526 RENDER : Main RT format setup. +08:16:03.526 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:16:03.526 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:16:03.528 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:16:03.557 PROFILING : Settings changed took: 0.019000 ms +08:16:04.031 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:16:04.031 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:16:04.031 AUDIO : Audio client: +08:16:04.031 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:16:04.034 RENDER : RENDER : Reload shaders +08:16:04.034 RENDER : Enfusion shader version 13 +08:16:04.034 INIT : INIT : ShaderListReload +08:16:04.034 PROFILING : ShaderListReload took: 0.000400 ms +08:16:04.176 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:16:04.176 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:16:04.176 AUDIO : Audio client: +08:16:04.176 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:16:04.298 RENDER : Loaded 3752 newer shader binaries +08:16:04.298 PROFILING : Reload shaders took: 263.711500 ms +08:16:04.298 ENGINE : Initializing inputs. +08:16:04.312 NETWORK : Initializing networking. +08:16:04.312 NETWORK : Using new GameRplScheduler. +08:16:04.312 SCRIPT : SCRIPT : Initializing scripts +08:16:04.313 SCRIPT : SCRIPT : ScriptProjectManager init +08:16:05.167 PROFILING : ScriptProjectManager init took: 854.298500 ms +08:16:05.203 PROFILING : Initializing scripts took: 890.353700 ms +08:16:05.221 ENGINE : Enfusion engine successfully created. +08:16:05.221 PROFILING : Workbench Init Engine took: 2660.471200 ms +08:16:05.221 INIT : INIT : Workbench Create Game +08:16:05.234 GUI : Using default language (en_us) +08:16:05.234 GUI : Loading 'en_us' localization file. +08:16:05.234 INIT : INIT : Loading StringTable +08:16:05.258 PROFILING : Loading StringTable took: 23.932500 ms +08:16:05.258 SCRIPT : SCRIPT : Compiling GameLib scripts +08:16:05.312 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 +08:16:05.312 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 +08:16:05.313 PROFILING : Compiling GameLib scripts took: 54.995400 ms +08:16:05.313 SCRIPT : SCRIPT : Compiling Game scripts +08:16:06.408 INIT : Workbench Create Game +08:16:06.409 SCRIPT : Compiling Game scripts +08:16:06.409 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:16:06.409 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:16:06.541 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.665 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:16:06.699 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:16:06.828 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:16:06.891 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:16:06.891 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:16:06.892 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:16:06.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.937 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:16:06.937 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:16:06.966 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:07.002 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:16:07.275 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 +08:16:07.282 SCRIPT : Module: Game; loaded 5731x files; 11226x classes; used 32853K 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: 6bd7ab2a +08:16:07.319 PROFILING : Compiling Game scripts took: 2005.875600 ms +08:16:07.325 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:16:07.369 ENGINE : Game successfully created. +08:16:07.370 PROFILING : Workbench Create Game took: 2148.991200 ms +08:16:07.378 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +08:16:08.173 INIT : INIT : Workbench Reload Game +08:16:08.174 ENGINE : Game destroyed. +08:16:08.180 GUI : Using default language (en_us) +08:16:08.180 GUI : Loading 'en_us' localization file. +08:16:08.180 INIT : INIT : Loading StringTable +08:16:08.189 PROFILING : Loading StringTable took: 8.993100 ms +08:16:08.189 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:16:08.196 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:16:08.196 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:16:08.196 ENGINE : Game successfully created. +08:16:08.196 ENGINE : Game successfully initialized. +08:16:08.196 PROFILING : Workbench Reload Game took: 23.804600 ms +08:16:08.852 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:16:09.906 PROFILING : Entities load took: 1053.483200 ms +08:16:09.917 WORLD : WORLD : CreateEntities +08:16:09.922 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:16:09.922 PROFILING : NotifyBeforeEntitiesCreated took: 0.003100 ms +08:16:09.922 WORLD : WORLD : Wait for preloading data +08:16:09.922 PROFILING : Wait for preloading data took: 0.003300 ms +08:16:10.039 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:16:10.039 PROFILING : PROFILING : Terrain load +08:16:11.694 PROFILING : Terrain load took: 1654.730100 ms +08:16:15.733 WORLD : CreateEntities +08:16:15.733 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" +08:16:15.733 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:16:15.733 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:16:25.590 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:16:25.590 PROFILING : NotifyBeforeEntitiesInitialized took: 0.006900 ms +08:16:26.042 WORLD : WORLD : NotifyEntitiesInitialized +08:16:26.042 TERRAIN : TERRAIN : Initializing road networks... +08:16:26.045 PROFILING : Initializing road networks... took: 2.209500 ms +08:16:26.045 PROFILING : NotifyEntitiesInitialized took: 2.588500 ms +08:16:26.045 PROFILING : CreateEntities took: 16127.117900 ms +08:16:26.217 PROFILING : * WorldEditor: LoadWorld: 17369.968800 ms +08:16:27.677 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:16:27.678 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:16:27.678 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:16:27.679 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:16:27.766 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:16:27.791 BACKEND : Attempting online Game Config instead. +08:16:31.255 INIT : INIT : Workbench Reload Game +08:16:31.258 ENGINE : Game destroyed. +08:16:31.265 GUI : Using default language (en_us) +08:16:31.265 GUI : Loading 'en_us' localization file. +08:16:31.266 INIT : INIT : Loading StringTable +08:16:31.286 PROFILING : Loading StringTable took: 20.441600 ms +08:16:31.287 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:16:31.295 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:16:31.295 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:16:31.295 ENGINE : Game successfully created. +08:16:31.295 ENGINE : Game successfully initialized. +08:16:31.295 PROFILING : Workbench Reload Game took: 39.843300 ms +08:16:31.298 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:16:31.347 PLATFORM : Save data from container 'settings' have been loaded +08:16:31.438 PLATFORM : Save data from container 'sessions' have been loaded +08:16:31.438 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:16:31.439 ENGINE : Game user settings config loaded +08:16:31.536 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:16:31.541 WORLD : WORLD : Game::LoadEntities +08:16:31.542 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:16:31.543 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:16:31.543 WORLD : WORLD : CreateEntities +08:16:31.543 WORLD : WORLD : CreateEntities +08:16:31.543 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:16:31.547 RESOURCES : Loaded mission headers from 7 addon(s)! +08:16:31.547 PROFILING : NotifyBeforeEntitiesCreated took: 4.220100 ms +08:16:31.547 WORLD : WORLD : Wait for preloading data +08:16:31.547 PROFILING : Wait for preloading data took: 0.000600 ms +08:16:35.950 WORLD : Game::LoadEntities +08:16:35.950 WORLD : CreateEntities +08:16:35.950 WORLD : CreateEntities +08:16:35.950 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" +08:16:35.950 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:16:35.950 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:16:37.433 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:16:37.433 ENTITY : CreateComponent 'Hierarchy' +08:16:37.433 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>') +08:16:37.433 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:16:37.433 ENTITY : CreateComponent 'Hierarchy' +08:16:37.433 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>') +08:16:37.433 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:16:37.433 ENTITY : CreateComponent 'Hierarchy' +08:16:37.433 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>') +08:16:37.439 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:16:37.439 ENTITY : CreateComponent 'Hierarchy' +08:16:37.439 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>') +08:16:37.440 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:16:37.440 ENTITY : CreateComponent 'Hierarchy' +08:16:37.440 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>') +08:16:37.440 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:16:37.440 ENTITY : CreateComponent 'Hierarchy' +08:16:37.440 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>') +08:16:37.445 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:16:37.445 ENTITY : CreateComponent 'Hierarchy' +08:16:37.445 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>') +08:16:37.446 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:16:37.446 ENTITY : CreateComponent 'Hierarchy' +08:16:37.446 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>') +08:16:37.446 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:16:37.446 ENTITY : CreateComponent 'Hierarchy' +08:16:37.446 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>') +08:16:42.531 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:16:42.531 PROFILING : NotifyBeforeEntitiesInitialized took: 0.048500 ms +08:16:44.562 WORLD : InitEntities 'world' +08:16:44.562 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:16:44.562 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:16:44.590 WORLD : InitEntities 'world' +08:16:44.590 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:16:44.590 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:16:44.591 WORLD : WORLD : NotifyEntitiesInitialized +08:16:44.591 TERRAIN : TERRAIN : Initializing road networks... +08:16:44.593 PROFILING : Initializing road networks... took: 2.399100 ms +08:16:44.593 DEFAULT : DEFAULT : WorldVolumesCollection +08:16:44.652 PROFILING : WorldVolumesCollection took: 58.482800 ms +08:16:44.652 INIT : INIT : SoundWorldInit +08:16:44.666 PROFILING : SoundWorldInit took: 14.817600 ms +08:16:44.666 PROFILING : NotifyEntitiesInitialized took: 75.972500 ms +08:16:44.667 PROFILING : CreateEntities took: 13123.415100 ms +08:16:44.667 PROFILING : CreateEntities took: 13123.599300 ms +08:16:44.667 WORLD : WORLD : Wait for preloading data around camera +08:16:44.667 PROFILING : Wait for preloading data around camera took: 0.001200 ms +08:16:44.667 WORLD : WORLD : EOnActivate +08:16:44.703 PROFILING : EOnActivate took: 35.452100 ms +08:16:44.703 PROFILING : Game::LoadEntities took: 13161.202700 ms +08:16:44.991 DEFAULT : Entered offline game state. +08:16:45.095 NETWORK : Player connected: connectionID=2147483646 +08:16:45.095 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:16:45.096 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:16:45.100 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:16:45.100 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:16:45.100 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:16:45.100 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! +08:16:45.101 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! +08:16:45.102 SCRIPT (W): Can't open config file "" +08:16:45.109 WORLD : InitEntities 'world' +08:16:45.109 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:16:45.109 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:16:45.110 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:16:45.110 SCRIPT (W): Slot_Chat Has no Content! +08:16:45.110 SCRIPT (W): Slot_VON Has no Content! +08:16:45.110 SCRIPT (W): Slot_AvailableActions Has no Content! +08:16:45.110 SCRIPT (W): Slot_Vehicle Has no Content! +08:16:45.110 SCRIPT (W): Slot_GameVersion Has no Content! +08:16:45.110 SCRIPT (W): Slot_Notifications Has no Content! +08:16:45.111 SCRIPT (W): Slot_Hints Has no Content! +08:16:45.124 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:16:45.125 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:16:45.125 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:16:45.125 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. +08:16:45.126 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. +08:16:45.130 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:16:45.130 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:16:45.131 NETWORK : Players connecting: 0 +08:16:45.131 NETWORK : Players connected: 1 / 1 +08:16:45.164 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/autosaves +08:16:45.166 PROFILING : Workbench startup took: 43703.675300 ms +08:16:45.191 WORLD : Frame start +08:16:45.191 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:16:45.204 WORLD : UpdateEntities +08:16:45.204 WORLD : Frame +08:16:45.204 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:16:45.391 WORLD : UpdateEntities +08:16:45.391 WORLD : PostFrame +08:16:45.391 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:16:45.392 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:16:45.438 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:16:45.438 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:16:45.439 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:16:45.439 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:16:45.580 RENDER : RENDER : ObjectsHeightMap::Build +08:16:45.580 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:16:45.762 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 181.414000 ms +08:16:45.771 PROFILING : ObjectsHeightMap::Build took: 190.686700 ms +08:16:46.933 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:16:46.957 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:16:46.958 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:16:46.998 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:16:46.999 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:16:47.057 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:16:47.057 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:16:47.063 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:16:47.120 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:16:47.120 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:16:47.122 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:16:47.123 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:16:47.126 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:16:47.128 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:16:47.129 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:16:47.130 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:16:47.130 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:16:47.131 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:16:47.131 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:16:47.131 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:16:47.131 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:16:47.131 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 +08:16:47.131 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:16:47.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:16:47.132 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 +08:16:47.132 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:16:47.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:16:47.133 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 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.134 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.134 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.903 WORLD : UpdateEntities +08:16:47.903 WORLD : AfterPostSimulate +08:16:47.904 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:16:47.982 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:47.983 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:47.983 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:47.983 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:48.235 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5272,7499.7> up=0.995674 +08:16:48.235 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.287087 angularSpeed=0.0801536 +08:16:48.236 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:48.236 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6174,7501.97> +08:16:48.236 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3174,7501.97> terrainY=63.3166 tireTerrainGap=0.000793457 +08:16:48.236 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6174,7501.97> radius=0.3 bottom=<7012.07,63.3174,7501.97> fraction=0.458263 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00082016 +08:16:48.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.605,7497.71> +08:16:48.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1551,7497.71> terrainY=64.1556 tireTerrainGap=-0.000587463 +08:16:48.237 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.605,7497.71> radius=0.45 bottom=<7009.88,64.1551,7497.71> fraction=0.45174 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000617981 +08:16:48.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.265,7497.75> +08:16:48.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.815,7497.75> terrainY=63.8178 tireTerrainGap=-0.00283432 +08:16:48.237 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.265,7497.75> radius=0.45 bottom=<7014.42,63.815,7497.75> fraction=0.441667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00283432 +08:16:48.238 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:48.489 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:48.489 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:48.490 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:48.490 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:48.994 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:48.995 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:48.995 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:49.313 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5347,7499.71> up=0.994334 +08:16:49.313 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +08:16:49.314 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:49.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6187,7501.99> +08:16:49.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3187,7501.99> terrainY=63.3146 tireTerrainGap=0.00415421 +08:16:49.314 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6187,7501.99> radius=0.3 bottom=<7012.07,63.3187,7501.99> fraction=0.473655 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0042038 +08:16:49.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.602,7497.71> +08:16:49.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.152,7497.71> terrainY=64.149 tireTerrainGap=0.00299072 +08:16:49.315 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.602,7497.71> radius=0.45 bottom=<7009.93,64.152,7497.71> fraction=0.468312 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00302887 +08:16:49.315 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2647,7497.78> +08:16:49.315 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8147,7497.78> terrainY=63.8155 tireTerrainGap=-0.000751495 +08:16:49.315 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2647,7497.78> radius=0.45 bottom=<7014.47,63.8147,7497.78> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:16:49.315 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:49.315 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:49.316 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:49.316 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:49.316 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.811 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:50.319 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5314,7499.74> up=0.994285 +08:16:50.320 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0456853 angularSpeed=0.0402736 +08:16:50.320 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:50.320 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6151,7502.01> +08:16:50.320 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3151,7502.01> terrainY=63.3116 tireTerrainGap=0.00346375 +08:16:50.320 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6151,7502.01> radius=0.3 bottom=<7012.07,63.3151,7502.01> fraction=0.470081 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00341797 +08:16:50.320 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5937,7497.71> +08:16:50.321 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1437,7497.71> terrainY=64.1427 tireTerrainGap=0.00101471 +08:16:50.321 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5937,7497.71> radius=0.45 bottom=<7009.97,64.1437,7497.71> fraction=0.459338 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00105286 +08:16:50.321 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.83> +08:16:50.321 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.83> terrainY=63.8126 tireTerrainGap=-0.00320053 +08:16:50.322 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.83> radius=0.45 bottom=<7014.51,63.8094,7497.83> fraction=0.44 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00320053 +08:16:50.322 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:50.322 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.322 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.323 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.323 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:51.327 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +08:16:51.327 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:16:51.327 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:51.328 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +08:16:51.328 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +08:16:51.328 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 +08:16:51.328 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +08:16:51.328 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +08:16:51.329 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 +08:16:51.329 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +08:16:51.329 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +08:16:51.329 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 +08:16:51.329 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:51.329 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.330 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:51.331 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:51.331 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:51.835 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.835 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.836 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.836 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:52.340 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +08:16:52.340 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:16:52.340 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:52.340 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +08:16:52.340 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +08:16:52.341 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 +08:16:52.341 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +08:16:52.341 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +08:16:52.341 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 +08:16:52.341 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +08:16:52.342 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +08:16:52.342 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 +08:16:52.342 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:52.343 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:52.343 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:16:52.344 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:16:52.345 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:16:52.345 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:16:52.483 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:16:52.521 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.744 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.744 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:16:52.745 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:16:52.745 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:16:52.746 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:16:52.746 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:16:52.746 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.747 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.747 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:16:52.747 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:16:52.748 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:16:52.748 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:16:52.748 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:16:52.749 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:16:52.750 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:16:52.750 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:16:52.750 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:16:53.250 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 0 +08:16:53.250 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 1 +08:16:53.250 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 2 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 3 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 4 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 5 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 6 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle spent life cannot finalize a delayed admission +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle disconnected account cannot finalize +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle recycled connection identity cannot inherit a pending admission +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle changed controller rejects stale admission +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle changed request rejects stale admission +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle existing controlled actor cannot be replaced by delayed admission +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle native settling tolerance rejects horizontal and vertical preload drift +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle native prison has a clear candidate +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle IDs one and thirteen receive distinct reserved slots +08:16:53.253 SCRIPT : ERR SPAWN CAPACITY: remaining clear prison positions=15 plus current controlled prisoner +08:16:53.253 SCRIPT : ERR SMOKE PASS: lifecycle occupied and pending slots exhaust a bounded grid without overlap or outside fallback +08:16:53.253 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.256 SCRIPT : ERR SMOKE PASS: lifecycle released pending reservation becomes available again +08:16:53.263 SCRIPT : ERR SMOKE PASS: lifecycle uncontrolled physical body created at a previously clear slot +08:16:54.265 SCRIPT : ERR SMOKE PASS: lifecycle native character body blocks a slot even without a connected player ID +08:16:55.273 SCRIPT : ERR SMOKE PASS: lifecycle real local free-spawn request, handler and admission logic exist +08:16:55.273 SCRIPT : ERR SMOKE PASS: lifecycle real prisoner has a spent life and no pending admission +08:16:55.279 SCRIPT : ERR SMOKE PASS: lifecycle isolated unpossessed actor receives an explicit test-owned admission ticket +08:16:55.279 SCRIPT : ERR SMOKE PASS: lifecycle different request payload cannot claim or delete the owned actor +08:16:55.280 SCRIPT : ERR SMOKE PASS: lifecycle native finalization refuses the spent-life preload +08:16:56.289 SCRIPT : ERR SMOKE PASS: lifecycle refused native preload was deleted after lifecycle processing +08:16:56.290 SCRIPT : ERR SMOKE PASS: lifecycle refusal releases reservations without changing life or controlled actor +08:16:56.290 SCRIPT : ERR SMOKE PASS: lifecycle unticketed repeated callback cannot delete or replace the controlled prisoner +08:16:56.296 SCRIPT : ERR SMOKE PASS: lifecycle second isolated pending actor prepared for cancellation +08:16:56.297 SCRIPT : ERR SMOKE PASS: lifecycle delayed loss callback preserves reacquired living controller and admission metadata +08:16:57.304 SCRIPT : ERR SMOKE PASS: lifecycle pending-request cancellation cleans its actor and never grants another life +08:16:57.312 SCRIPT : ERR SMOKE PASS: lifecycle physical actor created for vertical drift check +08:16:58.313 SCRIPT : ERR SMOKE PASS: lifecycle actual vertically displaced character fails finalization position tolerance after native movement +08:16:58.315 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:16:58.315 SCRIPT : ERR SMOKE PASS: base lifecycle fixture finished before explicit test reset +08:16:58.315 SCRIPT : ERR SMOKE COMPLETE: native lifecycle admission guards; reset requested by fixture +08:16:58.410 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:16:58.413 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:16:58.413 SCRIPT (W): Slot_Chat Has no Content! +08:16:58.413 SCRIPT (W): Slot_VON Has no Content! +08:16:58.413 SCRIPT (W): Slot_GameVersion Has no Content! +08:16:58.413 SCRIPT (W): Slot_Notifications Has no Content! +08:16:58.519 SCRIPT (W): GM Budget got clamped at some point! +08:17:00.447 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:17:00.447 SCRIPT : -- Stack trace -- +08:17:00.447 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:17:00.447 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:17:00.447 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:17:00.447 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:17:00.448 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:17:00.448 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:17:00.448 SCRIPT : ----------------- +08:17:00.448 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:17:00.448 SCRIPT : -- Stack trace -- +08:17:00.448 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:17:00.448 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:17:00.448 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:17:00.449 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:17:00.449 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:17:00.449 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:17:00.449 SCRIPT : ----------------- +08:17:00.451 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:17:00.451 SCRIPT (W): Slot_Chat Has no Content! +08:17:00.451 SCRIPT (W): Slot_VON Has no Content! +08:17:00.451 SCRIPT (W): Slot_GameVersion Has no Content! +08:17:00.451 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-081601/error.log.txt b/docs/evidence/native-2026-09-19-081601/error.log.txt new file mode 100644 index 0000000..a06f26d --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/error.log.txt @@ -0,0 +1,119 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-16-01\error.log started at 2026-09-19 08:16:03 (2026-09-19 06:16:03 UTC) + +08:16:03.224 INIT : Workbench startup +08:16:03.224 INIT : Workbench Init Engine +08:16:03.224 RESOURCES : ResourceDB: full scan +08:16:03.224 RESOURCES : processing files... +08:16:03.224 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:16:03.224 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:16:03.224 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:16:06.408 INIT : Workbench Create Game +08:16:06.408 SCRIPT : Compiling Game scripts +08:16:06.409 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:16:06.409 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:16:06.541 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.665 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:16:06.699 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:16:06.828 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:16:06.891 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:16:06.891 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:16:06.892 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:16:06.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.937 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:16:06.937 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:16:06.966 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:07.002 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:16:15.733 WORLD : CreateEntities +08:16:15.733 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" +08:16:15.733 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:16:15.733 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:16:31.298 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:16:35.950 WORLD : Game::LoadEntities +08:16:35.950 WORLD : CreateEntities +08:16:35.950 WORLD : CreateEntities +08:16:35.950 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" +08:16:35.950 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:16:35.950 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:16:37.433 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:16:37.433 ENTITY : CreateComponent 'Hierarchy' +08:16:37.433 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>') +08:16:37.433 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:16:37.433 ENTITY : CreateComponent 'Hierarchy' +08:16:37.433 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>') +08:16:37.433 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:16:37.433 ENTITY : CreateComponent 'Hierarchy' +08:16:37.433 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>') +08:16:37.439 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:16:37.439 ENTITY : CreateComponent 'Hierarchy' +08:16:37.439 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>') +08:16:37.440 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:16:37.440 ENTITY : CreateComponent 'Hierarchy' +08:16:37.440 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>') +08:16:37.440 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:16:37.440 ENTITY : CreateComponent 'Hierarchy' +08:16:37.440 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>') +08:16:37.445 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:16:37.445 ENTITY : CreateComponent 'Hierarchy' +08:16:37.445 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>') +08:16:37.446 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:16:37.446 ENTITY : CreateComponent 'Hierarchy' +08:16:37.446 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>') +08:16:37.446 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:16:37.446 ENTITY : CreateComponent 'Hierarchy' +08:16:37.446 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>') +08:16:44.562 WORLD : InitEntities 'world' +08:16:44.562 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:16:44.562 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:16:45.100 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:16:45.100 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:16:45.100 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:16:45.100 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! +08:16:45.101 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! +08:16:45.102 SCRIPT (W): Can't open config file "" +08:16:45.109 WORLD : InitEntities 'world' +08:16:45.109 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:16:45.109 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:16:45.110 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:16:45.110 SCRIPT (W): Slot_Chat Has no Content! +08:16:45.110 SCRIPT (W): Slot_VON Has no Content! +08:16:45.110 SCRIPT (W): Slot_AvailableActions Has no Content! +08:16:45.110 SCRIPT (W): Slot_Vehicle Has no Content! +08:16:45.110 SCRIPT (W): Slot_GameVersion Has no Content! +08:16:45.110 SCRIPT (W): Slot_Notifications Has no Content! +08:16:45.111 SCRIPT (W): Slot_Hints Has no Content! +08:16:45.124 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:16:45.125 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:16:45.125 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:16:45.125 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. +08:16:45.126 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. +08:16:45.130 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:16:45.391 WORLD : UpdateEntities +08:16:45.391 WORLD : PostFrame +08:16:45.391 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:16:45.392 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:16:45.438 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:16:45.438 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:16:45.439 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:16:45.439 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:16:47.903 WORLD : UpdateEntities +08:16:47.903 WORLD : AfterPostSimulate +08:16:47.903 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:16:58.413 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:16:58.413 SCRIPT (W): Slot_Chat Has no Content! +08:16:58.413 SCRIPT (W): Slot_VON Has no Content! +08:16:58.413 SCRIPT (W): Slot_GameVersion Has no Content! +08:16:58.413 SCRIPT (W): Slot_Notifications Has no Content! +08:16:58.519 SCRIPT (W): GM Budget got clamped at some point! +08:17:00.447 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:17:00.448 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:17:00.451 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:17:00.451 SCRIPT (W): Slot_Chat Has no Content! +08:17:00.451 SCRIPT (W): Slot_VON Has no Content! +08:17:00.451 SCRIPT (W): Slot_GameVersion Has no Content! +08:17:00.451 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-081601/headless-launch.log.txt b/docs/evidence/native-2026-09-19-081601/headless-launch.log.txt new file mode 100644 index 0000000..6d0c269 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/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: 167 +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555706ec890 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555706ec890 +[Gamescope WSI] Destroyed swapchain: 0x5555706ec890 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555706ec890 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555706ec890 +[Gamescope WSI] Destroyed swapchain: 0x5555706ec890 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555706ec890 - imageCount: 4 +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/native-2026-09-19-081601/launch-source-sha256.json b/docs/evidence/native-2026-09-19-081601/launch-source-sha256.json new file mode 100644 index 0000000..cde50e0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/launch-source-sha256.json @@ -0,0 +1,159 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "0b954c856cfee9b5dbb6241a5001726ca6940c885f968c2ed60a84264be7a1f4", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "657e96d1112b68c8ced37793e99f88e6078b38a579190e63d00b1f9a9a032e26", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "12d8fc39d47e03c3838e0642aa9e4a80baf60f250357493bff812d5c75812c86", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-081601/launch-source.json b/docs/evidence/native-2026-09-19-081601/launch-source.json new file mode 100644 index 0000000..670b4ac --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "3f127e52-b209-4bf2-8081-39fe94dc35a1", + "captured_unix": 1789798559.8374727, + "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", + "lifecycle", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "00e228fb8e6b21add8617f4ccd44bb48b5a3111a7a7c40477c0b08510c00b693" +} diff --git a/docs/evidence/native-2026-09-19-081601/report.json b/docs/evidence/native-2026-09-19-081601/report.json new file mode 100644 index 0000000..ff9406d --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-081601/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 89, + "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-081601/runner.json.txt b/docs/evidence/native-2026-09-19-081601/runner.json.txt new file mode 100644 index 0000000..6d7e396 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789798625.184608, + "console_sha256": "0b8975a820f6a232b963588bc0bcab983324c88a211dc2d59305db171be8b05a", + "end_source_sha256": "00e228fb8e6b21add8617f4ccd44bb48b5a3111a7a7c40477c0b08510c00b693", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "3f127e52-b209-4bf2-8081-39fe94dc35a1", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "00e228fb8e6b21add8617f4ccd44bb48b5a3111a7a7c40477c0b08510c00b693", + "started_unix": 1789798559.8375435, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-16-01", + "rounds_required": 1, + "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-081601/script.log.txt b/docs/evidence/native-2026-09-19-081601/script.log.txt new file mode 100644 index 0000000..ff2b6c3 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/script.log.txt @@ -0,0 +1,332 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-16-01\script.log started at 2026-09-19 08:16:04 (2026-09-19 06:16:04 UTC) + +08:16:04.313 SCRIPT : SCRIPT : Initializing scripts +08:16:04.313 SCRIPT : SCRIPT : ScriptProjectManager init +08:16:05.258 SCRIPT : SCRIPT : Compiling GameLib scripts +08:16:05.312 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 +08:16:05.312 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 +08:16:05.313 SCRIPT : SCRIPT : Compiling Game scripts +08:16:06.409 SCRIPT : Compiling Game scripts +08:16:06.409 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:16:06.409 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:16:06.541 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.665 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:16:06.699 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:16:06.797 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:16:06.828 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:16:06.891 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:16:06.891 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:16:06.892 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:16:06.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:06.937 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:16:06.937 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:16:06.966 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:16:07.002 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:16:07.275 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 +08:16:07.282 SCRIPT : Module: Game; loaded 5731x files; 11226x classes; used 32853K 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: 6bd7ab2a +08:16:08.196 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:16:08.196 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:16:27.766 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:16:31.295 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:16:31.295 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:16:44.562 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:16:44.590 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:16:45.100 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! +08:16:45.101 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! +08:16:45.102 SCRIPT (W): Can't open config file "" +08:16:45.110 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:16:45.110 SCRIPT (W): Slot_Chat Has no Content! +08:16:45.110 SCRIPT (W): Slot_VON Has no Content! +08:16:45.110 SCRIPT (W): Slot_AvailableActions Has no Content! +08:16:45.110 SCRIPT (W): Slot_Vehicle Has no Content! +08:16:45.110 SCRIPT (W): Slot_GameVersion Has no Content! +08:16:45.110 SCRIPT (W): Slot_Notifications Has no Content! +08:16:45.111 SCRIPT (W): Slot_Hints Has no Content! +08:16:45.125 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. +08:16:45.126 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. +08:16:45.130 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:16:45.191 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:16:45.204 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:16:45.392 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:16:46.934 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:16:46.957 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:16:46.958 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:16:46.998 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:16:46.999 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:16:47.057 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:16:47.057 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:16:47.063 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:16:47.120 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:16:47.120 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:16:47.122 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:16:47.123 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:16:47.126 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:16:47.128 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:16:47.129 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:16:47.130 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:16:47.130 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:16:47.131 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:16:47.131 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:16:47.131 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:16:47.131 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:16:47.131 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 +08:16:47.131 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:16:47.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:16:47.132 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 +08:16:47.132 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:16:47.132 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:16:47.133 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 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.133 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.134 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.134 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:16:47.982 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:47.983 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:47.983 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:47.983 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:48.235 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5272,7499.7> up=0.995674 +08:16:48.235 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.287087 angularSpeed=0.0801536 +08:16:48.236 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:48.236 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6174,7501.97> +08:16:48.236 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3174,7501.97> terrainY=63.3166 tireTerrainGap=0.000793457 +08:16:48.236 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6174,7501.97> radius=0.3 bottom=<7012.07,63.3174,7501.97> fraction=0.458263 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00082016 +08:16:48.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.605,7497.71> +08:16:48.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1551,7497.71> terrainY=64.1556 tireTerrainGap=-0.000587463 +08:16:48.237 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.605,7497.71> radius=0.45 bottom=<7009.88,64.1551,7497.71> fraction=0.45174 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000617981 +08:16:48.237 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.265,7497.75> +08:16:48.237 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.815,7497.75> terrainY=63.8178 tireTerrainGap=-0.00283432 +08:16:48.237 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.265,7497.75> radius=0.45 bottom=<7014.42,63.815,7497.75> fraction=0.441667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00283432 +08:16:48.238 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:48.489 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:48.489 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:48.490 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:48.490 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:16:48.994 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:48.995 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:48.995 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:49.313 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5347,7499.71> up=0.994334 +08:16:49.313 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +08:16:49.314 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:49.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6187,7501.99> +08:16:49.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3187,7501.99> terrainY=63.3146 tireTerrainGap=0.00415421 +08:16:49.314 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6187,7501.99> radius=0.3 bottom=<7012.07,63.3187,7501.99> fraction=0.473655 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0042038 +08:16:49.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.602,7497.71> +08:16:49.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.152,7497.71> terrainY=64.149 tireTerrainGap=0.00299072 +08:16:49.315 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.602,7497.71> radius=0.45 bottom=<7009.93,64.152,7497.71> fraction=0.468312 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00302887 +08:16:49.315 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2647,7497.78> +08:16:49.315 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8147,7497.78> terrainY=63.8155 tireTerrainGap=-0.000751495 +08:16:49.315 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2647,7497.78> radius=0.45 bottom=<7014.47,63.8147,7497.78> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:16:49.315 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:49.315 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:49.316 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:49.316 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:16:49.316 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.811 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:49.812 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:16:50.319 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5314,7499.74> up=0.994285 +08:16:50.320 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0456853 angularSpeed=0.0402736 +08:16:50.320 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:50.320 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6151,7502.01> +08:16:50.320 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3151,7502.01> terrainY=63.3116 tireTerrainGap=0.00346375 +08:16:50.320 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6151,7502.01> radius=0.3 bottom=<7012.07,63.3151,7502.01> fraction=0.470081 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00341797 +08:16:50.320 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5937,7497.71> +08:16:50.321 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1437,7497.71> terrainY=64.1427 tireTerrainGap=0.00101471 +08:16:50.321 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5937,7497.71> radius=0.45 bottom=<7009.97,64.1437,7497.71> fraction=0.459338 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00105286 +08:16:50.321 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2594,7497.83> +08:16:50.321 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8094,7497.83> terrainY=63.8126 tireTerrainGap=-0.00320053 +08:16:50.322 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2594,7497.83> radius=0.45 bottom=<7014.51,63.8094,7497.83> fraction=0.44 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00320053 +08:16:50.322 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:50.322 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.322 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.323 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.323 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:50.819 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:50.820 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:16:51.327 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +08:16:51.327 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:16:51.327 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:51.328 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +08:16:51.328 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +08:16:51.328 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 +08:16:51.328 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +08:16:51.328 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +08:16:51.329 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 +08:16:51.329 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +08:16:51.329 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +08:16:51.329 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 +08:16:51.329 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:51.329 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.330 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:51.331 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:51.331 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:16:51.835 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.835 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.836 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:51.836 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:52.340 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5298,7499.75> up=0.994384 +08:16:52.340 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:16:52.340 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:16:52.340 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6128,7502.02> +08:16:52.340 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3128,7502.02> terrainY=63.3108 tireTerrainGap=0.00199509 +08:16:52.341 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 +08:16:52.341 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.594,7497.72> +08:16:52.341 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.144,7497.72> terrainY=64.1415 tireTerrainGap=0.00247955 +08:16:52.341 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 +08:16:52.341 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.2601,7497.84> +08:16:52.342 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.8101,7497.84> terrainY=63.8119 tireTerrainGap=-0.00180435 +08:16:52.342 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 +08:16:52.342 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:16:52.343 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:16:52.343 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:16:52.344 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:16:52.345 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:16:52.345 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:16:52.483 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:16:52.521 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:16:52.743 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.744 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:16:52.744 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.744 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:16:52.745 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:16:52.745 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.745 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:16:52.746 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:16:52.746 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:16:52.746 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:16:52.746 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.747 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:16:52.747 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:16:52.747 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:16:52.747 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:16:52.748 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:16:52.748 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.748 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:16:52.748 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:16:52.749 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:16:52.749 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:16:52.750 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:16:52.750 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:16:52.750 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:16:53.250 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 0 +08:16:53.250 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 1 +08:16:53.250 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 2 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 3 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 4 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 5 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle finalization phase matrix 6 +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle spent life cannot finalize a delayed admission +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle disconnected account cannot finalize +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle recycled connection identity cannot inherit a pending admission +08:16:53.251 SCRIPT : ERR SMOKE PASS: lifecycle changed controller rejects stale admission +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle changed request rejects stale admission +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle existing controlled actor cannot be replaced by delayed admission +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle native settling tolerance rejects horizontal and vertical preload drift +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle native prison has a clear candidate +08:16:53.252 SCRIPT : ERR SMOKE PASS: lifecycle IDs one and thirteen receive distinct reserved slots +08:16:53.253 SCRIPT : ERR SPAWN CAPACITY: remaining clear prison positions=15 plus current controlled prisoner +08:16:53.253 SCRIPT : ERR SMOKE PASS: lifecycle occupied and pending slots exhaust a bounded grid without overlap or outside fallback +08:16:53.253 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.254 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.255 SCRIPT : ERR SMOKE PASS: lifecycle candidate remains inside authored prison +08:16:53.256 SCRIPT : ERR SMOKE PASS: lifecycle released pending reservation becomes available again +08:16:53.264 SCRIPT : ERR SMOKE PASS: lifecycle uncontrolled physical body created at a previously clear slot +08:16:54.265 SCRIPT : ERR SMOKE PASS: lifecycle native character body blocks a slot even without a connected player ID +08:16:55.273 SCRIPT : ERR SMOKE PASS: lifecycle real local free-spawn request, handler and admission logic exist +08:16:55.273 SCRIPT : ERR SMOKE PASS: lifecycle real prisoner has a spent life and no pending admission +08:16:55.279 SCRIPT : ERR SMOKE PASS: lifecycle isolated unpossessed actor receives an explicit test-owned admission ticket +08:16:55.279 SCRIPT : ERR SMOKE PASS: lifecycle different request payload cannot claim or delete the owned actor +08:16:55.280 SCRIPT : ERR SMOKE PASS: lifecycle native finalization refuses the spent-life preload +08:16:56.289 SCRIPT : ERR SMOKE PASS: lifecycle refused native preload was deleted after lifecycle processing +08:16:56.290 SCRIPT : ERR SMOKE PASS: lifecycle refusal releases reservations without changing life or controlled actor +08:16:56.290 SCRIPT : ERR SMOKE PASS: lifecycle unticketed repeated callback cannot delete or replace the controlled prisoner +08:16:56.296 SCRIPT : ERR SMOKE PASS: lifecycle second isolated pending actor prepared for cancellation +08:16:56.297 SCRIPT : ERR SMOKE PASS: lifecycle delayed loss callback preserves reacquired living controller and admission metadata +08:16:57.304 SCRIPT : ERR SMOKE PASS: lifecycle pending-request cancellation cleans its actor and never grants another life +08:16:57.312 SCRIPT : ERR SMOKE PASS: lifecycle physical actor created for vertical drift check +08:16:58.313 SCRIPT : ERR SMOKE PASS: lifecycle actual vertically displaced character fails finalization position tolerance after native movement +08:16:58.315 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:16:58.315 SCRIPT : ERR SMOKE PASS: base lifecycle fixture finished before explicit test reset +08:16:58.315 SCRIPT : ERR SMOKE COMPLETE: native lifecycle admission guards; reset requested by fixture +08:16:58.410 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:16:58.413 SCRIPT (W): Slot_Chat Has no Content! +08:16:58.413 SCRIPT (W): Slot_VON Has no Content! +08:16:58.413 SCRIPT (W): Slot_GameVersion Has no Content! +08:16:58.413 SCRIPT (W): Slot_Notifications Has no Content! +08:16:58.519 SCRIPT (W): GM Budget got clamped at some point! +08:17:00.447 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:17:00.447 SCRIPT : -- Stack trace -- +08:17:00.447 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:17:00.447 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:17:00.447 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:17:00.447 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:17:00.448 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:17:00.448 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:17:00.448 SCRIPT : ----------------- +08:17:00.448 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:17:00.448 SCRIPT : -- Stack trace -- +08:17:00.448 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:17:00.448 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:17:00.448 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:17:00.449 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:17:00.449 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:17:00.449 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:17:00.449 SCRIPT : ----------------- +08:17:00.451 SCRIPT (W): Slot_Chat Has no Content! +08:17:00.451 SCRIPT (W): Slot_VON Has no Content! +08:17:00.451 SCRIPT (W): Slot_GameVersion Has no Content! +08:17:00.451 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-081601/source-provenance.json b/docs/evidence/native-2026-09-19-081601/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-081601/source-sha256.json b/docs/evidence/native-2026-09-19-081601/source-sha256.json new file mode 100644 index 0000000..cde50e0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081601/source-sha256.json @@ -0,0 +1,159 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "0b954c856cfee9b5dbb6241a5001726ca6940c885f968c2ed60a84264be7a1f4", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "657e96d1112b68c8ced37793e99f88e6078b38a579190e63d00b1f9a9a032e26", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarSalvo.c": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b", + "addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c": "12d8fc39d47e03c3838e0642aa9e4a80baf60f250357493bff812d5c75812c86", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-081837/console.log.txt b/docs/evidence/native-2026-09-19-081837/console.log.txt new file mode 100644 index 0000000..74e8e9e --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/console.log.txt @@ -0,0 +1,610 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-18-37\console.log started at 2026-09-19 08:18:37 (2026-09-19 06:18:37 UTC) + +08:18:37.181 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-18-37' to filesystem under name logs +08:18:37.181 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:18:37.181 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:18:37.183 PROFILING : Workbench Create Engine took: 9.383000 ms +08:18:38.219 INIT : INIT : Workbench Init Engine +08:18:38.219 ENGINE : Initializing engine, version 192142 +08:18:38.219 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 mortar-inventory -noThrow -disableCrashReporter +08:18:38.229 ENGINE : Addon dirs: +08:18:38.229 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +08:18:38.229 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:18:38.229 ENGINE : dir: './addons' +08:18:38.229 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:18:38.229 ENGINE : Available addons: +08:18:38.229 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:18:38.229 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:18:38.229 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:18:38.229 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:18:38.229 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:18:38.229 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:18:38.229 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:18:38.229 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:18:38.229 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:18:38.229 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:18:38.230 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:18:38.230 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:18:38.343 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:18:38.346 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:18:38.346 ENGINE : CPU vendor : AuthenticAMD +08:18:38.346 ENGINE : CPU type : 2 +08:18:38.346 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:18:38.346 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:18:38.346 ENGINE : CPU count logical : 16 +08:18:38.346 ENGINE : CPU count physical : 8 +08:18:38.346 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:18:38.346 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:18:38.346 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:18:38.347 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:18:38.347 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:18:38.347 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:18:38.348 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:18:38.484 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:18:38.486 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:18:38.486 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-18-37/resourceDatabase.rdb) +08:18:38.642 RESOURCES : RESOURCES : ResourceDB: full scan +08:18:38.647 RESOURCES : RESOURCES : scanning... +08:18:38.647 RESOURCES : RESOURCES : scanning @"ERR_Chat" +08:18:38.648 RESOURCES : RESOURCES : scanning @"ERR_Map" +08:18:38.650 RESOURCES : RESOURCES : scanning @"ERR_Intel" +08:18:38.651 RESOURCES : RESOURCES : scanning @"ERR_Ai" +08:18:38.652 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:18:38.655 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:18:38.804 RESOURCES : RESOURCES : scanning @"core" +08:18:38.808 RESOURCES : RESOURCES : scanning @"profile" +08:18:38.809 RESOURCES : RESOURCES : scanning @"logs" +08:18:38.809 RESOURCES : RESOURCES : processing meta-files... +08:18:38.877 RESOURCES : RESOURCES : processing files... +08:18:38.888 INIT : Workbench startup +08:18:38.888 INIT : Workbench Init Engine +08:18:38.888 RESOURCES : ResourceDB: full scan +08:18:38.888 RESOURCES : processing files... +08:18:38.888 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:18:38.888 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:18:38.888 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:18:38.888 RESOURCES : RESOURCES : processing folders... +08:18:38.895 RESOURCES : RESOURCES : creating GUID-item mapping... +08:18:38.911 RESOURCES : RESOURCES : building tree... +08:18:38.968 PROFILING : ResourceDB: full scan took: 326.563900 ms +08:18:38.970 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:18:38.972 RESOURCES : ResourceDB: written 741/741 bytes +08:18:38.972 RESOURCES : ResourceDB: cache successfully saved +08:18:38.972 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:18:38.974 RESOURCES : ResourceDB: written 750/750 bytes +08:18:38.974 RESOURCES : ResourceDB: cache successfully saved +08:18:38.974 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:18:38.975 RESOURCES : ResourceDB: written 227/227 bytes +08:18:38.975 RESOURCES : ResourceDB: cache successfully saved +08:18:38.975 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:18:38.977 RESOURCES : ResourceDB: written 1230/1230 bytes +08:18:38.977 RESOURCES : ResourceDB: cache successfully saved +08:18:38.977 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:18:38.979 RESOURCES : ResourceDB: written 6147/6147 bytes +08:18:38.979 RESOURCES : ResourceDB: cache successfully saved +08:18:38.979 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:18:38.980 RESOURCES : ResourceDB: written 206/206 bytes +08:18:38.980 RESOURCES : ResourceDB: cache successfully saved +08:18:38.980 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-18-37/resourceDatabase.rdb) +08:18:38.982 RESOURCES : ResourceDB: written 162/162 bytes +08:18:38.982 RESOURCES : ResourceDB: cache successfully saved +08:18:38.982 ENGINE : GameProject load +08:18:38.982 ENGINE : Loaded addons: +08:18:38.982 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:18:38.982 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:18:38.982 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:18:38.982 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:18:38.982 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:18:38.982 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:18:38.982 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:18:38.984 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:18:38.985 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:18:38.985 ENGINE : Engine user settings config loaded +08:18:38.985 PROFILING : Settings changed took: 0.002600 ms +08:18:39.088 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:18:39.089 RENDER : Basic screen setup: +08:18:39.089 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:18:39.089 RENDER : MSAA : none +08:18:39.101 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:18:39.101 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:18:39.101 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:18:39.101 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:18:39.101 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:18:39.101 RENDER : AMD AGS correctly initialized +08:18:39.101 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 +08:18:39.101 RENDER : Detected output devices: +08:18:39.101 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:18:39.101 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:18:39.101 RENDER : Concurrent frames limit 2 +08:18:39.177 RENDER : DX12 device successfully created by AMD AGS library +08:18:39.177 RENDER : * user markers not supported in this version AMD SW +08:18:39.177 RENDER : Graphics device features +08:18:39.177 RENDER : Needed: +08:18:39.177 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:18:39.177 RENDER : Optional: +08:18:39.177 RENDER : * Allow tearing (VSYNC) : 1 +08:18:39.177 RENDER : * 16 bits : 1 +08:18:39.177 RENDER : * Resource heap tier : 3 +08:18:39.177 RENDER : * Persistent heaps (DRED) : 1 +08:18:39.177 RENDER : * DRED 1.2 is supported by compiler +08:18:39.200 RENDER : Main RT format setup. +08:18:39.200 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:18:39.200 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:18:39.202 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:18:39.236 PROFILING : Settings changed took: 0.022600 ms +08:18:39.692 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:18:39.692 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:18:39.692 AUDIO : Audio client: +08:18:39.692 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:18:39.700 RENDER : RENDER : Reload shaders +08:18:39.701 RENDER : Enfusion shader version 13 +08:18:39.701 INIT : INIT : ShaderListReload +08:18:39.701 PROFILING : ShaderListReload took: 0.000900 ms +08:18:39.835 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:18:39.835 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:18:39.836 AUDIO : Audio client: +08:18:39.836 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:18:40.107 RENDER : Loaded 3752 newer shader binaries +08:18:40.107 PROFILING : Reload shaders took: 406.646200 ms +08:18:40.107 ENGINE : Initializing inputs. +08:18:40.119 NETWORK : Initializing networking. +08:18:40.119 NETWORK : Using new GameRplScheduler. +08:18:40.120 SCRIPT : SCRIPT : Initializing scripts +08:18:40.120 SCRIPT : SCRIPT : ScriptProjectManager init +08:18:42.346 PROFILING : ScriptProjectManager init took: 2225.675800 ms +08:18:42.437 PROFILING : Initializing scripts took: 2317.110700 ms +08:18:42.455 ENGINE : Enfusion engine successfully created. +08:18:42.455 PROFILING : Workbench Init Engine took: 4236.100400 ms +08:18:42.455 INIT : INIT : Workbench Create Game +08:18:42.467 GUI : Using default language (en_us) +08:18:42.467 GUI : Loading 'en_us' localization file. +08:18:42.467 INIT : INIT : Loading StringTable +08:18:42.491 PROFILING : Loading StringTable took: 24.525200 ms +08:18:42.491 SCRIPT : SCRIPT : Compiling GameLib scripts +08:18:42.564 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 +08:18:42.564 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 +08:18:42.565 PROFILING : Compiling GameLib scripts took: 73.199200 ms +08:18:42.565 SCRIPT : SCRIPT : Compiling Game scripts +08:18:43.855 INIT : Workbench Create Game +08:18:43.855 SCRIPT : Compiling Game scripts +08:18:43.855 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:18:43.855 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:18:43.997 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.125 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:18:44.157 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:18:44.310 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:18:44.374 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:18:44.374 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:18:44.375 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:18:44.421 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.421 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.422 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:18:44.422 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:18:44.447 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.483 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:18:44.771 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: e963af0e +08:18:44.778 SCRIPT : Module: Game; loaded 5756x files; 11291x classes; used 33115K 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: 9a825aa0 +08:18:44.816 PROFILING : Compiling Game scripts took: 2250.949800 ms +08:18:44.823 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:18:44.863 ENGINE : Game successfully created. +08:18:44.864 PROFILING : Workbench Create Game took: 2409.307700 ms +08:18:44.873 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +08:18:45.769 INIT : INIT : Workbench Reload Game +08:18:45.771 ENGINE : Game destroyed. +08:18:45.778 GUI : Using default language (en_us) +08:18:45.778 GUI : Loading 'en_us' localization file. +08:18:45.778 INIT : INIT : Loading StringTable +08:18:45.788 PROFILING : Loading StringTable took: 10.086200 ms +08:18:45.788 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:18:45.796 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:18:45.796 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:18:45.796 ENGINE : Game successfully created. +08:18:45.796 ENGINE : Game successfully initialized. +08:18:45.796 PROFILING : Workbench Reload Game took: 27.070200 ms +08:18:46.559 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:18:47.609 PROFILING : Entities load took: 1049.781300 ms +08:18:47.621 WORLD : WORLD : CreateEntities +08:18:47.626 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:18:47.626 PROFILING : NotifyBeforeEntitiesCreated took: 0.002300 ms +08:18:47.626 WORLD : WORLD : Wait for preloading data +08:18:47.626 PROFILING : Wait for preloading data took: 0.002500 ms +08:18:47.742 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:18:47.742 PROFILING : PROFILING : Terrain load +08:18:49.800 PROFILING : Terrain load took: 2058.075900 ms +08:18:53.905 WORLD : CreateEntities +08:18:53.905 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" +08:18:53.906 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:18:53.906 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:19:04.830 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:19:04.830 PROFILING : NotifyBeforeEntitiesInitialized took: 0.007100 ms +08:19:05.262 WORLD : WORLD : NotifyEntitiesInitialized +08:19:05.262 TERRAIN : TERRAIN : Initializing road networks... +08:19:05.265 PROFILING : Initializing road networks... took: 2.352600 ms +08:19:05.265 PROFILING : NotifyEntitiesInitialized took: 2.835900 ms +08:19:05.265 PROFILING : CreateEntities took: 17644.054600 ms +08:19:05.438 PROFILING : * WorldEditor: LoadWorld: 18886.263500 ms +08:19:07.057 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:19:07.057 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:19:07.059 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:19:07.059 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:19:07.142 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:19:07.145 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:19:07.145 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:19:07.167 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:19:07.194 BACKEND : Attempting online Game Config instead. +08:19:10.467 INIT : INIT : Workbench Reload Game +08:19:10.470 ENGINE : Game destroyed. +08:19:10.479 GUI : Using default language (en_us) +08:19:10.479 GUI : Loading 'en_us' localization file. +08:19:10.480 INIT : INIT : Loading StringTable +08:19:10.501 PROFILING : Loading StringTable took: 20.924300 ms +08:19:10.501 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:19:10.510 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:19:10.511 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:19:10.511 ENGINE : Game successfully created. +08:19:10.511 ENGINE : Game successfully initialized. +08:19:10.511 PROFILING : Workbench Reload Game took: 43.476200 ms +08:19:10.515 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:19:10.565 PLATFORM : Save data from container 'settings' have been loaded +08:19:10.656 PLATFORM : Save data from container 'sessions' have been loaded +08:19:10.657 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:19:10.657 ENGINE : Game user settings config loaded +08:19:10.754 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:19:10.760 WORLD : WORLD : Game::LoadEntities +08:19:10.760 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:19:10.761 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:19:10.761 WORLD : WORLD : CreateEntities +08:19:10.761 WORLD : WORLD : CreateEntities +08:19:10.761 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:19:10.775 RESOURCES : Loaded mission headers from 7 addon(s)! +08:19:10.776 PROFILING : NotifyBeforeEntitiesCreated took: 14.519100 ms +08:19:10.776 WORLD : WORLD : Wait for preloading data +08:19:10.776 PROFILING : Wait for preloading data took: 0.000600 ms +08:19:15.357 WORLD : Game::LoadEntities +08:19:15.357 WORLD : CreateEntities +08:19:15.357 WORLD : CreateEntities +08:19:15.357 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" +08:19:15.357 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:19:15.357 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:19:16.874 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:19:16.874 ENTITY : CreateComponent 'Hierarchy' +08:19:16.874 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>') +08:19:16.874 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:19:16.874 ENTITY : CreateComponent 'Hierarchy' +08:19:16.874 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>') +08:19:16.875 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:19:16.875 ENTITY : CreateComponent 'Hierarchy' +08:19:16.875 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>') +08:19:16.880 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:19:16.880 ENTITY : CreateComponent 'Hierarchy' +08:19:16.880 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>') +08:19:16.880 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:19:16.880 ENTITY : CreateComponent 'Hierarchy' +08:19:16.880 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>') +08:19:16.880 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:19:16.880 ENTITY : CreateComponent 'Hierarchy' +08:19:16.880 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>') +08:19:16.885 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:19:16.885 ENTITY : CreateComponent 'Hierarchy' +08:19:16.885 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>') +08:19:16.885 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:19:16.885 ENTITY : CreateComponent 'Hierarchy' +08:19:16.885 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>') +08:19:16.885 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:19:16.885 ENTITY : CreateComponent 'Hierarchy' +08:19:16.885 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>') +08:19:22.424 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:19:22.424 PROFILING : NotifyBeforeEntitiesInitialized took: 0.050900 ms +08:19:24.426 WORLD : InitEntities 'world' +08:19:24.426 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:19:24.426 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:19:24.452 WORLD : InitEntities 'world' +08:19:24.452 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:19:24.452 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:19:24.452 WORLD : WORLD : NotifyEntitiesInitialized +08:19:24.452 TERRAIN : TERRAIN : Initializing road networks... +08:19:24.454 PROFILING : Initializing road networks... took: 2.240300 ms +08:19:24.455 DEFAULT : DEFAULT : WorldVolumesCollection +08:19:24.511 PROFILING : WorldVolumesCollection took: 56.856600 ms +08:19:24.511 INIT : INIT : SoundWorldInit +08:19:24.525 PROFILING : SoundWorldInit took: 13.918600 ms +08:19:24.525 PROFILING : NotifyEntitiesInitialized took: 73.210100 ms +08:19:24.526 PROFILING : CreateEntities took: 13764.249100 ms +08:19:24.526 PROFILING : CreateEntities took: 13764.411800 ms +08:19:24.526 WORLD : WORLD : Wait for preloading data around camera +08:19:24.526 PROFILING : Wait for preloading data around camera took: 0.000900 ms +08:19:24.526 WORLD : WORLD : EOnActivate +08:19:24.562 PROFILING : EOnActivate took: 35.790300 ms +08:19:24.562 PROFILING : Game::LoadEntities took: 13802.076500 ms +08:19:24.815 DEFAULT : Entered offline game state. +08:19:24.918 NETWORK : Player connected: connectionID=2147483646 +08:19:24.919 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:19:24.919 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:19:24.923 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:19:24.923 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:19:24.923 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:19:24.924 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! +08:19:24.924 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! +08:19:24.925 SCRIPT (W): Can't open config file "" +08:19:24.931 WORLD : InitEntities 'world' +08:19:24.931 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:19:24.931 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:19:24.931 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:19:24.931 SCRIPT (W): Slot_Chat Has no Content! +08:19:24.931 SCRIPT (W): Slot_VON Has no Content! +08:19:24.932 SCRIPT (W): Slot_AvailableActions Has no Content! +08:19:24.932 SCRIPT (W): Slot_Vehicle Has no Content! +08:19:24.932 SCRIPT (W): Slot_GameVersion Has no Content! +08:19:24.932 SCRIPT (W): Slot_Notifications Has no Content! +08:19:24.932 SCRIPT (W): Slot_Hints Has no Content! +08:19:24.943 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:19:24.943 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:19:24.943 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:19:24.943 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. +08:19:24.944 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. +08:19:24.946 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:19:24.947 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:19:24.947 NETWORK : Players connecting: 0 +08:19:24.947 NETWORK : Players connected: 1 / 1 +08:19:24.975 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +08:19:24.976 PROFILING : Workbench startup took: 47852.724500 ms +08:19:25.000 WORLD : Frame start +08:19:25.000 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:19:25.013 WORLD : UpdateEntities +08:19:25.013 WORLD : Frame +08:19:25.013 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:19:25.198 WORLD : UpdateEntities +08:19:25.198 WORLD : PostFrame +08:19:25.198 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:19:25.198 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:19:25.247 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:19:25.247 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:19:25.247 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:19:25.248 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:19:25.382 RENDER : RENDER : ObjectsHeightMap::Build +08:19:25.382 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:19:25.548 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 166.098100 ms +08:19:25.556 PROFILING : ObjectsHeightMap::Build took: 174.091000 ms +08:19:26.730 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:19:26.753 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:19:26.754 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:19:26.782 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:19:26.785 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:19:26.837 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:19:26.838 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:19:26.845 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:19:26.896 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:19:26.896 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:19:26.899 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:19:26.899 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:19:26.903 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:19:26.904 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:19:26.904 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:19:26.906 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:19:26.906 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:19:26.906 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:19:26.906 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:19:26.906 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:19:26.907 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:19:26.907 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 +08:19:26.907 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:19:26.907 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:19:26.907 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 +08:19:26.908 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:19:26.908 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:19:26.908 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 +08:19:26.908 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.908 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.908 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.909 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.909 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.909 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:27.687 WORLD : UpdateEntities +08:19:27.687 WORLD : AfterPostSimulate +08:19:27.688 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:19:27.758 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:27.758 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:27.758 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:27.759 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:28.016 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5269,7499.7> up=0.995673 +08:19:28.016 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +08:19:28.016 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:28.016 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6171,7501.97> +08:19:28.017 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3171,7501.97> terrainY=63.3166 tireTerrainGap=0.00050354 +08:19:28.017 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6171,7501.97> radius=0.3 bottom=<7012.06,63.3171,7501.97> fraction=0.457143 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.000572205 +08:19:28.017 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6048,7497.71> +08:19:28.017 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1548,7497.71> terrainY=64.1556 tireTerrainGap=-0.000816345 +08:19:28.017 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6048,7497.71> radius=0.45 bottom=<7009.88,64.1548,7497.71> fraction=0.450925 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000793457 +08:19:28.018 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2648,7497.75> +08:19:28.018 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8148,7497.75> terrainY=63.8178 tireTerrainGap=-0.00299454 +08:19:28.018 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2648,7497.75> radius=0.45 bottom=<7014.42,63.8148,7497.75> fraction=0.440833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00301743 +08:19:28.018 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:28.271 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:28.271 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:28.272 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:28.272 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:28.779 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:28.780 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:28.780 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:29.091 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5349,7499.71> up=0.994337 +08:19:29.092 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:19:29.092 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:29.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.619,7501.99> +08:19:29.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.319,7501.99> terrainY=63.3145 tireTerrainGap=0.00447845 +08:19:29.092 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.619,7501.99> radius=0.3 bottom=<7012.07,63.319,7501.99> fraction=0.47507 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0045166 +08:19:29.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6022,7497.71> +08:19:29.093 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1522,7497.71> terrainY=64.149 tireTerrainGap=0.00311279 +08:19:29.093 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6022,7497.71> radius=0.45 bottom=<7009.93,64.1522,7497.71> fraction=0.468873 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00315094 +08:19:29.093 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.265,7497.78> +08:19:29.093 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.815,7497.78> terrainY=63.8155 tireTerrainGap=-0.000522614 +08:19:29.093 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.265,7497.78> radius=0.45 bottom=<7014.47,63.815,7497.78> fraction=0.452097 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000537872 +08:19:29.094 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.588 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:30.095 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5312,7499.74> up=0.994218 +08:19:30.095 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +08:19:30.096 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:30.096 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +08:19:30.096 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3115 tireTerrainGap=0.00211716 +08:19:30.096 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 +08:19:30.096 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.72> +08:19:30.096 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.72> terrainY=64.1427 tireTerrainGap=0.00178528 +08:19:30.097 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 +08:19:30.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2599,7497.83> +08:19:30.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8099,7497.83> terrainY=63.8127 tireTerrainGap=-0.00284195 +08:19:30.097 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2599,7497.83> radius=0.45 bottom=<7014.51,63.8099,7497.83> fraction=0.441667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00283432 +08:19:30.097 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.606 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:30.606 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:30.607 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:30.607 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:31.109 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:19:31.109 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:19:31.110 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:31.110 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:19:31.110 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00163269 +08:19:31.110 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 +08:19:31.110 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:19:31.110 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00248718 +08:19:31.111 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 +08:19:31.111 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.84> +08:19:31.111 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.84> terrainY=63.8122 tireTerrainGap=-0.00204086 +08:19:31.111 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.84> radius=0.45 bottom=<7014.51,63.8102,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:19:31.111 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:31.618 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.619 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.619 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.619 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:32.127 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:19:32.127 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:19:32.127 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:32.127 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:19:32.128 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00163269 +08:19:32.128 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 +08:19:32.128 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:19:32.128 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00248718 +08:19:32.128 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 +08:19:32.129 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.84> +08:19:32.129 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.84> terrainY=63.8122 tireTerrainGap=-0.00204086 +08:19:32.129 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.84> radius=0.45 bottom=<7014.51,63.8102,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:19:32.129 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:32.129 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:32.130 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:19:32.142 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:19:32.143 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:19:32.143 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:19:32.270 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:19:32.312 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:19:32.551 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:19:32.552 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:19:32.552 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:19:32.552 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:19:32.552 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:19:32.552 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:19:32.554 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:19:32.554 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:19:32.554 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:19:32.561 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:19:32.561 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:19:43.674 SCRIPT : ERR SMOKE PASS: authored physical mortar and four-person crew initialize +08:19:43.675 SCRIPT : ERR SMOKE PASS: mortar has a dedicated physical manpack operator +08:19:43.675 SCRIPT : ERR SMOKE PASS: mortar starts with exactly 27 physical HE shells +08:19:58.826 SCRIPT : ERR SMOKE PASS: depleted mortar inventory stays empty without fabricated ammunition +08:20:10.948 SCRIPT : ERR SMOKE PASS: lost mortar and crew remain lost without replacement spawning +08:20:10.949 SCRIPT : INFO: KILL SUICIDE: jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) from US faction at <6088.5, 211.39, 7158.5> killed himself! +08:20:14.991 SCRIPT : ERR SMOKE PASS: native damage kills prisoner +08:20:14.992 SCRIPT : ERR SMOKE PASS: death selects spectator without another life +08:20:14.992 SCRIPT : ERR SMOKE PASS: spectator camera activates after native death +08:20:41.640 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:20:41.641 SCRIPT : ERR SMOKE PASS: death exhausts round life and reaches defeat after spectator grace +08:20:41.641 SCRIPT : ERR SMOKE COMPLETE: terminal=6 lostHelicopterCase=0 playerDeathCase=1 +08:20:41.745 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:20:41.748 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:20:41.748 SCRIPT (W): Slot_Chat Has no Content! +08:20:41.748 SCRIPT (W): Slot_VON Has no Content! +08:20:41.748 SCRIPT (W): Slot_GameVersion Has no Content! +08:20:41.748 SCRIPT (W): Slot_Notifications Has no Content! +08:20:43.795 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:20:43.796 SCRIPT : -- Stack trace -- +08:20:43.796 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:20:43.796 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:20:43.796 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:20:43.796 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:20:43.796 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:20:43.796 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:20:43.796 SCRIPT : ----------------- +08:20:43.797 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:20:43.797 SCRIPT : -- Stack trace -- +08:20:43.797 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:20:43.797 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:20:43.797 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:20:43.797 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:20:43.797 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:20:43.797 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:20:43.798 SCRIPT : ----------------- +08:20:43.800 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:20:43.800 SCRIPT (W): Slot_Chat Has no Content! +08:20:43.800 SCRIPT (W): Slot_VON Has no Content! +08:20:43.800 SCRIPT (W): Slot_GameVersion Has no Content! +08:20:43.800 SCRIPT (W): Slot_Notifications Has no Content! +08:20:45.679 RESOURCES : Screenshot saved to $logs:err-result.png diff --git a/docs/evidence/native-2026-09-19-081837/err-result.png b/docs/evidence/native-2026-09-19-081837/err-result.png new file mode 100644 index 0000000000000000000000000000000000000000..4f13dbdf942b629864f9c6843c2194309955b1a4 GIT binary patch literal 178672 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

VGS0f6FsM8fzUq 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

Z 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≫Vy2> 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

}hcwt}HJKhnMz5B%#|=?)VocQ=Gs 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 QCM6#wc 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 literal 0 HcmV?d00001 diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/error.log.txt b/docs/evidence/native-2026-09-19-084026-restart-station-error/error.log.txt new file mode 100644 index 0000000..871667a --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/error.log.txt @@ -0,0 +1,202 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-40-26\error.log started at 2026-09-19 08:40:28 (2026-09-19 06:40:28 UTC) + +08:40:28.258 INIT : Workbench startup +08:40:28.258 INIT : Workbench Init Engine +08:40:28.258 RESOURCES : ResourceDB: full scan +08:40:28.258 RESOURCES : processing files... +08:40:28.258 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:40:28.258 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:40:28.258 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:40:33.064 INIT : Workbench Create Game +08:40:33.064 SCRIPT : Compiling Game scripts +08:40:33.064 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:40:33.064 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:40:33.219 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.355 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:40:33.387 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:40:33.518 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:40:33.578 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:40:33.578 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:40:33.582 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:40:33.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:40:33.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:40:33.647 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.684 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:40:42.787 WORLD : CreateEntities +08:40:42.787 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" +08:40:42.787 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:40:42.788 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:40:59.169 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:41:04.167 WORLD : Game::LoadEntities +08:41:04.167 WORLD : CreateEntities +08:41:04.167 WORLD : CreateEntities +08:41:04.167 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" +08:41:04.167 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:41:04.167 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:41:05.600 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:41:05.600 ENTITY : CreateComponent 'Hierarchy' +08:41:05.600 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>') +08:41:05.601 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:41:05.601 ENTITY : CreateComponent 'Hierarchy' +08:41:05.601 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>') +08:41:05.601 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:41:05.601 ENTITY : CreateComponent 'Hierarchy' +08:41:05.601 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>') +08:41:05.607 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:41:05.607 ENTITY : CreateComponent 'Hierarchy' +08:41:05.607 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>') +08:41:05.607 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:41:05.607 ENTITY : CreateComponent 'Hierarchy' +08:41:05.607 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>') +08:41:05.607 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:41:05.607 ENTITY : CreateComponent 'Hierarchy' +08:41:05.607 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>') +08:41:05.612 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:41:05.612 ENTITY : CreateComponent 'Hierarchy' +08:41:05.612 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>') +08:41:05.612 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:41:05.612 ENTITY : CreateComponent 'Hierarchy' +08:41:05.612 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>') +08:41:05.612 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:41:05.612 ENTITY : CreateComponent 'Hierarchy' +08:41:05.612 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>') +08:41:13.069 WORLD : InitEntities 'world' +08:41:13.069 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:41:13.069 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:41:13.608 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:41:13.608 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:41:13.608 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:41:13.609 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! +08:41:13.609 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! +08:41:13.610 SCRIPT (W): Can't open config file "" +08:41:13.617 WORLD : InitEntities 'world' +08:41:13.618 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:41:13.618 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:41:13.618 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:41:13.618 SCRIPT (W): Slot_Chat Has no Content! +08:41:13.618 SCRIPT (W): Slot_VON Has no Content! +08:41:13.618 SCRIPT (W): Slot_AvailableActions Has no Content! +08:41:13.619 SCRIPT (W): Slot_Vehicle Has no Content! +08:41:13.619 SCRIPT (W): Slot_GameVersion Has no Content! +08:41:13.619 SCRIPT (W): Slot_Notifications Has no Content! +08:41:13.619 SCRIPT (W): Slot_Hints Has no Content! +08:41:13.630 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:41:13.630 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:41:13.630 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:41:13.631 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. +08:41:13.631 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. +08:41:13.635 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:41:13.892 WORLD : UpdateEntities +08:41:13.892 WORLD : PostFrame +08:41:13.892 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:41:13.892 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:41:13.939 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:41:13.939 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:41:13.939 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:41:13.939 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:41:16.358 WORLD : UpdateEntities +08:41:16.358 WORLD : AfterPostSimulate +08:41:16.358 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:42:10.318 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:42:10.318 SCRIPT (W): Slot_Chat Has no Content! +08:42:10.318 SCRIPT (W): Slot_VON Has no Content! +08:42:10.318 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:10.318 SCRIPT (W): Slot_Notifications Has no Content! +08:42:12.353 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:42:12.354 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:42:12.357 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:42:12.357 SCRIPT (W): Slot_Chat Has no Content! +08:42:12.357 SCRIPT (W): Slot_VON Has no Content! +08:42:12.357 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:12.357 SCRIPT (W): Slot_Notifications Has no Content! +08:42:40.232 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:42:40.233 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:42:40.455 DEFAULT (W): Achievements cannot be saved. +08:42:40.456 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +08:42:43.900 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +08:42:43.904 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +08:42:49.255 WORLD : Game::LoadEntities +08:42:49.255 WORLD : CreateEntities +08:42:49.255 WORLD : CreateEntities 'world' +08:42:49.255 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" +08:42:49.255 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:42:49.255 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:42:50.602 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:42:50.602 ENTITY : CreateComponent 'Hierarchy' +08:42:50.602 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>') +08:42:50.602 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:42:50.602 ENTITY : CreateComponent 'Hierarchy' +08:42:50.602 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>') +08:42:50.602 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:42:50.602 ENTITY : CreateComponent 'Hierarchy' +08:42:50.602 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>') +08:42:50.606 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:42:50.606 ENTITY : CreateComponent 'Hierarchy' +08:42:50.606 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>') +08:42:50.606 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:42:50.606 ENTITY : CreateComponent 'Hierarchy' +08:42:50.606 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>') +08:42:50.607 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:42:50.607 ENTITY : CreateComponent 'Hierarchy' +08:42:50.607 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>') +08:42:50.611 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:42:50.611 ENTITY : CreateComponent 'Hierarchy' +08:42:50.611 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>') +08:42:50.611 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:42:50.611 ENTITY : CreateComponent 'Hierarchy' +08:42:50.611 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>') +08:42:50.611 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:42:50.611 ENTITY : CreateComponent 'Hierarchy' +08:42:50.611 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>') +08:42:57.778 WORLD : InitEntities 'world' +08:42:57.778 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:42:57.778 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:42:58.443 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:42:58.444 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:42:58.444 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:42:58.444 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! +08:42:58.444 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! +08:42:58.446 SCRIPT (W): Can't open config file "" +08:42:58.446 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:42:58.447 WORLD : InitEntities 'world' +08:42:58.447 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:42:58.447 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:42:58.447 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:42:58.447 SCRIPT (W): Slot_Chat Has no Content! +08:42:58.448 SCRIPT (W): Slot_VON Has no Content! +08:42:58.448 SCRIPT (W): Slot_AvailableActions Has no Content! +08:42:58.448 SCRIPT (W): Slot_Vehicle Has no Content! +08:42:58.448 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:58.448 SCRIPT (W): Slot_Notifications Has no Content! +08:42:58.448 SCRIPT (W): Slot_Hints Has no Content! +08:42:58.452 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:42:58.452 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:42:58.452 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:42:58.453 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. +08:42:58.453 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. +08:42:58.601 WORLD : UpdateEntities +08:42:58.601 WORLD : PostFrame +08:42:58.602 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:42:58.602 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:43:00.719 WORLD : UpdateEntities +08:43:00.719 WORLD : AfterPostSimulate +08:43:00.719 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:43:54.883 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:43:54.883 SCRIPT (W): Slot_Chat Has no Content! +08:43:54.883 SCRIPT (W): Slot_VON Has no Content! +08:43:54.884 SCRIPT (W): Slot_GameVersion Has no Content! +08:43:54.884 SCRIPT (W): Slot_Notifications Has no Content! +08:43:56.919 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:43:56.920 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:43:56.923 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:43:56.923 SCRIPT (W): Slot_Chat Has no Content! +08:43:56.923 SCRIPT (W): Slot_VON Has no Content! +08:43:56.923 SCRIPT (W): Slot_GameVersion Has no Content! +08:43:56.924 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/headless-launch.log.txt b/docs/evidence/native-2026-09-19-084026-restart-station-error/headless-launch.log.txt new file mode 100644 index 0000000..c614694 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/headless-launch.log.txt @@ -0,0 +1,157 @@ +[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. +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55556f6020e0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55556f6020e0 +[Gamescope WSI] Destroyed swapchain: 0x55556f6020e0 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55556f6020e0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55556f6020e0 +[Gamescope WSI] Destroyed swapchain: 0x55556f6020e0 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55556f6020e0 - 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: 0x555570535340 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x555570535340 +[Gamescope WSI] Destroyed swapchain: 0x555570535340 +[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: 0x555570535340 - imageCount: 3 +[gamescope] [Info] wlserver: [wayland] Data too big for buffer (4092 + 12 > 4096). +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source-sha256.json b/docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source-sha256.json new file mode 100644 index 0000000..e058dc0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source-sha256.json @@ -0,0 +1,164 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "e4589e5af55701f8c1f7f33e0a49e45f34b073bfddbdc87e009bea69af683828", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "acbc8a1d6a5c76278c447b666ae7362740953422a9ca287361ad6286b6944c59", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "95186a6c1553b38c6a214e897f845ef1799d8acca0cc896d8df73de680050888", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-084026-restart-station-error/launch-source.json b/docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source.json new file mode 100644 index 0000000..a03d9c9 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "bb331535-80ba-41fc-8fe3-e7cb0899346e", + "captured_unix": 1789800024.852554, + "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": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4" +} diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/report.json b/docs/evidence/native-2026-09-19-084026-restart-station-error/report.json new file mode 100644 index 0000000..749129b --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/report.json @@ -0,0 +1,15 @@ +{ + "log": "docs/evidence/native-2026-09-19-084026-restart-station-error/console.log.txt", + "smoke_completions": 2, + "assertions_passed": 96, + "script_or_runtime_failures": [ + "08:42:43.900 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager!", + "08:42:43.904 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager!" + ], + "engine_errors": [ + "08:42:43.900 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager!", + "08:42:43.904 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager!" + ], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-084026-restart-station-error/rereintroduced-hq.log.txt new file mode 100644 index 0000000..eff8588 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/rereintroduced-hq.log.txt @@ -0,0 +1,52 @@ +#1 t=6.6s M0 REGISTER group 1 [session=1789800073-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=1789800073-1] +#3 t=8.6s M0 REGISTER group 2 [session=1789800073-1] +#4 t=8.6s M0 REGISTER group 3 [session=1789800073-1] +#5 t=8.6s M0 REGISTER group 4 [session=1789800073-1] +#6 t=8.6s M0 REGISTER group 5 [session=1789800073-1] +#7 t=8.6s M0 REGISTER group 6 [session=1789800073-1] +#8 t=8.6s M0 REGISTER group 7 [session=1789800073-1] +#9 t=11.7s 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=1789800073-1] +#10 t=12.8s M1 TRANSMIT unit 3 -> HQ (long-range) [session=1789800073-1] +#11 t=14.8s M1 RECEIVE HQ received from unit 3 [session=1789800073-1] +#12 t=17.8s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789800073-1] +#13 t=17.8s M4 TRANSMIT HQ -> unit 5 (long-range) [session=1789800073-1] +#14 t=17.8s M3 TRANSMIT HQ -> unit 4 (long-range) [session=1789800073-1] +#15 t=17.8s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789800073-1] +#16 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=1789800073-1] +#17 t=19.8s M5 RECEIVE unit 6 received from HQ [session=1789800073-1] +#18 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=1789800073-1] +#19 t=19.8s M4 RECEIVE unit 5 received from HQ [session=1789800073-1] +#20 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=1789800073-1] +#21 t=19.8s M3 RECEIVE unit 4 received from HQ [session=1789800073-1] +#22 t=19.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: unknown; vector X/Z=unknown (8s ago) [session=1789800073-1] +#23 t=19.8s M2 RECEIVE unit 2 received from HQ [session=1789800073-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=1789800073-1] +#25 t=56s M0 STOP HQ stopped; tactical orders released [session=1789800073-1] +#1 t=6.7s M0 REGISTER group 1 [session=1789800177-2] +#2 t=6.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=1789800177-2] +#3 t=8.7s M0 REGISTER group 2 [session=1789800177-2] +#4 t=8.7s M0 REGISTER group 3 [session=1789800177-2] +#5 t=8.7s M0 REGISTER group 4 [session=1789800177-2] +#6 t=8.7s M0 REGISTER group 5 [session=1789800177-2] +#7 t=8.7s M0 REGISTER group 6 [session=1789800177-2] +#8 t=8.7s M0 REGISTER group 7 [session=1789800177-2] +#9 t=11.9s 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=1789800177-2] +#10 t=12.9s M1 TRANSMIT unit 3 -> HQ (long-range) [session=1789800177-2] +#11 t=14.9s M1 RECEIVE HQ received from unit 3 [session=1789800177-2] +#12 t=17.9s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789800177-2] +#13 t=17.9s M4 TRANSMIT HQ -> unit 5 (long-range) [session=1789800177-2] +#14 t=17.9s M3 TRANSMIT HQ -> unit 4 (long-range) [session=1789800177-2] +#15 t=17.9s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789800177-2] +#16 t=17.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=1789800177-2] +#17 t=20s M5 RECEIVE unit 6 received from HQ [session=1789800177-2] +#18 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=1789800177-2] +#19 t=20s M4 RECEIVE unit 5 received from HQ [session=1789800177-2] +#20 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=1789800177-2] +#21 t=20s M3 RECEIVE unit 4 received from HQ [session=1789800177-2] +#22 t=20s M2 RECEIVE unit 2 received from HQ [session=1789800177-2] +#23 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=1789800177-2] +#24 t=23s M6 TRANSMIT HQ -> unit 7 (long-range) [session=1789800177-2] +#25 t=25s M6 RECEIVE unit 7 received from HQ [session=1789800177-2] +#26 t=25s M6 ORDER DELIVERED group 7 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 (13s ago) [session=1789800177-2] +#27 t=56.2s M0 STOP HQ stopped; tactical orders released [session=1789800177-2] diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/runner.json.txt b/docs/evidence/native-2026-09-19-084026-restart-station-error/runner.json.txt new file mode 100644 index 0000000..5952119 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789800242.1389093, + "console_sha256": "9160717097f214866630593057856d95b47747a5221068c88ebf09e062de16f6", + "end_source_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "bb331535-80ba-41fc-8fe3-e7cb0899346e", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4", + "started_unix": 1789800024.8526225, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-40-26", + "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-084026-restart-station-error/script.log.txt b/docs/evidence/native-2026-09-19-084026-restart-station-error/script.log.txt new file mode 100644 index 0000000..041a29a --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/script.log.txt @@ -0,0 +1,592 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-40-26\script.log started at 2026-09-19 08:40:29 (2026-09-19 06:40:29 UTC) + +08:40:29.417 SCRIPT : SCRIPT : Initializing scripts +08:40:29.417 SCRIPT : SCRIPT : ScriptProjectManager init +08:40:31.698 SCRIPT : SCRIPT : Compiling GameLib scripts +08:40:31.773 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 +08:40:31.773 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 +08:40:31.774 SCRIPT : SCRIPT : Compiling Game scripts +08:40:33.064 SCRIPT : Compiling Game scripts +08:40:33.064 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:40:33.064 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:40:33.219 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.355 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:40:33.387 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:40:33.518 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:40:33.578 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:40:33.578 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:40:33.582 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:40:33.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:40:33.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:40:33.647 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.684 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:40:33.960 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: e963af0e +08:40:33.967 SCRIPT : Module: Game; loaded 5759x files; 11304x classes; used 33167K 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: 38d29813 +08:40:34.883 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:40:34.883 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:40:55.958 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:40:55.985 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:40:59.167 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:40:59.167 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:41:13.069 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:41:13.097 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:41:13.609 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! +08:41:13.609 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! +08:41:13.610 SCRIPT (W): Can't open config file "" +08:41:13.618 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:41:13.618 SCRIPT (W): Slot_Chat Has no Content! +08:41:13.618 SCRIPT (W): Slot_VON Has no Content! +08:41:13.618 SCRIPT (W): Slot_AvailableActions Has no Content! +08:41:13.619 SCRIPT (W): Slot_Vehicle Has no Content! +08:41:13.619 SCRIPT (W): Slot_GameVersion Has no Content! +08:41:13.619 SCRIPT (W): Slot_Notifications Has no Content! +08:41:13.619 SCRIPT (W): Slot_Hints Has no Content! +08:41:13.631 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. +08:41:13.631 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. +08:41:13.635 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:41:13.693 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:41:13.708 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:41:13.892 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:41:15.403 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:41:15.422 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:41:15.422 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:41:15.450 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:41:15.452 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:41:15.501 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:41:15.501 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:41:15.506 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:41:15.553 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:41:15.553 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:41:15.555 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:41:15.556 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:41:15.559 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:41:15.560 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:41:15.560 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:41:15.562 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:41:15.562 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:41:15.562 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:41:15.562 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:41:15.562 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:41:15.563 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:41:15.563 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 +08:41:15.563 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:41:15.563 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:41:15.563 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 +08:41:15.563 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:41:15.564 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:41:15.564 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 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.565 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.565 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.669 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5305,7499.7> up=0.995681 +08:41:16.669 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +08:41:16.669 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:16.669 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6155,7501.97> +08:41:16.670 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3155,7501.97> terrainY=63.3164 tireTerrainGap=-0.000904083 +08:41:16.670 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6155,7501.97> radius=0.3 bottom=<7012.07,63.3155,7501.97> fraction=0.45042 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000907898 +08:41:16.670 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6027,7497.71> +08:41:16.670 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1527,7497.71> terrainY=64.1555 tireTerrainGap=-0.00283051 +08:41:16.670 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6027,7497.71> radius=0.45 bottom=<7009.88,64.1527,7497.71> fraction=0.4422 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00271606 +08:41:16.670 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2642,7497.74> +08:41:16.671 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8142,7497.74> terrainY=63.8179 tireTerrainGap=-0.00374985 +08:41:16.671 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2642,7497.74> radius=0.45 bottom=<7014.42,63.8142,7497.74> fraction=0.437222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00381088 +08:41:16.671 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:16.923 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:16.924 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:16.924 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.924 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:17.433 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:17.433 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.434 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.752 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5347,7499.71> up=0.994334 +08:41:17.752 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:41:17.752 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:17.752 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6187,7501.99> +08:41:17.752 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3187,7501.99> terrainY=63.3146 tireTerrainGap=0.00414276 +08:41:17.752 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6187,7501.99> radius=0.3 bottom=<7012.07,63.3187,7501.99> fraction=0.473389 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00414658 +08:41:17.753 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.602,7497.71> +08:41:17.753 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.152,7497.71> terrainY=64.149 tireTerrainGap=0.00299835 +08:41:17.753 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.602,7497.71> radius=0.45 bottom=<7009.93,64.152,7497.71> fraction=0.468312 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00302887 +08:41:17.753 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2647,7497.78> +08:41:17.753 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8147,7497.78> terrainY=63.8155 tireTerrainGap=-0.000743866 +08:41:17.753 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2647,7497.78> radius=0.45 bottom=<7014.47,63.8147,7497.78> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:41:17.754 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.243 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:41:18.243 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.243 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.244 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.244 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.754 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5314,7499.74> up=0.994217 +08:41:18.754 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0409494 angularSpeed=0.0213691 +08:41:18.755 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:18.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +08:41:18.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3116 tireTerrainGap=0.0020752 +08:41:18.755 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 +08:41:18.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:41:18.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1428 tireTerrainGap=0.00189209 +08:41:18.756 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +08:41:18.756 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.82> +08:41:18.756 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.82> terrainY=63.8128 tireTerrainGap=-0.00247574 +08:41:18.756 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.82> radius=0.45 bottom=<7014.51,63.8103,7497.82> fraction=0.44321 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00249481 +08:41:18.756 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:18.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:18.757 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:18.757 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:18.757 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:19.259 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.260 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.260 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.260 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:19.763 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:41:19.763 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:41:19.763 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:19.764 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:41:19.764 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +08:41:19.764 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 +08:41:19.764 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:41:19.765 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +08:41:19.765 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 +08:41:19.765 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:41:19.765 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +08:41:19.765 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 +08:41:19.765 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:19.766 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:19.766 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.766 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.767 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:20.264 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.264 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.264 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.265 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.772 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:41:20.773 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:41:20.773 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:20.773 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:41:20.773 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +08:41:20.773 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 +08:41:20.774 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:41:20.774 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +08:41:20.774 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 +08:41:20.774 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:41:20.774 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +08:41:20.774 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 +08:41:20.775 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:20.775 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.776 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:41:20.787 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:41:20.788 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:41:20.788 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:41:20.928 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:41:20.970 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:41:21.186 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:41:21.186 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:41:21.186 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:41:21.187 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:41:21.187 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:41:21.187 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:41:21.194 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:41:21.194 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:41:21.196 SCRIPT : ERR SMOKE PASS: initial prisoner position +08:41:21.196 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +08:41:21.196 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +08:41:21.196 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:41:21.196 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +08:41:21.199 SCRIPT : ERR SMOKE PASS: lock permits prisoner +08:41:21.199 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:41:21.200 SCRIPT : ERR SMOKE PASS: lock action advances mission +08:41:21.200 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +08:41:21.203 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +08:41:21.207 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +08:41:21.691 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:41:21.939 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:41:24.230 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +08:41:24.231 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:41:24.963 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:41:26.759 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +08:41:26.760 SCRIPT : ERR SMOKE PASS: radio rejects distant player +08:41:27.769 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +08:41:27.770 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:41:27.771 SCRIPT : ERR SMOKE PASS: identified radio starts defence +08:41:30.801 SCRIPT : ERR SMOKE PASS: occupied defence timer running +08:41:33.333 SCRIPT : ERR SMOKE PASS: leaving area resets defence +08:42:04.164 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:42:06.719 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +08:42:06.719 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +08:42:09.737 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +08:42:10.203 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:42:10.203 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +08:42:10.203 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +08:42:10.316 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:42:10.318 SCRIPT (W): Slot_Chat Has no Content! +08:42:10.318 SCRIPT (W): Slot_VON Has no Content! +08:42:10.318 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:10.318 SCRIPT (W): Slot_Notifications Has no Content! +08:42:12.353 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:42:12.353 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:42:12.354 SCRIPT : -- Stack trace -- +08:42:12.354 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:42:12.354 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:42:12.354 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:42:12.354 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:42:12.354 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:42:12.354 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:42:12.354 SCRIPT : ----------------- +08:42:12.354 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:42:12.355 SCRIPT : -- Stack trace -- +08:42:12.355 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:42:12.355 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:42:12.355 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:42:12.355 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:42:12.355 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:42:12.355 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:42:12.355 SCRIPT : ----------------- +08:42:12.357 SCRIPT (W): Slot_Chat Has no Content! +08:42:12.357 SCRIPT (W): Slot_VON Has no Content! +08:42:12.357 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:12.357 SCRIPT (W): Slot_Notifications Has no Content! +08:42:12.359 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:42:40.232 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:42:40.233 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:42:43.900 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +08:42:43.904 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +08:42:57.778 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:42:57.779 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:42:58.444 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! +08:42:58.444 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! +08:42:58.446 SCRIPT (W): Can't open config file "" +08:42:58.446 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:42:58.447 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:42:58.447 SCRIPT (W): Slot_Chat Has no Content! +08:42:58.448 SCRIPT (W): Slot_VON Has no Content! +08:42:58.448 SCRIPT (W): Slot_AvailableActions Has no Content! +08:42:58.448 SCRIPT (W): Slot_Vehicle Has no Content! +08:42:58.448 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:58.448 SCRIPT (W): Slot_Notifications Has no Content! +08:42:58.448 SCRIPT (W): Slot_Hints Has no Content! +08:42:58.453 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. +08:42:58.453 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. +08:42:58.475 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:42:58.488 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:42:58.602 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:42:59.997 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:43:00.004 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:43:00.004 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:43:00.013 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:43:00.014 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:43:00.023 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:43:00.023 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:43:00.028 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:43:00.037 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:43:00.038 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:43:00.039 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:43:00.040 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:43:00.043 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:43:00.044 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:43:00.044 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:43:00.046 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:43:00.046 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:43:00.046 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:43:00.046 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:43:00.046 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:43:00.046 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:43:00.047 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 +08:43:00.047 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:43:00.047 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:43:00.047 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 +08:43:00.047 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:43:00.047 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:43:00.048 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 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:01.009 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5661,7499.7> up=0.995234 +08:43:01.009 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.371015 angularSpeed=0.144353 +08:43:01.010 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:01.010 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6173,7501.98> +08:43:01.010 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3173,7501.98> terrainY=63.3149 tireTerrainGap=0.00242615 +08:43:01.010 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6173,7501.98> radius=0.3 bottom=<7012.07,63.3173,7501.98> fraction=0.465546 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00242233 +08:43:01.010 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5966,7497.72> +08:43:01.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1466,7497.72> terrainY=64.1553 tireTerrainGap=-0.00870514 +08:43:01.011 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5966,7497.72> radius=0.45 bottom=<7009.88,64.1466,7497.72> fraction=0.415592 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00856781 +08:43:01.011 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2664,7497.74> +08:43:01.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8164,7497.74> terrainY=63.818 tireTerrainGap=-0.00155258 +08:43:01.011 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2664,7497.74> radius=0.45 bottom=<7014.42,63.8164,7497.74> fraction=0.447222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0016098 +08:43:01.011 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:01.264 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:01.265 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:01.265 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:01.265 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:01.772 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:01.772 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:01.772 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:02.029 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5247,7499.72> up=0.993968 +08:43:02.030 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.065206 angularSpeed=0.0476863 +08:43:02.030 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:02.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6193,7501.99> +08:43:02.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3193,7501.99> terrainY=63.3143 tireTerrainGap=0.00502396 +08:43:02.030 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6193,7501.99> radius=0.3 bottom=<7012.06,63.3193,7501.99> fraction=0.477311 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0050087 +08:43:02.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6018,7497.72> +08:43:02.031 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1518,7497.72> terrainY=64.1502 tireTerrainGap=0.00163269 +08:43:02.031 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6018,7497.72> radius=0.45 bottom=<7009.91,64.1518,7497.72> fraction=0.462142 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00167084 +08:43:02.031 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2655,7497.78> +08:43:02.031 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8155,7497.78> terrainY=63.8156 tireTerrainGap=-3.43323e-05 +08:43:02.031 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2655,7497.78> radius=0.45 bottom=<7014.46,63.8155,7497.78> fraction=0.454444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-2.28882e-05 +08:43:02.031 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:02.279 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.785 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.786 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.786 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.786 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:03.042 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5345,7499.74> up=0.993782 +08:43:03.042 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0333158 angularSpeed=0.0583173 +08:43:03.042 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:03.043 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6138,7502.01> +08:43:03.043 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3138,7502.01> terrainY=63.3117 tireTerrainGap=0.00206757 +08:43:03.043 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6138,7502.01> radius=0.3 bottom=<7012.06,63.3138,7502.01> fraction=0.463679 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00201035 +08:43:03.043 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.596,7497.72> +08:43:03.043 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.146,7497.72> terrainY=64.1441 tireTerrainGap=0.00191498 +08:43:03.044 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.596,7497.72> radius=0.45 bottom=<7009.96,64.146,7497.72> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +08:43:03.044 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.261,7497.83> +08:43:03.044 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.811,7497.83> terrainY=63.8128 tireTerrainGap=-0.00181961 +08:43:03.044 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.261,7497.83> radius=0.45 bottom=<7014.5,63.811,7497.83> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:43:03.044 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:03.292 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.293 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.293 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.293 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.806 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:03.806 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:03.806 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:03.807 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:04.056 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993802 +08:43:04.056 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:43:04.056 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:04.057 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:43:04.057 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00171661 +08:43:04.057 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462437 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00173569 +08:43:04.057 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +08:43:04.057 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1423 tireTerrainGap=0.0025177 +08:43:04.058 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +08:43:04.058 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +08:43:04.058 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8121 tireTerrainGap=-0.00177383 +08:43:04.058 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +08:43:04.058 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:04.306 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.306 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:04.307 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:04.307 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:04.818 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.818 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.818 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.819 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:05.074 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993802 +08:43:05.075 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:43:05.075 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:05.075 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:43:05.075 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00171661 +08:43:05.075 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462437 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00173569 +08:43:05.076 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +08:43:05.076 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1423 tireTerrainGap=0.0025177 +08:43:05.076 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +08:43:05.076 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +08:43:05.076 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8121 tireTerrainGap=-0.00177383 +08:43:05.076 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +08:43:05.077 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:05.344 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:05.345 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:43:05.350 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:43:05.352 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:43:05.352 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:43:05.519 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:43:05.543 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +08:43:05.543 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:43:05.544 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:43:05.544 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:43:05.544 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:43:05.544 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:43:05.544 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:43:05.546 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:43:05.546 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:43:05.550 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:43:05.550 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:43:05.550 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:43:05.551 SCRIPT : ERR SMOKE PASS: initial prisoner position +08:43:05.551 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +08:43:05.551 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +08:43:05.552 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +08:43:05.554 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +08:43:05.554 SCRIPT : ERR SMOKE PASS: lock permits prisoner +08:43:05.554 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:43:05.555 SCRIPT : ERR SMOKE PASS: lock action advances mission +08:43:05.555 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +08:43:05.557 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +08:43:05.559 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +08:43:06.037 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:43:06.521 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:43:08.586 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +08:43:08.587 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:43:09.529 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:43:11.106 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +08:43:11.106 SCRIPT : ERR SMOKE PASS: radio rejects distant player +08:43:12.109 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +08:43:12.109 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:43:12.110 SCRIPT : ERR SMOKE PASS: identified radio starts defence +08:43:15.132 SCRIPT : ERR SMOKE PASS: occupied defence timer running +08:43:17.652 SCRIPT : ERR SMOKE PASS: leaving area resets defence +08:43:48.748 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:43:50.996 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +08:43:50.996 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +08:43:54.026 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +08:43:54.768 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:43:54.768 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +08:43:54.768 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +08:43:54.882 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:43:54.883 SCRIPT (W): Slot_Chat Has no Content! +08:43:54.883 SCRIPT (W): Slot_VON Has no Content! +08:43:54.884 SCRIPT (W): Slot_GameVersion Has no Content! +08:43:54.884 SCRIPT (W): Slot_Notifications Has no Content! +08:43:56.919 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:43:56.919 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:43:56.919 SCRIPT : -- Stack trace -- +08:43:56.919 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:43:56.920 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:43:56.920 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:43:56.920 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:43:56.920 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:43:56.920 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:43:56.920 SCRIPT : ----------------- +08:43:56.920 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:43:56.920 SCRIPT : -- Stack trace -- +08:43:56.921 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:43:56.921 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:43:56.921 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:43:56.921 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:43:56.921 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:43:56.921 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:43:56.921 SCRIPT : ----------------- +08:43:56.923 SCRIPT (W): Slot_Chat Has no Content! +08:43:56.923 SCRIPT (W): Slot_VON Has no Content! +08:43:56.923 SCRIPT (W): Slot_GameVersion Has no Content! +08:43:56.924 SCRIPT (W): Slot_Notifications Has no Content! +08:43:56.924 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/source-provenance.json b/docs/evidence/native-2026-09-19-084026-restart-station-error/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/source-sha256.json b/docs/evidence/native-2026-09-19-084026-restart-station-error/source-sha256.json new file mode 100644 index 0000000..e058dc0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/source-sha256.json @@ -0,0 +1,164 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "e4589e5af55701f8c1f7f33e0a49e45f34b073bfddbdc87e009bea69af683828", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "acbc8a1d6a5c76278c447b666ae7362740953422a9ca287361ad6286b6944c59", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "95186a6c1553b38c6a214e897f845ef1799d8acca0cc896d8df73de680050888", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-084543-local-admission-failure/console.log.txt b/docs/evidence/native-2026-09-19-084543-local-admission-failure/console.log.txt new file mode 100644 index 0000000..ebc17dd --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/console.log.txt @@ -0,0 +1,309 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-45-43\console.log started at 2026-09-19 08:45:43 (2026-09-19 06:45:43 UTC) + +08:45:43.856 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-45-43' to filesystem under name logs +08:45:43.856 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:45:43.856 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:45:43.858 PROFILING : Workbench Create Engine took: 11.319000 ms +08:45:44.900 INIT : INIT : Workbench Init Engine +08:45:44.901 ENGINE : Initializing engine, version 192142 +08:45:44.901 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 local-admission -noThrow -disableCrashReporter +08:45:44.912 ENGINE : Addon dirs: +08:45:44.912 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:45:44.912 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:45:44.912 ENGINE : dir: './addons' +08:45:44.912 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:45:44.912 ENGINE : Available addons: +08:45:44.912 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:45:44.912 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:45:44.912 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:45:44.912 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:45:44.912 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:45:44.912 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:45:44.912 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:45:44.912 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:45:45.032 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:45:45.034 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:45:45.035 ENGINE : CPU vendor : AuthenticAMD +08:45:45.035 ENGINE : CPU type : 2 +08:45:45.035 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:45:45.035 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:45:45.035 ENGINE : CPU count logical : 16 +08:45:45.035 ENGINE : CPU count physical : 8 +08:45:45.035 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:45:45.035 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:45:45.035 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:45:45.166 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:45:45.168 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:45:45.168 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-45-43/resourceDatabase.rdb) +08:45:45.314 RESOURCES : RESOURCES : ResourceDB: full scan +08:45:45.319 RESOURCES : RESOURCES : scanning... +08:45:45.319 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:45:45.322 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:45:45.459 RESOURCES : RESOURCES : scanning @"core" +08:45:45.462 RESOURCES : RESOURCES : scanning @"profile" +08:45:45.463 RESOURCES : RESOURCES : scanning @"logs" +08:45:45.463 RESOURCES : RESOURCES : processing meta-files... +08:45:45.528 RESOURCES : RESOURCES : processing files... +08:45:45.538 INIT : Workbench startup +08:45:45.538 INIT : Workbench Init Engine +08:45:45.538 RESOURCES : ResourceDB: full scan +08:45:45.538 RESOURCES : processing files... +08:45:45.538 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:45:45.538 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:45:45.538 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:45:45.538 RESOURCES : RESOURCES : processing folders... +08:45:45.545 RESOURCES : RESOURCES : creating GUID-item mapping... +08:45:45.562 RESOURCES : RESOURCES : building tree... +08:45:45.615 PROFILING : ResourceDB: full scan took: 301.243100 ms +08:45:45.616 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:45:45.618 RESOURCES : ResourceDB: written 6270/6270 bytes +08:45:45.618 RESOURCES : ResourceDB: cache successfully saved +08:45:45.618 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:45:45.620 RESOURCES : ResourceDB: written 206/206 bytes +08:45:45.620 RESOURCES : ResourceDB: cache successfully saved +08:45:45.620 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-45-43/resourceDatabase.rdb) +08:45:45.621 RESOURCES : ResourceDB: written 162/162 bytes +08:45:45.621 RESOURCES : ResourceDB: cache successfully saved +08:45:45.622 ENGINE : GameProject load +08:45:45.622 ENGINE : Loaded addons: +08:45:45.622 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:45:45.622 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:45:45.622 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:45:45.623 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:45:45.624 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:45:45.624 ENGINE : Engine user settings config loaded +08:45:45.624 PROFILING : Settings changed took: 0.001800 ms +08:45:45.724 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:45:45.725 RENDER : Basic screen setup: +08:45:45.725 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:45:45.725 RENDER : MSAA : none +08:45:45.742 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:45:45.742 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:45:45.742 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:45:45.742 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:45:45.742 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:45:45.742 RENDER : AMD AGS correctly initialized +08:45:45.742 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 +08:45:45.742 RENDER : Detected output devices: +08:45:45.742 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:45:45.742 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:45:45.742 RENDER : Concurrent frames limit 2 +08:45:45.817 RENDER : DX12 device successfully created by AMD AGS library +08:45:45.817 RENDER : * user markers not supported in this version AMD SW +08:45:45.817 RENDER : Graphics device features +08:45:45.817 RENDER : Needed: +08:45:45.817 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:45:45.817 RENDER : Optional: +08:45:45.817 RENDER : * Allow tearing (VSYNC) : 1 +08:45:45.817 RENDER : * 16 bits : 1 +08:45:45.817 RENDER : * Resource heap tier : 3 +08:45:45.817 RENDER : * Persistent heaps (DRED) : 1 +08:45:45.817 RENDER : * DRED 1.2 is supported by compiler +08:45:45.839 RENDER : Main RT format setup. +08:45:45.839 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:45:45.839 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:45:45.841 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:45:45.871 PROFILING : Settings changed took: 0.018000 ms +08:45:46.332 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:45:46.332 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:45:46.332 AUDIO : Audio client: +08:45:46.332 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:45:46.335 RENDER : RENDER : Reload shaders +08:45:46.335 RENDER : Enfusion shader version 13 +08:45:46.335 INIT : INIT : ShaderListReload +08:45:46.336 PROFILING : ShaderListReload took: 0.000500 ms +08:45:46.475 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:45:46.475 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:45:46.475 AUDIO : Audio client: +08:45:46.475 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:45:46.576 RENDER : Loaded 3752 newer shader binaries +08:45:46.577 PROFILING : Reload shaders took: 241.320200 ms +08:45:46.577 ENGINE : Initializing inputs. +08:45:46.590 NETWORK : Initializing networking. +08:45:46.590 NETWORK : Using new GameRplScheduler. +08:45:46.591 SCRIPT : SCRIPT : Initializing scripts +08:45:46.591 SCRIPT : SCRIPT : ScriptProjectManager init +08:45:47.468 PROFILING : ScriptProjectManager init took: 877.015500 ms +08:45:47.503 PROFILING : Initializing scripts took: 911.986200 ms +08:45:47.523 ENGINE : Enfusion engine successfully created. +08:45:47.523 PROFILING : Workbench Init Engine took: 2622.298000 ms +08:45:47.523 INIT : INIT : Workbench Create Game +08:45:47.533 GUI : Using default language (en_us) +08:45:47.534 GUI : Loading 'en_us' localization file. +08:45:47.534 INIT : INIT : Loading StringTable +08:45:47.558 PROFILING : Loading StringTable took: 24.396300 ms +08:45:47.558 SCRIPT : SCRIPT : Compiling GameLib scripts +08:45:47.614 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 +08:45:47.614 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 +08:45:47.615 PROFILING : Compiling GameLib scripts took: 56.735700 ms +08:45:47.615 SCRIPT : SCRIPT : Compiling Game scripts +08:45:48.757 INIT : Workbench Create Game +08:45:48.757 SCRIPT : Compiling Game scripts +08:45:48.757 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:45:48.757 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:45:48.901 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.032 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:45:49.068 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:45:49.207 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:45:49.273 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:45:49.274 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:45:49.275 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:45:49.323 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.323 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.324 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:45:49.324 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:45:49.350 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.389 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:45:49.667 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 +08:45:49.674 SCRIPT : Module: Game; loaded 5733x files; 11231x classes; used 32874K 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: a1326c45 +08:45:49.715 PROFILING : Compiling Game scripts took: 2100.399900 ms +08:45:49.721 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:45:49.760 ENGINE : Game successfully created. +08:45:49.761 PROFILING : Workbench Create Game took: 2238.310400 ms +08:45:49.768 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +08:45:50.576 INIT : INIT : Workbench Reload Game +08:45:50.577 ENGINE : Game destroyed. +08:45:50.583 GUI : Using default language (en_us) +08:45:50.583 GUI : Loading 'en_us' localization file. +08:45:50.583 INIT : INIT : Loading StringTable +08:45:50.592 PROFILING : Loading StringTable took: 9.187000 ms +08:45:50.592 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:45:50.599 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:45:50.599 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:45:50.599 ENGINE : Game successfully created. +08:45:50.599 ENGINE : Game successfully initialized. +08:45:50.599 PROFILING : Workbench Reload Game took: 23.412400 ms +08:45:51.283 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:45:52.258 WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:45:52.258 WORLD : Entity layer load @"$ERR_Core:Worlds/ERR_Everon_Layers/default.layer" +08:45:52.258 RESOURCES : GetResourceObject @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:45:52.258 WORLD : Entity prefab load @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:45:52.258 WORLD (E): Unknown class 'ERR_SpawnLogic' at offset 499(0x1f3) +08:45:52.263 PROFILING : Entities load took: 979.268500 ms +08:45:52.273 WORLD : WORLD : CreateEntities +08:45:52.278 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:45:52.278 PROFILING : NotifyBeforeEntitiesCreated took: 0.002700 ms +08:45:52.279 WORLD : WORLD : Wait for preloading data +08:45:52.279 PROFILING : Wait for preloading data took: 0.004000 ms +08:45:52.394 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:45:52.394 PROFILING : PROFILING : Terrain load +08:45:53.983 PROFILING : Terrain load took: 1588.134700 ms +08:45:57.945 WORLD : CreateEntities +08:45:57.946 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" +08:45:57.946 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:45:57.946 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:46:07.743 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:46:07.744 PROFILING : NotifyBeforeEntitiesInitialized took: 0.007500 ms +08:46:08.175 WORLD : InitEntities 'world' +08:46:08.175 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:46:08.175 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic! +08:46:08.175 WORLD : WORLD : NotifyEntitiesInitialized +08:46:08.175 TERRAIN : TERRAIN : Initializing road networks... +08:46:08.178 PROFILING : Initializing road networks... took: 2.236900 ms +08:46:08.178 PROFILING : NotifyEntitiesInitialized took: 2.569800 ms +08:46:08.178 PROFILING : CreateEntities took: 15904.253000 ms +08:46:08.363 PROFILING : * WorldEditor: LoadWorld: 17084.125700 ms +08:46:09.829 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:46:09.829 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:46:09.830 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:46:09.831 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:46:09.930 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:46:09.955 BACKEND : Attempting online Game Config instead. +08:46:13.144 INIT : INIT : Workbench Reload Game +08:46:13.146 ENGINE : Game destroyed. +08:46:13.153 GUI : Using default language (en_us) +08:46:13.153 GUI : Loading 'en_us' localization file. +08:46:13.153 INIT : INIT : Loading StringTable +08:46:13.172 PROFILING : Loading StringTable took: 18.859700 ms +08:46:13.173 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:46:13.183 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:46:13.183 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:46:13.183 ENGINE : Game successfully created. +08:46:13.183 ENGINE : Game successfully initialized. +08:46:13.184 PROFILING : Workbench Reload Game took: 38.880100 ms +08:46:13.187 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:46:13.241 PLATFORM : Save data from container 'settings' have been loaded +08:46:13.331 PLATFORM : Save data from container 'sessions' have been loaded +08:46:13.332 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:46:13.332 ENGINE : Game user settings config loaded +08:46:13.430 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:46:13.439 WORLD : WORLD : Game::LoadEntities +08:46:13.439 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:46:13.440 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:46:13.440 WORLD : WORLD : CreateEntities +08:46:13.440 WORLD : WORLD : CreateEntities +08:46:13.440 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:46:13.445 RESOURCES : Loaded mission headers from 7 addon(s)! +08:46:13.445 PROFILING : NotifyBeforeEntitiesCreated took: 4.689600 ms +08:46:13.445 WORLD : WORLD : Wait for preloading data +08:46:13.445 PROFILING : Wait for preloading data took: 0.000700 ms +08:46:18.018 WORLD : Game::LoadEntities +08:46:18.018 WORLD : CreateEntities +08:46:18.018 WORLD : CreateEntities +08:46:18.018 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" +08:46:18.018 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:46:18.018 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:46:19.485 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:46:19.485 ENTITY : CreateComponent 'Hierarchy' +08:46:19.485 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>') +08:46:19.485 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:46:19.485 ENTITY : CreateComponent 'Hierarchy' +08:46:19.485 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>') +08:46:19.485 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:46:19.485 ENTITY : CreateComponent 'Hierarchy' +08:46:19.485 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>') +08:46:19.491 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:46:19.491 ENTITY : CreateComponent 'Hierarchy' +08:46:19.491 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>') +08:46:19.491 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:46:19.491 ENTITY : CreateComponent 'Hierarchy' +08:46:19.491 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>') +08:46:19.491 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:46:19.491 ENTITY : CreateComponent 'Hierarchy' +08:46:19.491 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>') +08:46:19.496 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:46:19.496 ENTITY : CreateComponent 'Hierarchy' +08:46:19.496 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>') +08:46:19.496 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:46:19.496 ENTITY : CreateComponent 'Hierarchy' +08:46:19.496 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>') +08:46:19.497 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:46:19.497 ENTITY : CreateComponent 'Hierarchy' +08:46:19.497 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>') +08:46:24.405 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:46:24.405 PROFILING : NotifyBeforeEntitiesInitialized took: 0.058100 ms +08:46:26.357 WORLD : InitEntities 'world' +08:46:26.357 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:46:26.357 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:46:26.358 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic! +08:46:26.358 SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance + +Class: 'SCR_RespawnSystemComponent' +Function: 'OnInit' +Stack trace: +Scripts/Game/GameMode/Respawn/SCR_RespawnSystemComponent.c:320 Function OnInit +08:46:26.381 WORLD : InitEntities 'world' +08:46:26.381 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:46:26.381 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:46:26.382 WORLD : WORLD : NotifyEntitiesInitialized +08:46:26.382 TERRAIN : TERRAIN : Initializing road networks... +08:46:26.384 PROFILING : Initializing road networks... took: 2.515900 ms +08:46:26.384 DEFAULT : DEFAULT : WorldVolumesCollection +08:46:26.446 PROFILING : WorldVolumesCollection took: 61.793200 ms +08:46:26.446 INIT : INIT : SoundWorldInit +08:46:26.460 PROFILING : SoundWorldInit took: 13.550000 ms +08:46:26.460 PROFILING : NotifyEntitiesInitialized took: 78.146600 ms +08:46:26.460 PROFILING : CreateEntities took: 13019.353000 ms +08:46:26.460 PROFILING : CreateEntities took: 13019.536100 ms +08:46:26.461 WORLD : WORLD : Wait for preloading data around camera +08:46:26.461 PROFILING : Wait for preloading data around camera took: 0.000800 ms +08:46:26.461 WORLD : WORLD : EOnActivate +08:46:26.493 PROFILING : EOnActivate took: 32.769100 ms +08:46:26.494 PROFILING : Game::LoadEntities took: 13054.379300 ms diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/error.log.txt b/docs/evidence/native-2026-09-19-084543-local-admission-failure/error.log.txt new file mode 100644 index 0000000..2be25e9 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/error.log.txt @@ -0,0 +1,89 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-45-43\error.log started at 2026-09-19 08:45:45 (2026-09-19 06:45:45 UTC) + +08:45:45.538 INIT : Workbench startup +08:45:45.538 INIT : Workbench Init Engine +08:45:45.538 RESOURCES : ResourceDB: full scan +08:45:45.538 RESOURCES : processing files... +08:45:45.538 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:45:45.538 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:45:45.538 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:45:48.757 INIT : Workbench Create Game +08:45:48.757 SCRIPT : Compiling Game scripts +08:45:48.757 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:45:48.757 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:45:48.901 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.032 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:45:49.068 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:45:49.207 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:45:49.273 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:45:49.274 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:45:49.275 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:45:49.323 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.323 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.324 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:45:49.324 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:45:49.350 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.389 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:45:52.258 WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:45:52.258 WORLD : Entity layer load @"$ERR_Core:Worlds/ERR_Everon_Layers/default.layer" +08:45:52.258 RESOURCES : GetResourceObject @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:45:52.258 WORLD : Entity prefab load @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:45:52.258 WORLD (E): Unknown class 'ERR_SpawnLogic' at offset 499(0x1f3) +08:45:57.945 WORLD : CreateEntities +08:45:57.946 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" +08:45:57.946 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:45:57.946 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:46:08.175 WORLD : InitEntities 'world' +08:46:08.175 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:46:08.175 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic! +08:46:13.187 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:46:18.018 WORLD : Game::LoadEntities +08:46:18.018 WORLD : CreateEntities +08:46:18.018 WORLD : CreateEntities +08:46:18.018 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" +08:46:18.018 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:46:18.018 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:46:19.485 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:46:19.485 ENTITY : CreateComponent 'Hierarchy' +08:46:19.485 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>') +08:46:19.485 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:46:19.485 ENTITY : CreateComponent 'Hierarchy' +08:46:19.485 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>') +08:46:19.485 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:46:19.485 ENTITY : CreateComponent 'Hierarchy' +08:46:19.485 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>') +08:46:19.491 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:46:19.491 ENTITY : CreateComponent 'Hierarchy' +08:46:19.491 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>') +08:46:19.491 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:46:19.491 ENTITY : CreateComponent 'Hierarchy' +08:46:19.491 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>') +08:46:19.491 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:46:19.491 ENTITY : CreateComponent 'Hierarchy' +08:46:19.491 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>') +08:46:19.496 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:46:19.496 ENTITY : CreateComponent 'Hierarchy' +08:46:19.496 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>') +08:46:19.496 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:46:19.496 ENTITY : CreateComponent 'Hierarchy' +08:46:19.496 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>') +08:46:19.497 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:46:19.497 ENTITY : CreateComponent 'Hierarchy' +08:46:19.497 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>') +08:46:26.357 WORLD : InitEntities 'world' +08:46:26.357 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:46:26.357 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:46:26.358 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic! +08:46:26.358 SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance + +Class: 'SCR_RespawnSystemComponent' +Function: 'OnInit' +Stack trace: +Scripts/Game/GameMode/Respawn/SCR_RespawnSystemComponent.c:320 Function OnInit diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/headless-launch.log.txt b/docs/evidence/native-2026-09-19-084543-local-admission-failure/headless-launch.log.txt new file mode 100644 index 0000000..ae56220 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/headless-launch.log.txt @@ -0,0 +1,146 @@ +[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. +[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: 0x1c001a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1c001a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1c001a4 + 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: 0x1c003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1c003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1c003a4 + 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: 0x1c003a4 - 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: 0x1c003a4 swapchain: 0x5555804bfbf0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555804bfbf0 +[Gamescope WSI] Destroyed swapchain: 0x5555804bfbf0 +[Gamescope WSI] Creating swapchain for xid: 0x1c003a4 - 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: 0x1c003a4 swapchain: 0x5555804cfd30 - imageCount: 4 +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source-sha256.json b/docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source-sha256.json new file mode 100644 index 0000000..3ed5d69 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source-sha256.json @@ -0,0 +1,166 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "4e92b4b70f3b00efddd6fca7a2527423a1da028500431da921bfddb14f4a5898", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "988f3b566fe7b6bea6385ea9d5b1f290fdb718998c4d9ddb0140ce840d0de726", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "f1a10b75ec62ac41f9d5fb3fc985bc62950722c8f8a825eb6ec13291d26be846", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-084543-local-admission-failure/launch-source.json b/docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source.json new file mode 100644 index 0000000..9f1efc2 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "37196d1e-6204-41b5-a19a-d3e9ecb0533b", + "captured_unix": 1789800342.1644285, + "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", + "local-admission", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "37e29e66246c7571c037fcc9cf4b0d8ca756d2894ff8c717593a458821400323" +} diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/report.json b/docs/evidence/native-2026-09-19-084543-local-admission-failure/report.json new file mode 100644 index 0000000..578ff83 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/report.json @@ -0,0 +1,18 @@ +{ + "log": "docs/evidence/native-2026-09-19-084543-local-admission-failure/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [ + "08:46:08.175 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic!", + "08:46:26.358 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic!", + "08:46:26.358 SCRIPT (E): Virtual Machine Exception" + ], + "engine_errors": [ + "08:45:52.258 WORLD (E): Unknown class 'ERR_SpawnLogic' at offset 499(0x1f3)", + "08:46:08.175 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic!", + "08:46:26.358 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic!", + "08:46:26.358 SCRIPT (E): Virtual Machine Exception" + ], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/runner.json.txt b/docs/evidence/native-2026-09-19-084543-local-admission-failure/runner.json.txt new file mode 100644 index 0000000..dac715b --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789800387.1281621, + "console_sha256": "37d76fa7bd6f2643e59a60a90f17224c85705e55ea280e649e424cc7f01e829d", + "end_source_sha256": "37e29e66246c7571c037fcc9cf4b0d8ca756d2894ff8c717593a458821400323", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "37196d1e-6204-41b5-a19a-d3e9ecb0533b", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "37e29e66246c7571c037fcc9cf4b0d8ca756d2894ff8c717593a458821400323", + "started_unix": 1789800342.1644905, + "result": "test-failed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-45-43", + "rounds_required": 1, + "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-084543-local-admission-failure/script.log.txt b/docs/evidence/native-2026-09-19-084543-local-admission-failure/script.log.txt new file mode 100644 index 0000000..b7de59e --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/script.log.txt @@ -0,0 +1,48 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-45-43\script.log started at 2026-09-19 08:45:46 (2026-09-19 06:45:46 UTC) + +08:45:46.591 SCRIPT : SCRIPT : Initializing scripts +08:45:46.591 SCRIPT : SCRIPT : ScriptProjectManager init +08:45:47.558 SCRIPT : SCRIPT : Compiling GameLib scripts +08:45:47.614 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 +08:45:47.614 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 +08:45:47.615 SCRIPT : SCRIPT : Compiling Game scripts +08:45:48.757 SCRIPT : Compiling Game scripts +08:45:48.757 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:45:48.757 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:45:48.901 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.032 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:45:49.068 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:45:49.173 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:45:49.207 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:45:49.273 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:45:49.274 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:45:49.275 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:45:49.323 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.323 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.324 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:45:49.324 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:45:49.350 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:45:49.389 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:45:49.667 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 +08:45:49.674 SCRIPT : Module: Game; loaded 5733x files; 11231x classes; used 32874K 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: a1326c45 +08:45:50.599 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:45:50.599 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:46:08.175 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic! +08:46:09.930 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:46:13.183 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:46:13.183 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:46:26.357 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:46:26.358 SCRIPT (E): SCR_RespawnSystemComponent is missing SCR_SpawnLogic! +08:46:26.358 SCRIPT (E): Virtual Machine Exception + +Reason: NULL pointer to instance + +Class: 'SCR_RespawnSystemComponent' +Function: 'OnInit' +Stack trace: +Scripts/Game/GameMode/Respawn/SCR_RespawnSystemComponent.c:320 Function OnInit +08:46:26.381 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/source-provenance.json b/docs/evidence/native-2026-09-19-084543-local-admission-failure/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-084543-local-admission-failure/source-sha256.json b/docs/evidence/native-2026-09-19-084543-local-admission-failure/source-sha256.json new file mode 100644 index 0000000..3ed5d69 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084543-local-admission-failure/source-sha256.json @@ -0,0 +1,166 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "4e92b4b70f3b00efddd6fca7a2527423a1da028500431da921bfddb14f4a5898", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "988f3b566fe7b6bea6385ea9d5b1f290fdb718998c4d9ddb0140ce840d0de726", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "addons/core/Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c": "f1a10b75ec62ac41f9d5fb3fc985bc62950722c8f8a825eb6ec13291d26be846", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-084919-flight-compile-failure/console.log.txt b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/console.log.txt new file mode 100644 index 0000000..fe7e533 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/console.log.txt @@ -0,0 +1,185 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-49-19\console.log started at 2026-09-19 08:49:19 (2026-09-19 06:49:19 UTC) + +08:49:19.657 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-49-19' to filesystem under name logs +08:49:19.657 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:49:19.657 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:49:19.659 PROFILING : Workbench Create Engine took: 11.587200 ms +08:49:20.698 INIT : INIT : Workbench Init Engine +08:49:20.699 ENGINE : Initializing engine, version 192142 +08:49:20.699 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 local-admission -noThrow -disableCrashReporter +08:49:20.709 ENGINE : Addon dirs: +08:49:20.709 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:49:20.709 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:49:20.709 ENGINE : dir: './addons' +08:49:20.709 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:49:20.709 ENGINE : Available addons: +08:49:20.709 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:49:20.709 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:49:20.709 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:49:20.709 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:49:20.709 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:49:20.709 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:49:20.709 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:49:20.709 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:49:20.821 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:49:20.824 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:49:20.824 ENGINE : CPU vendor : AuthenticAMD +08:49:20.824 ENGINE : CPU type : 2 +08:49:20.824 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:49:20.824 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:49:20.824 ENGINE : CPU count logical : 16 +08:49:20.824 ENGINE : CPU count physical : 8 +08:49:20.824 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:49:20.824 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:49:20.824 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:49:20.958 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:49:20.959 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:49:20.960 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-49-19/resourceDatabase.rdb) +08:49:21.120 RESOURCES : RESOURCES : ResourceDB: full scan +08:49:21.126 RESOURCES : RESOURCES : scanning... +08:49:21.126 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:49:21.130 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:49:21.278 RESOURCES : RESOURCES : scanning @"core" +08:49:21.283 RESOURCES : RESOURCES : scanning @"profile" +08:49:21.283 RESOURCES : RESOURCES : scanning @"logs" +08:49:21.284 RESOURCES : RESOURCES : processing meta-files... +08:49:21.355 RESOURCES : RESOURCES : processing files... +08:49:21.368 INIT : Workbench startup +08:49:21.368 INIT : Workbench Init Engine +08:49:21.368 RESOURCES : ResourceDB: full scan +08:49:21.368 RESOURCES : processing files... +08:49:21.368 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:49:21.368 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:49:21.368 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:49:21.368 RESOURCES : RESOURCES : processing folders... +08:49:21.376 RESOURCES : RESOURCES : creating GUID-item mapping... +08:49:21.395 RESOURCES : RESOURCES : building tree... +08:49:21.461 PROFILING : ResourceDB: full scan took: 340.799700 ms +08:49:21.462 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:49:21.464 RESOURCES : ResourceDB: written 6336/6336 bytes +08:49:21.464 RESOURCES : ResourceDB: cache successfully saved +08:49:21.464 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:49:21.466 RESOURCES : ResourceDB: written 206/206 bytes +08:49:21.466 RESOURCES : ResourceDB: cache successfully saved +08:49:21.466 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-49-19/resourceDatabase.rdb) +08:49:21.468 RESOURCES : ResourceDB: written 162/162 bytes +08:49:21.468 RESOURCES : ResourceDB: cache successfully saved +08:49:21.468 ENGINE : GameProject load +08:49:21.468 ENGINE : Loaded addons: +08:49:21.468 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:49:21.468 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:49:21.468 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:49:21.470 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:49:21.470 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:49:21.470 ENGINE : Engine user settings config loaded +08:49:21.470 PROFILING : Settings changed took: 0.001700 ms +08:49:21.582 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:49:21.584 RENDER : Basic screen setup: +08:49:21.584 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:49:21.584 RENDER : MSAA : none +08:49:21.599 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:49:21.599 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:49:21.599 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:49:21.599 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:49:21.599 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:49:21.599 RENDER : AMD AGS correctly initialized +08:49:21.599 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 +08:49:21.599 RENDER : Detected output devices: +08:49:21.599 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:49:21.599 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:49:21.599 RENDER : Concurrent frames limit 2 +08:49:21.673 RENDER : DX12 device successfully created by AMD AGS library +08:49:21.673 RENDER : * user markers not supported in this version AMD SW +08:49:21.673 RENDER : Graphics device features +08:49:21.673 RENDER : Needed: +08:49:21.673 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:49:21.673 RENDER : Optional: +08:49:21.673 RENDER : * Allow tearing (VSYNC) : 1 +08:49:21.673 RENDER : * 16 bits : 1 +08:49:21.673 RENDER : * Resource heap tier : 3 +08:49:21.673 RENDER : * Persistent heaps (DRED) : 1 +08:49:21.673 RENDER : * DRED 1.2 is supported by compiler +08:49:21.704 RENDER : Main RT format setup. +08:49:21.704 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:49:21.704 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:49:21.710 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:49:21.746 PROFILING : Settings changed took: 0.024200 ms +08:49:22.239 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:49:22.239 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:49:22.239 AUDIO : Audio client: +08:49:22.239 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:49:22.244 RENDER : RENDER : Reload shaders +08:49:22.244 RENDER : Enfusion shader version 13 +08:49:22.244 INIT : INIT : ShaderListReload +08:49:22.244 PROFILING : ShaderListReload took: 0.000500 ms +08:49:22.383 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:49:22.383 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:49:22.383 AUDIO : Audio client: +08:49:22.383 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:49:22.505 RENDER : Loaded 3752 newer shader binaries +08:49:22.506 PROFILING : Reload shaders took: 261.861000 ms +08:49:22.506 ENGINE : Initializing inputs. +08:49:22.519 NETWORK : Initializing networking. +08:49:22.519 NETWORK : Using new GameRplScheduler. +08:49:22.519 SCRIPT : SCRIPT : Initializing scripts +08:49:22.519 SCRIPT : SCRIPT : ScriptProjectManager init +08:49:23.374 PROFILING : ScriptProjectManager init took: 854.540200 ms +08:49:23.410 PROFILING : Initializing scripts took: 890.272700 ms +08:49:23.428 ENGINE : Enfusion engine successfully created. +08:49:23.428 PROFILING : Workbench Init Engine took: 2729.364000 ms +08:49:23.428 INIT : INIT : Workbench Create Game +08:49:23.441 GUI : Using default language (en_us) +08:49:23.442 GUI : Loading 'en_us' localization file. +08:49:23.442 INIT : INIT : Loading StringTable +08:49:23.466 PROFILING : Loading StringTable took: 24.805600 ms +08:49:23.466 SCRIPT : SCRIPT : Compiling GameLib scripts +08:49:23.522 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 +08:49:23.522 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 +08:49:23.523 PROFILING : Compiling GameLib scripts took: 56.278600 ms +08:49:23.523 SCRIPT : SCRIPT : Compiling Game scripts +08:49:24.629 INIT : Workbench Create Game +08:49:24.629 SCRIPT : Compiling Game scripts +08:49:24.629 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:49:24.629 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:49:24.772 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:24.894 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:49:24.928 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:49:24.940 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,216": Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:24.940 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,260": Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,324": Error in parameters +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,333": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,335": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337": Syntax error +08:49:25.055 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:49:25.086 SCRIPT (E): @"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetCountEntitiesInTrigger.c,10": Can't find class SCR_ScenarioFrameworkParam +08:49:25.101 SCRIPT (E): @"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskLayer.c,11": Can't find class SCR_ScenarioFrameworkParam +08:49:25.115 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:49:25.115 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:49:25.116 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:49:25.127 SCRIPT (E): @"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,25": Can't find class SCR_SpinningWidgetAnimation +08:49:25.127 SCRIPT (E): @"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,27": Can't find class SCR_SpinningWidgetAnimation +08:49:25.157 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.157 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.159 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:49:25.159 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:49:25.185 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.216 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:49:25.218 SCRIPT (E): @"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,452": Can't find class Tuple2 +08:49:25.218 SCRIPT (E): @"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,517": Can't find class Tuple2 +08:49:25.227 SCRIPT (E): Can't compile "Game" script module! + +Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c(216): Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:25.752 SCRIPT (W): Failed to load +08:49:25.752 PROFILING : Compiling Game scripts took: 2229.502200 ms +08:49:25.752 ENGINE (E): Unable to initialize a game/gamelib. Some workbench features will not work. +08:49:25.752 SCRIPT (W): Initializing default GameLib's game class. +08:49:25.752 INIT : Creating game instance(Game), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:49:25.782 ENGINE : Game successfully created. +08:49:25.789 PROFILING : Workbench Create Game took: 2360.799500 ms +08:49:25.815 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/error.log.txt b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/error.log.txt new file mode 100644 index 0000000..3b8a8ba --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/error.log.txt @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-49-19\error.log started at 2026-09-19 08:49:21 (2026-09-19 06:49:21 UTC) + +08:49:21.368 INIT : Workbench startup +08:49:21.368 INIT : Workbench Init Engine +08:49:21.368 RESOURCES : ResourceDB: full scan +08:49:21.368 RESOURCES : processing files... +08:49:21.368 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:49:21.368 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:49:21.368 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:49:24.629 INIT : Workbench Create Game +08:49:24.629 SCRIPT : Compiling Game scripts +08:49:24.629 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:49:24.629 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:49:24.772 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:24.894 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:49:24.928 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:49:24.940 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,216": Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:24.940 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,260": Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,324": Error in parameters +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,333": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,335": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337": Syntax error +08:49:25.055 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:49:25.086 SCRIPT (E): @"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetCountEntitiesInTrigger.c,10": Can't find class SCR_ScenarioFrameworkParam +08:49:25.101 SCRIPT (E): @"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskLayer.c,11": Can't find class SCR_ScenarioFrameworkParam +08:49:25.115 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:49:25.115 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:49:25.116 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:49:25.127 SCRIPT (E): @"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,25": Can't find class SCR_SpinningWidgetAnimation +08:49:25.127 SCRIPT (E): @"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,27": Can't find class SCR_SpinningWidgetAnimation +08:49:25.157 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.157 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.159 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:49:25.159 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:49:25.185 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.216 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:49:25.218 SCRIPT (E): @"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,452": Can't find class Tuple2 +08:49:25.218 SCRIPT (E): @"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,517": Can't find class Tuple2 +08:49:25.227 SCRIPT (E): Can't compile "Game" script module! + +Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c(216): Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:25.752 SCRIPT (W): Failed to load +08:49:25.752 ENGINE (E): Unable to initialize a game/gamelib. Some workbench features will not work. +08:49:25.752 SCRIPT (W): Initializing default GameLib's game class. diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/headless-launch.log.txt b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/headless-launch.log.txt new file mode 100644 index 0000000..8564183 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/headless-launch.log.txt @@ -0,0 +1,131 @@ +[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: 115 +[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] [Info] launch: Primary child shut down! +(EE) failed to read Wayland events: Broken pipe diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source-sha256.json b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source-sha256.json new file mode 100644 index 0000000..b62b7f3 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source-sha256.json @@ -0,0 +1,167 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "4e92b4b70f3b00efddd6fca7a2527423a1da028500431da921bfddb14f4a5898", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "18d70e7c0580fda466307b0e34cfc5917fac693635cf4edc3589946e172fd180", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "cd175c2f337c140703b33bca5b5e02862d81e73bb3470d849013cc34b06cc65c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-084919-flight-compile-failure/launch-source.json b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source.json new file mode 100644 index 0000000..427ecfa --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "18561127-db85-4b95-a325-cfc874e111a5", + "captured_unix": 1789800557.9327288, + "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", + "local-admission", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "b3da6e6a035276c689aa9704f0cd917ba680a9efe0e172695062bcb0ca727045" +} diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/report.json b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/report.json new file mode 100644 index 0000000..47d973d --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/report.json @@ -0,0 +1,40 @@ +{ + "log": "docs/evidence/native-2026-09-19-084919-flight-compile-failure/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [ + "08:49:24.940 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,216\": Undefined function 'SCR_ChimeraCharacter.LockInVehicle'", + "08:49:24.940 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,260\": Undefined function 'SCR_ChimeraCharacter.LockInVehicle'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,324\": Error in parameters", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,333\": Can't find variable 'sortSlots'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,335\": Can't find variable 'sortSlots'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337\": Can't find variable 'sortSlots'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337\": Syntax error", + "08:49:25.086 SCRIPT (E): @\"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetCountEntitiesInTrigger.c,10\": Can't find class SCR_ScenarioFrameworkParam", + "08:49:25.101 SCRIPT (E): @\"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskLayer.c,11\": Can't find class SCR_ScenarioFrameworkParam", + "08:49:25.127 SCRIPT (E): @\"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,25\": Can't find class SCR_SpinningWidgetAnimation", + "08:49:25.127 SCRIPT (E): @\"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,27\": Can't find class SCR_SpinningWidgetAnimation", + "08:49:25.218 SCRIPT (E): @\"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,452\": Can't find class Tuple2", + "08:49:25.218 SCRIPT (E): @\"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,517\": Can't find class Tuple2", + "08:49:25.227 SCRIPT (E): Can't compile \"Game\" script module!" + ], + "engine_errors": [ + "08:49:24.940 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,216\": Undefined function 'SCR_ChimeraCharacter.LockInVehicle'", + "08:49:24.940 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,260\": Undefined function 'SCR_ChimeraCharacter.LockInVehicle'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,324\": Error in parameters", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,333\": Can't find variable 'sortSlots'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,335\": Can't find variable 'sortSlots'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337\": Can't find variable 'sortSlots'", + "08:49:25.030 SCRIPT (E): @\"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337\": Syntax error", + "08:49:25.086 SCRIPT (E): @\"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetCountEntitiesInTrigger.c,10\": Can't find class SCR_ScenarioFrameworkParam", + "08:49:25.101 SCRIPT (E): @\"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskLayer.c,11\": Can't find class SCR_ScenarioFrameworkParam", + "08:49:25.127 SCRIPT (E): @\"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,25\": Can't find class SCR_SpinningWidgetAnimation", + "08:49:25.127 SCRIPT (E): @\"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,27\": Can't find class SCR_SpinningWidgetAnimation", + "08:49:25.218 SCRIPT (E): @\"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,452\": Can't find class Tuple2", + "08:49:25.218 SCRIPT (E): @\"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,517\": Can't find class Tuple2", + "08:49:25.227 SCRIPT (E): Can't compile \"Game\" script module!", + "08:49:25.752 ENGINE (E): Unable to initialize a game/gamelib. Some workbench features will not work." + ], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/runner.json.txt b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/runner.json.txt new file mode 100644 index 0000000..8e3e572 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789800566.228564, + "console_sha256": "233d74a7f55f1c6d8c8c296b3c2d7dadd12499e72c108afd68c3189f0785fdc8", + "end_source_sha256": "b3da6e6a035276c689aa9704f0cd917ba680a9efe0e172695062bcb0ca727045", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "18561127-db85-4b95-a325-cfc874e111a5", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "b3da6e6a035276c689aa9704f0cd917ba680a9efe0e172695062bcb0ca727045", + "started_unix": 1789800557.9330502, + "result": "test-failed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-49-19", + "rounds_required": 1, + "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-084919-flight-compile-failure/script.log.txt b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/script.log.txt new file mode 100644 index 0000000..1fe1deb --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/script.log.txt @@ -0,0 +1,47 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-49-19\script.log started at 2026-09-19 08:49:22 (2026-09-19 06:49:22 UTC) + +08:49:22.519 SCRIPT : SCRIPT : Initializing scripts +08:49:22.519 SCRIPT : SCRIPT : ScriptProjectManager init +08:49:23.466 SCRIPT : SCRIPT : Compiling GameLib scripts +08:49:23.522 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 +08:49:23.522 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 +08:49:23.523 SCRIPT : SCRIPT : Compiling Game scripts +08:49:24.629 SCRIPT : Compiling Game scripts +08:49:24.629 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:49:24.629 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:49:24.772 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:24.894 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:49:24.928 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:49:24.940 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,216": Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:24.940 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c,260": Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:49:25.024 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,324": Error in parameters +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,333": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,335": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337": Can't find variable 'sortSlots' +08:49:25.030 SCRIPT (E): @"Scripts/Game/GameMode/Loadout/SCR_PlayerArsenalLoadout.c,337": Syntax error +08:49:25.055 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:49:25.086 SCRIPT (E): @"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetCountEntitiesInTrigger.c,10": Can't find class SCR_ScenarioFrameworkParam +08:49:25.101 SCRIPT (E): @"Scripts/Game/ScenarioFramework/Actions/ActionGetters/SCR_ScenarioFrameworkGetLastFinishedTaskLayer.c,11": Can't find class SCR_ScenarioFrameworkParam +08:49:25.115 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:49:25.115 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:49:25.116 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:49:25.127 SCRIPT (E): @"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,25": Can't find class SCR_SpinningWidgetAnimation +08:49:25.127 SCRIPT (E): @"Scripts/Game/UI/Components/SCR_SpinningWidgetComponent.c,27": Can't find class SCR_SpinningWidgetAnimation +08:49:25.157 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.157 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.159 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:49:25.159 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:49:25.185 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:49:25.216 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:49:25.218 SCRIPT (E): @"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,452": Can't find class Tuple2 +08:49:25.218 SCRIPT (E): @"Scripts/Game/UI/Menu/ContentBrowser/Common/SCR_ScenarioUICommon.c,517": Can't find class Tuple2 +08:49:25.227 SCRIPT (E): Can't compile "Game" script module! + +Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c(216): Undefined function 'SCR_ChimeraCharacter.LockInVehicle' +08:49:25.752 SCRIPT (W): Failed to load +08:49:25.752 SCRIPT (W): Initializing default GameLib's game class. diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-provenance.json b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-sha256.json b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-sha256.json new file mode 100644 index 0000000..b62b7f3 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084919-flight-compile-failure/source-sha256.json @@ -0,0 +1,167 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "4e92b4b70f3b00efddd6fca7a2527423a1da028500431da921bfddb14f4a5898", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "18d70e7c0580fda466307b0e34cfc5917fac693635cf4edc3589946e172fd180", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "cd175c2f337c140703b33bca5b5e02862d81e73bb3470d849013cc34b06cc65c", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-085048/console.log.txt b/docs/evidence/native-2026-09-19-085048/console.log.txt new file mode 100644 index 0000000..0f2a1a7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/console.log.txt @@ -0,0 +1,588 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-50-48\console.log started at 2026-09-19 08:50:48 (2026-09-19 06:50:48 UTC) + +08:50:48.965 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-50-48' to filesystem under name logs +08:50:48.965 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:50:48.965 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:50:48.967 PROFILING : Workbench Create Engine took: 11.356700 ms +08:50:50.004 INIT : INIT : Workbench Init Engine +08:50:50.004 ENGINE : Initializing engine, version 192142 +08:50:50.004 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 local-admission -noThrow -disableCrashReporter +08:50:50.013 ENGINE : Addon dirs: +08:50:50.013 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:50:50.013 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:50:50.013 ENGINE : dir: './addons' +08:50:50.013 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:50:50.013 ENGINE : Available addons: +08:50:50.013 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:50:50.013 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:50:50.013 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:50:50.013 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:50:50.013 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:50:50.013 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:50:50.013 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:50:50.013 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:50:50.141 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:50:50.144 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:50:50.144 ENGINE : CPU vendor : AuthenticAMD +08:50:50.144 ENGINE : CPU type : 2 +08:50:50.144 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:50:50.144 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:50:50.144 ENGINE : CPU count logical : 16 +08:50:50.144 ENGINE : CPU count physical : 8 +08:50:50.144 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:50:50.144 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:50:50.145 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:50:50.290 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:50:50.291 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:50:50.292 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-50-48/resourceDatabase.rdb) +08:50:50.463 RESOURCES : RESOURCES : ResourceDB: full scan +08:50:50.468 RESOURCES : RESOURCES : scanning... +08:50:50.468 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:50:50.473 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:50:50.636 RESOURCES : RESOURCES : scanning @"core" +08:50:50.641 RESOURCES : RESOURCES : scanning @"profile" +08:50:50.642 RESOURCES : RESOURCES : scanning @"logs" +08:50:50.643 RESOURCES : RESOURCES : processing meta-files... +08:50:50.721 RESOURCES : RESOURCES : processing files... +08:50:50.732 INIT : Workbench startup +08:50:50.732 INIT : Workbench Init Engine +08:50:50.732 RESOURCES : ResourceDB: full scan +08:50:50.732 RESOURCES : processing files... +08:50:50.732 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:50:50.732 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:50:50.732 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:50:50.732 RESOURCES : RESOURCES : processing folders... +08:50:50.739 RESOURCES : RESOURCES : creating GUID-item mapping... +08:50:50.756 RESOURCES : RESOURCES : building tree... +08:50:50.816 PROFILING : ResourceDB: full scan took: 353.696500 ms +08:50:50.817 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:50:50.819 RESOURCES : ResourceDB: written 6336/6336 bytes +08:50:50.819 RESOURCES : ResourceDB: cache successfully saved +08:50:50.820 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:50:50.822 RESOURCES : ResourceDB: written 206/206 bytes +08:50:50.822 RESOURCES : ResourceDB: cache successfully saved +08:50:50.822 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-50-48/resourceDatabase.rdb) +08:50:50.824 RESOURCES : ResourceDB: written 162/162 bytes +08:50:50.824 RESOURCES : ResourceDB: cache successfully saved +08:50:50.824 ENGINE : GameProject load +08:50:50.824 ENGINE : Loaded addons: +08:50:50.824 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:50:50.824 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:50:50.824 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:50:50.827 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:50:50.828 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:50:50.828 ENGINE : Engine user settings config loaded +08:50:50.828 PROFILING : Settings changed took: 0.001700 ms +08:50:50.942 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:50:50.944 RENDER : Basic screen setup: +08:50:50.944 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:50:50.944 RENDER : MSAA : none +08:50:50.959 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:50:50.959 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:50:50.959 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:50:50.959 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:50:50.959 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:50:50.959 RENDER : AMD AGS correctly initialized +08:50:50.959 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 +08:50:50.959 RENDER : Detected output devices: +08:50:50.959 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:50:50.959 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:50:50.959 RENDER : Concurrent frames limit 2 +08:50:51.032 RENDER : DX12 device successfully created by AMD AGS library +08:50:51.032 RENDER : * user markers not supported in this version AMD SW +08:50:51.032 RENDER : Graphics device features +08:50:51.032 RENDER : Needed: +08:50:51.032 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:50:51.032 RENDER : Optional: +08:50:51.032 RENDER : * Allow tearing (VSYNC) : 1 +08:50:51.032 RENDER : * 16 bits : 1 +08:50:51.032 RENDER : * Resource heap tier : 3 +08:50:51.032 RENDER : * Persistent heaps (DRED) : 1 +08:50:51.032 RENDER : * DRED 1.2 is supported by compiler +08:50:51.054 RENDER : Main RT format setup. +08:50:51.054 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:50:51.054 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:50:51.055 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:50:51.086 PROFILING : Settings changed took: 0.013900 ms +08:50:51.600 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:50:51.600 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:50:51.600 AUDIO : Audio client: +08:50:51.600 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:50:51.603 RENDER : RENDER : Reload shaders +08:50:51.603 RENDER : Enfusion shader version 13 +08:50:51.603 INIT : INIT : ShaderListReload +08:50:51.603 PROFILING : ShaderListReload took: 0.000500 ms +08:50:51.746 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:50:51.746 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:50:51.747 AUDIO : Audio client: +08:50:51.747 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:50:52.030 RENDER : Loaded 3752 newer shader binaries +08:50:52.031 PROFILING : Reload shaders took: 427.805500 ms +08:50:52.031 ENGINE : Initializing inputs. +08:50:52.050 NETWORK : Initializing networking. +08:50:52.050 NETWORK : Using new GameRplScheduler. +08:50:52.051 SCRIPT : SCRIPT : Initializing scripts +08:50:52.051 SCRIPT : SCRIPT : ScriptProjectManager init +08:50:52.882 PROFILING : ScriptProjectManager init took: 831.473100 ms +08:50:52.917 PROFILING : Initializing scripts took: 866.123200 ms +08:50:52.936 ENGINE : Enfusion engine successfully created. +08:50:52.936 PROFILING : Workbench Init Engine took: 2932.249900 ms +08:50:52.936 INIT : INIT : Workbench Create Game +08:50:52.947 GUI : Using default language (en_us) +08:50:52.947 GUI : Loading 'en_us' localization file. +08:50:52.947 INIT : INIT : Loading StringTable +08:50:52.970 PROFILING : Loading StringTable took: 22.846400 ms +08:50:52.970 SCRIPT : SCRIPT : Compiling GameLib scripts +08:50:53.027 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 +08:50:53.027 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 +08:50:53.028 PROFILING : Compiling GameLib scripts took: 57.754900 ms +08:50:53.028 SCRIPT : SCRIPT : Compiling Game scripts +08:50:54.144 INIT : Workbench Create Game +08:50:54.144 SCRIPT : Compiling Game scripts +08:50:54.144 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:50:54.144 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:50:54.284 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.400 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:50:54.433 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:50:54.559 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:50:54.617 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:50:54.617 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:50:54.619 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:50:54.658 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.658 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.659 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:50:54.659 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:50:54.683 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.714 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:50:54.966 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 +08:50:54.972 SCRIPT : Module: Game; loaded 5734x files; 11235x classes; used 32899K 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: 2ad5e6be +08:50:55.009 PROFILING : Compiling Game scripts took: 1981.087400 ms +08:50:55.014 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:50:55.051 ENGINE : Game successfully created. +08:50:55.052 PROFILING : Workbench Create Game took: 2115.484300 ms +08:50:55.059 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +08:50:55.891 INIT : INIT : Workbench Reload Game +08:50:55.893 ENGINE : Game destroyed. +08:50:55.900 GUI : Using default language (en_us) +08:50:55.900 GUI : Loading 'en_us' localization file. +08:50:55.900 INIT : INIT : Loading StringTable +08:50:55.909 PROFILING : Loading StringTable took: 9.155000 ms +08:50:55.909 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:50:55.916 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:50:55.916 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:50:55.916 ENGINE : Game successfully created. +08:50:55.916 ENGINE : Game successfully initialized. +08:50:55.916 PROFILING : Workbench Reload Game took: 24.997800 ms +08:50:56.609 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:50:57.627 PROFILING : Entities load took: 1017.666300 ms +08:50:57.637 WORLD : WORLD : CreateEntities +08:50:57.642 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:50:57.642 PROFILING : NotifyBeforeEntitiesCreated took: 0.002800 ms +08:50:57.642 WORLD : WORLD : Wait for preloading data +08:50:57.642 PROFILING : Wait for preloading data took: 0.002800 ms +08:50:57.748 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:50:57.748 PROFILING : PROFILING : Terrain load +08:50:59.318 PROFILING : Terrain load took: 1570.013600 ms +08:51:03.321 WORLD : CreateEntities +08:51:03.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" +08:51:03.322 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:51:03.322 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:51:13.044 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:51:13.044 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005400 ms +08:51:13.486 WORLD : WORLD : NotifyEntitiesInitialized +08:51:13.486 TERRAIN : TERRAIN : Initializing road networks... +08:51:13.488 PROFILING : Initializing road networks... took: 2.280200 ms +08:51:13.488 PROFILING : NotifyEntitiesInitialized took: 2.713100 ms +08:51:13.489 PROFILING : CreateEntities took: 15850.791600 ms +08:51:13.661 PROFILING : * WorldEditor: LoadWorld: 17057.885300 ms +08:51:15.165 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:51:15.165 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:51:15.166 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:51:15.166 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:51:15.254 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:51:15.281 BACKEND : Attempting online Game Config instead. +08:51:18.539 INIT : INIT : Workbench Reload Game +08:51:18.543 ENGINE : Game destroyed. +08:51:18.551 GUI : Using default language (en_us) +08:51:18.551 GUI : Loading 'en_us' localization file. +08:51:18.552 INIT : INIT : Loading StringTable +08:51:18.574 PROFILING : Loading StringTable took: 22.185200 ms +08:51:18.574 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:51:18.583 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:51:18.584 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:51:18.584 ENGINE : Game successfully created. +08:51:18.584 ENGINE : Game successfully initialized. +08:51:18.584 PROFILING : Workbench Reload Game took: 44.834700 ms +08:51:18.587 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:51:18.651 PLATFORM : Save data from container 'settings' have been loaded +08:51:18.740 PLATFORM : Save data from container 'sessions' have been loaded +08:51:18.742 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:51:18.742 ENGINE : Game user settings config loaded +08:51:18.837 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:51:18.846 WORLD : WORLD : Game::LoadEntities +08:51:18.846 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:51:18.847 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:51:18.847 WORLD : WORLD : CreateEntities +08:51:18.847 WORLD : WORLD : CreateEntities +08:51:18.847 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:51:18.851 RESOURCES : Loaded mission headers from 7 addon(s)! +08:51:18.851 PROFILING : NotifyBeforeEntitiesCreated took: 4.167400 ms +08:51:18.851 WORLD : WORLD : Wait for preloading data +08:51:18.851 PROFILING : Wait for preloading data took: 0.000600 ms +08:51:23.340 WORLD : Game::LoadEntities +08:51:23.340 WORLD : CreateEntities +08:51:23.340 WORLD : CreateEntities +08:51:23.340 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" +08:51:23.340 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:51:23.340 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:51:24.771 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:51:24.771 ENTITY : CreateComponent 'Hierarchy' +08:51:24.771 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>') +08:51:24.771 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:51:24.771 ENTITY : CreateComponent 'Hierarchy' +08:51:24.771 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>') +08:51:24.771 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:51:24.771 ENTITY : CreateComponent 'Hierarchy' +08:51:24.771 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>') +08:51:24.776 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:51:24.776 ENTITY : CreateComponent 'Hierarchy' +08:51:24.776 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>') +08:51:24.776 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:51:24.776 ENTITY : CreateComponent 'Hierarchy' +08:51:24.776 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>') +08:51:24.776 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:51:24.776 ENTITY : CreateComponent 'Hierarchy' +08:51:24.776 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>') +08:51:24.781 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:51:24.781 ENTITY : CreateComponent 'Hierarchy' +08:51:24.781 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>') +08:51:24.781 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:51:24.781 ENTITY : CreateComponent 'Hierarchy' +08:51:24.781 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>') +08:51:24.781 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:51:24.781 ENTITY : CreateComponent 'Hierarchy' +08:51:24.781 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>') +08:51:29.723 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:51:29.723 PROFILING : NotifyBeforeEntitiesInitialized took: 0.055500 ms +08:51:31.719 WORLD : InitEntities 'world' +08:51:31.719 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:51:31.719 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:51:31.746 WORLD : InitEntities 'world' +08:51:31.746 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:51:31.746 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:51:31.747 WORLD : WORLD : NotifyEntitiesInitialized +08:51:31.747 TERRAIN : TERRAIN : Initializing road networks... +08:51:31.750 PROFILING : Initializing road networks... took: 2.929200 ms +08:51:31.750 DEFAULT : DEFAULT : WorldVolumesCollection +08:51:31.814 PROFILING : WorldVolumesCollection took: 64.221200 ms +08:51:31.814 INIT : INIT : SoundWorldInit +08:51:31.831 PROFILING : SoundWorldInit took: 16.539400 ms +08:51:31.831 PROFILING : NotifyEntitiesInitialized took: 83.939600 ms +08:51:31.831 PROFILING : CreateEntities took: 12984.140900 ms +08:51:31.831 PROFILING : CreateEntities took: 12984.356600 ms +08:51:31.832 WORLD : WORLD : Wait for preloading data around camera +08:51:31.832 PROFILING : Wait for preloading data around camera took: 0.001200 ms +08:51:31.832 WORLD : WORLD : EOnActivate +08:51:31.867 PROFILING : EOnActivate took: 35.146900 ms +08:51:31.867 PROFILING : Game::LoadEntities took: 13021.533800 ms +08:51:32.159 DEFAULT : Entered offline game state. +08:51:32.262 NETWORK : Player connected: connectionID=2147483646 +08:51:32.263 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:51:32.263 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:51:32.267 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:51:32.268 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:51:32.268 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:51:32.268 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! +08:51:32.268 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! +08:51:32.270 SCRIPT (W): Can't open config file "" +08:51:32.276 WORLD : InitEntities 'world' +08:51:32.277 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:51:32.277 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:51:32.277 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:51:32.277 SCRIPT (W): Slot_Chat Has no Content! +08:51:32.277 SCRIPT (W): Slot_VON Has no Content! +08:51:32.277 SCRIPT (W): Slot_AvailableActions Has no Content! +08:51:32.277 SCRIPT (W): Slot_Vehicle Has no Content! +08:51:32.278 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:32.278 SCRIPT (W): Slot_Notifications Has no Content! +08:51:32.278 SCRIPT (W): Slot_Hints Has no Content! +08:51:32.288 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:51:32.288 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:51:32.288 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:51:32.289 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. +08:51:32.289 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. +08:51:32.292 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:51:32.293 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:51:32.293 NETWORK : Players connecting: 0 +08:51:32.293 NETWORK : Players connected: 1 / 1 +08:51:32.321 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/autosaves +08:51:32.322 PROFILING : Workbench startup took: 43424.685600 ms +08:51:32.346 WORLD : Frame start +08:51:32.346 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:51:32.358 WORLD : UpdateEntities +08:51:32.359 WORLD : Frame +08:51:32.359 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:51:32.522 WORLD : UpdateEntities +08:51:32.522 WORLD : PostFrame +08:51:32.523 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:51:32.523 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:51:32.562 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:51:32.563 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:51:32.563 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:51:32.563 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:51:32.702 RENDER : RENDER : ObjectsHeightMap::Build +08:51:32.703 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:51:32.878 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 175.150900 ms +08:51:32.885 PROFILING : ObjectsHeightMap::Build took: 182.417400 ms +08:51:34.052 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:51:34.072 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:51:34.073 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:51:34.101 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:51:34.104 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:51:34.156 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:51:34.156 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:51:34.162 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:51:34.208 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:51:34.209 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:51:34.211 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:51:34.211 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:51:34.214 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:51:34.215 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:51:34.215 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:51:34.216 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:51:34.216 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:51:34.217 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:51:34.217 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:51:34.217 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:51:34.217 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:51:34.217 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 +08:51:34.217 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:51:34.218 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:51:34.218 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 +08:51:34.218 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:51:34.218 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:51:34.218 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 +08:51:34.218 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.218 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.981 WORLD : UpdateEntities +08:51:34.981 WORLD : AfterPostSimulate +08:51:34.982 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:51:35.057 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.058 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.058 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.058 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.313 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5285,7499.7> up=0.995678 +08:51:35.313 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +08:51:35.313 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:35.313 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6132,7501.97> +08:51:35.313 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3132,7501.97> terrainY=63.3165 tireTerrainGap=-0.00324249 +08:51:35.314 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6132,7501.97> radius=0.3 bottom=<7012.07,63.3132,7501.97> fraction=0.440336 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00312424 +08:51:35.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6008,7497.71> +08:51:35.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1508,7497.71> terrainY=64.1555 tireTerrainGap=-0.00479126 +08:51:35.314 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6008,7497.71> radius=0.45 bottom=<7009.88,64.1508,7497.71> fraction=0.432978 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00474548 +08:51:35.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2628,7497.74> +08:51:35.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8128,7497.74> terrainY=63.8179 tireTerrainGap=-0.00508499 +08:51:35.315 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2628,7497.74> radius=0.45 bottom=<7014.42,63.8128,7497.74> fraction=0.431269 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00511932 +08:51:35.315 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:35.567 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:35.567 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:35.568 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.568 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:36.068 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.068 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.068 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.387 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.71> up=0.994322 +08:51:36.388 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:51:36.388 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:36.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.62,7501.98> +08:51:36.388 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.32,7501.98> terrainY=63.3146 tireTerrainGap=0.00540543 +08:51:36.388 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.62,7501.98> radius=0.3 bottom=<7012.07,63.32,7501.98> fraction=0.479552 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00550079 +08:51:36.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6026,7497.71> +08:51:36.389 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1526,7497.71> terrainY=64.1491 tireTerrainGap=0.00352478 +08:51:36.389 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 +08:51:36.389 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +08:51:36.389 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.000240326 +08:51:36.389 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000267029 +08:51:36.389 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.887 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:51:36.887 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.888 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.888 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.888 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:37.394 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5313,7499.74> up=0.994218 +08:51:37.394 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +08:51:37.394 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:37.395 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +08:51:37.395 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3115 tireTerrainGap=0.00207901 +08:51:37.395 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6136,7502.01> radius=0.3 bottom=<7012.08,63.3136,7502.01> fraction=0.463958 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00207138 +08:51:37.395 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +08:51:37.395 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1428 tireTerrainGap=0.00185394 +08:51:37.396 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.72> radius=0.45 bottom=<7009.97,64.1446,7497.72> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +08:51:37.396 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.82> +08:51:37.396 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.82> terrainY=63.8128 tireTerrainGap=-0.00257492 +08:51:37.396 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.82> radius=0.45 bottom=<7014.51,63.8102,7497.82> fraction=0.442778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00259018 +08:51:37.396 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.899 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:37.899 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:37.899 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:37.900 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:38.404 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:51:38.404 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:51:38.404 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:38.404 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:51:38.404 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170135 +08:51:38.405 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:51:38.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:51:38.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00256348 +08:51:38.405 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 +08:51:38.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:51:38.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185776 +08:51:38.406 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:51:38.406 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:38.406 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.406 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:38.406 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:38.407 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:38.915 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.915 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.915 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.916 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:39.417 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:51:39.418 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:51:39.418 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:39.418 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:51:39.418 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170135 +08:51:39.418 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:51:39.418 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:51:39.419 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00256348 +08:51:39.419 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 +08:51:39.419 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:51:39.419 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185776 +08:51:39.419 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:51:39.419 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:39.420 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:39.421 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:51:39.421 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:51:39.422 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:51:39.422 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:51:39.565 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:51:39.606 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.853 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.853 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:51:39.854 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:51:39.854 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:51:39.855 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:51:39.855 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:51:39.856 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.856 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.857 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:51:39.857 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:51:39.857 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:51:39.858 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:51:39.858 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:51:39.858 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:51:39.859 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:51:40.349 SCRIPT : ERR SMOKE PASS: local admission actual standalone session has one native local controller and successor spawn logic +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission real native admission already created the local controlled prisoner and selected helper +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission existing prisoner has one spent life and no pending spawn metadata +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission disposable helper accepts actual sole native controller using existing round key +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission late opaque identity input and null input retain the selected key +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission unrelated disconnect argument does not close helper +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission matching disconnect argument latches disposable helper closed +08:51:40.351 SCRIPT : ERR SMOKE PASS: local admission stopped disposable helper cannot reopen with the genuine controller +08:51:40.351 SCRIPT : ERR SMOKE PASS: local admission invalid controller argument before selection fails closed without selecting another life +08:51:40.351 SCRIPT : 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 +08:51:40.352 SCRIPT : ERR LOCAL ADMISSION REPLAY: invoking existing callback twice for already admitted real controller; this does not represent new native authentication/audits +08:51:40.352 SCRIPT : ERR SMOKE PASS: local admission replayed callbacks preserve exact roster object, used life, key, actor and no roster-change event +08:51:41.866 SCRIPT : ERR SMOKE PASS: local admission native update interval after replay creates no replacement actor, life or pending request +08:51:41.866 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:51:41.867 SCRIPT : ERR SMOKE PASS: base local admission fixture received its production fail-closed transition +08:51:41.963 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:51:41.965 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:51:41.965 SCRIPT (W): Slot_Chat Has no Content! +08:51:41.965 SCRIPT (W): Slot_VON Has no Content! +08:51:41.965 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:41.966 SCRIPT (W): Slot_Notifications Has no Content! +08:51:41.979 SCRIPT : ERR SMOKE PASS: local admission live helper rejects invalid controller argument through production context guard +08:51:41.979 SCRIPT : ERR SMOKE PASS: local admission production failure closes admission and ends round while preserving original used life and controlled actor +08:51:41.980 SCRIPT : ERR SMOKE COMPLETE: native local admission callback replay and fail-closed method injection; not multiplayer evidence +08:51:44.020 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:51:44.020 SCRIPT : -- Stack trace -- +08:51:44.020 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:51:44.021 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:51:44.021 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:51:44.021 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:51:44.021 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:51:44.021 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:51:44.021 SCRIPT : ----------------- +08:51:44.021 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:51:44.022 SCRIPT : -- Stack trace -- +08:51:44.022 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:51:44.022 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:51:44.022 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:51:44.022 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:51:44.022 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:51:44.022 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:51:44.023 SCRIPT : ----------------- +08:51:44.025 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:51:44.025 SCRIPT (W): Slot_Chat Has no Content! +08:51:44.025 SCRIPT (W): Slot_VON Has no Content! +08:51:44.025 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:44.025 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-085048/error.log.txt b/docs/evidence/native-2026-09-19-085048/error.log.txt new file mode 100644 index 0000000..acf0f34 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/error.log.txt @@ -0,0 +1,118 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-50-48\error.log started at 2026-09-19 08:50:50 (2026-09-19 06:50:50 UTC) + +08:50:50.732 INIT : Workbench startup +08:50:50.732 INIT : Workbench Init Engine +08:50:50.732 RESOURCES : ResourceDB: full scan +08:50:50.732 RESOURCES : processing files... +08:50:50.732 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:50:50.732 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:50:50.732 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:50:54.144 INIT : Workbench Create Game +08:50:54.144 SCRIPT : Compiling Game scripts +08:50:54.144 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:50:54.144 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:50:54.284 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.400 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:50:54.433 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:50:54.559 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:50:54.617 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:50:54.617 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:50:54.619 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:50:54.658 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.658 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.659 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:50:54.659 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:50:54.683 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.714 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:51:03.321 WORLD : CreateEntities +08:51:03.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" +08:51:03.322 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:51:03.322 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:51:18.587 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:51:23.340 WORLD : Game::LoadEntities +08:51:23.340 WORLD : CreateEntities +08:51:23.340 WORLD : CreateEntities +08:51:23.340 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" +08:51:23.340 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:51:23.340 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:51:24.771 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:51:24.771 ENTITY : CreateComponent 'Hierarchy' +08:51:24.771 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>') +08:51:24.771 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:51:24.771 ENTITY : CreateComponent 'Hierarchy' +08:51:24.771 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>') +08:51:24.771 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:51:24.771 ENTITY : CreateComponent 'Hierarchy' +08:51:24.771 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>') +08:51:24.776 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:51:24.776 ENTITY : CreateComponent 'Hierarchy' +08:51:24.776 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>') +08:51:24.776 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:51:24.776 ENTITY : CreateComponent 'Hierarchy' +08:51:24.776 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>') +08:51:24.776 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:51:24.776 ENTITY : CreateComponent 'Hierarchy' +08:51:24.776 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>') +08:51:24.781 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:51:24.781 ENTITY : CreateComponent 'Hierarchy' +08:51:24.781 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>') +08:51:24.781 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:51:24.781 ENTITY : CreateComponent 'Hierarchy' +08:51:24.781 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>') +08:51:24.781 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:51:24.781 ENTITY : CreateComponent 'Hierarchy' +08:51:24.781 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>') +08:51:31.719 WORLD : InitEntities 'world' +08:51:31.719 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:51:31.719 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:51:32.267 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:51:32.268 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:51:32.268 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:51:32.268 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! +08:51:32.268 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! +08:51:32.270 SCRIPT (W): Can't open config file "" +08:51:32.276 WORLD : InitEntities 'world' +08:51:32.277 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:51:32.277 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:51:32.277 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:51:32.277 SCRIPT (W): Slot_Chat Has no Content! +08:51:32.277 SCRIPT (W): Slot_VON Has no Content! +08:51:32.277 SCRIPT (W): Slot_AvailableActions Has no Content! +08:51:32.277 SCRIPT (W): Slot_Vehicle Has no Content! +08:51:32.278 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:32.278 SCRIPT (W): Slot_Notifications Has no Content! +08:51:32.278 SCRIPT (W): Slot_Hints Has no Content! +08:51:32.288 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:51:32.288 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:51:32.288 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:51:32.289 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. +08:51:32.289 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. +08:51:32.293 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:51:32.522 WORLD : UpdateEntities +08:51:32.522 WORLD : PostFrame +08:51:32.523 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:51:32.523 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:51:32.562 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:51:32.563 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:51:32.563 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:51:32.563 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:51:34.981 WORLD : UpdateEntities +08:51:34.981 WORLD : AfterPostSimulate +08:51:34.982 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:51:41.965 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:51:41.965 SCRIPT (W): Slot_Chat Has no Content! +08:51:41.965 SCRIPT (W): Slot_VON Has no Content! +08:51:41.965 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:41.966 SCRIPT (W): Slot_Notifications Has no Content! +08:51:44.020 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:51:44.021 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:51:44.025 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:51:44.025 SCRIPT (W): Slot_Chat Has no Content! +08:51:44.025 SCRIPT (W): Slot_VON Has no Content! +08:51:44.025 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:44.025 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-085048/headless-launch.log.txt b/docs/evidence/native-2026-09-19-085048/headless-launch.log.txt new file mode 100644 index 0000000..da0d801 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/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: 115 +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55555939acc0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55555939acc0 +[Gamescope WSI] Destroyed swapchain: 0x55555939acc0 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55555939acc0 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55555939acc0 +[Gamescope WSI] Destroyed swapchain: 0x55555939acc0 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55555939acc0 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-085048/launch-source-sha256.json b/docs/evidence/native-2026-09-19-085048/launch-source-sha256.json new file mode 100644 index 0000000..3c04060 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/launch-source-sha256.json @@ -0,0 +1,167 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "0fdc087f57afbbe785cdea12810d9c63060d88a778dc90c470733c13e86da94f", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "18d70e7c0580fda466307b0e34cfc5917fac693635cf4edc3589946e172fd180", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "f524f33d460bb72602f60b473f0c0d59f8a60f3e1e20d70d60d664fb85373837", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-085048/launch-source.json b/docs/evidence/native-2026-09-19-085048/launch-source.json new file mode 100644 index 0000000..ca00276 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "d9671955-0e29-42f3-8ac8-464325c0de3b", + "captured_unix": 1789800647.3123915, + "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", + "local-admission", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "f25524bdbdb0184c9ec86d96c2880f043e7d75b00503aec235f0dc257f5c993b" +} diff --git a/docs/evidence/native-2026-09-19-085048/report.json b/docs/evidence/native-2026-09-19-085048/report.json new file mode 100644 index 0000000..6adbbf7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-085048/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 54, + "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-085048/runner.json.txt b/docs/evidence/native-2026-09-19-085048/runner.json.txt new file mode 100644 index 0000000..22db7aa --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789800709.6305187, + "console_sha256": "35a6261273148cbe9ff937dc394fac2c858d846f434c0d5cde1b046b3f3ca1e0", + "end_source_sha256": "f25524bdbdb0184c9ec86d96c2880f043e7d75b00503aec235f0dc257f5c993b", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "d9671955-0e29-42f3-8ac8-464325c0de3b", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "f25524bdbdb0184c9ec86d96c2880f043e7d75b00503aec235f0dc257f5c993b", + "started_unix": 1789800647.3124652, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-50-48", + "rounds_required": 1, + "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-085048/script.log.txt b/docs/evidence/native-2026-09-19-085048/script.log.txt new file mode 100644 index 0000000..a7c43bc --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/script.log.txt @@ -0,0 +1,297 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-50-48\script.log started at 2026-09-19 08:50:52 (2026-09-19 06:50:52 UTC) + +08:50:52.051 SCRIPT : SCRIPT : Initializing scripts +08:50:52.051 SCRIPT : SCRIPT : ScriptProjectManager init +08:50:52.970 SCRIPT : SCRIPT : Compiling GameLib scripts +08:50:53.027 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 +08:50:53.027 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 +08:50:53.028 SCRIPT : SCRIPT : Compiling Game scripts +08:50:54.144 SCRIPT : Compiling Game scripts +08:50:54.144 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:50:54.144 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:50:54.284 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.400 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:50:54.433 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:50:54.529 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:50:54.559 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:50:54.617 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:50:54.617 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:50:54.619 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:50:54.658 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.658 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.659 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:50:54.659 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:50:54.683 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:50:54.714 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:50:54.966 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 +08:50:54.972 SCRIPT : Module: Game; loaded 5734x files; 11235x classes; used 32899K 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: 2ad5e6be +08:50:55.916 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:50:55.916 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:51:15.254 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:51:18.583 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:51:18.584 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:51:31.719 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:51:31.746 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:51:32.268 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! +08:51:32.268 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! +08:51:32.270 SCRIPT (W): Can't open config file "" +08:51:32.277 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:51:32.277 SCRIPT (W): Slot_Chat Has no Content! +08:51:32.277 SCRIPT (W): Slot_VON Has no Content! +08:51:32.277 SCRIPT (W): Slot_AvailableActions Has no Content! +08:51:32.277 SCRIPT (W): Slot_Vehicle Has no Content! +08:51:32.278 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:32.278 SCRIPT (W): Slot_Notifications Has no Content! +08:51:32.278 SCRIPT (W): Slot_Hints Has no Content! +08:51:32.289 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. +08:51:32.289 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. +08:51:32.293 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:51:32.346 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:51:32.359 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:51:32.523 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:51:34.052 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:51:34.072 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:51:34.073 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:51:34.101 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:51:34.104 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:51:34.156 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:51:34.156 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:51:34.162 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:51:34.208 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:51:34.209 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:51:34.211 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:51:34.211 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:51:34.214 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:51:34.215 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:51:34.215 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:51:34.216 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:51:34.216 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:51:34.217 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:51:34.217 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:51:34.217 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:51:34.217 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:51:34.217 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 +08:51:34.217 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:51:34.218 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:51:34.218 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 +08:51:34.218 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:51:34.218 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:51:34.218 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 +08:51:34.218 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.218 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:34.219 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:51:35.057 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.058 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.058 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.058 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.313 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5285,7499.7> up=0.995678 +08:51:35.313 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +08:51:35.313 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:35.313 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6132,7501.97> +08:51:35.313 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3132,7501.97> terrainY=63.3165 tireTerrainGap=-0.00324249 +08:51:35.314 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6132,7501.97> radius=0.3 bottom=<7012.07,63.3132,7501.97> fraction=0.440336 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00312424 +08:51:35.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6008,7497.71> +08:51:35.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1508,7497.71> terrainY=64.1555 tireTerrainGap=-0.00479126 +08:51:35.314 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6008,7497.71> radius=0.45 bottom=<7009.88,64.1508,7497.71> fraction=0.432978 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00474548 +08:51:35.314 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2628,7497.74> +08:51:35.314 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8128,7497.74> terrainY=63.8179 tireTerrainGap=-0.00508499 +08:51:35.315 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2628,7497.74> radius=0.45 bottom=<7014.42,63.8128,7497.74> fraction=0.431269 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00511932 +08:51:35.315 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:35.567 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:35.567 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:35.568 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:35.568 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:51:36.068 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.068 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.068 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.387 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5339,7499.71> up=0.994322 +08:51:36.388 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:51:36.388 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:36.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.62,7501.98> +08:51:36.388 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.32,7501.98> terrainY=63.3146 tireTerrainGap=0.00540543 +08:51:36.388 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.62,7501.98> radius=0.3 bottom=<7012.07,63.32,7501.98> fraction=0.479552 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00550079 +08:51:36.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6026,7497.71> +08:51:36.389 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1526,7497.71> terrainY=64.1491 tireTerrainGap=0.00352478 +08:51:36.389 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 +08:51:36.389 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2653,7497.78> +08:51:36.389 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8153,7497.78> terrainY=63.8155 tireTerrainGap=-0.000240326 +08:51:36.389 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2653,7497.78> radius=0.45 bottom=<7014.47,63.8153,7497.78> fraction=0.453333 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000267029 +08:51:36.389 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:51:36.390 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.887 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:51:36.887 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.888 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.888 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:36.888 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:51:37.394 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5313,7499.74> up=0.994218 +08:51:37.394 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +08:51:37.394 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:37.395 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +08:51:37.395 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3115 tireTerrainGap=0.00207901 +08:51:37.395 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6136,7502.01> radius=0.3 bottom=<7012.08,63.3136,7502.01> fraction=0.463958 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00207138 +08:51:37.395 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5946,7497.72> +08:51:37.395 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1446,7497.72> terrainY=64.1428 tireTerrainGap=0.00185394 +08:51:37.396 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5946,7497.72> radius=0.45 bottom=<7009.97,64.1446,7497.72> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +08:51:37.396 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.82> +08:51:37.396 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.82> terrainY=63.8128 tireTerrainGap=-0.00257492 +08:51:37.396 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.82> radius=0.45 bottom=<7014.51,63.8102,7497.82> fraction=0.442778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00259018 +08:51:37.396 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.397 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:37.899 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:37.899 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:37.899 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:37.900 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:51:38.404 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:51:38.404 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:51:38.404 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:38.404 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:51:38.404 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170135 +08:51:38.405 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:51:38.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:51:38.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00256348 +08:51:38.405 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 +08:51:38.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:51:38.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185776 +08:51:38.406 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:51:38.406 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:38.406 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.406 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:38.406 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:38.407 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:51:38.915 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.915 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.915 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:38.916 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:39.417 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:51:39.418 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:51:39.418 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:51:39.418 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:51:39.418 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170135 +08:51:39.418 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:51:39.418 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:51:39.419 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00256348 +08:51:39.419 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 +08:51:39.419 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:51:39.419 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185776 +08:51:39.419 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:51:39.419 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:51:39.420 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:51:39.421 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:51:39.421 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:51:39.422 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:51:39.422 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:51:39.565 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:51:39.606 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:51:39.852 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.853 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.853 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:51:39.853 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:51:39.854 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:51:39.854 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:51:39.854 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:51:39.855 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:51:39.855 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:51:39.855 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:51:39.856 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.856 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:51:39.856 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:51:39.857 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:51:39.857 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.857 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:51:39.857 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:51:39.858 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:51:39.858 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:51:39.858 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:51:39.858 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:51:39.859 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:51:39.859 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:51:40.349 SCRIPT : ERR SMOKE PASS: local admission actual standalone session has one native local controller and successor spawn logic +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission real native admission already created the local controlled prisoner and selected helper +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission existing prisoner has one spent life and no pending spawn metadata +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission disposable helper accepts actual sole native controller using existing round key +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission late opaque identity input and null input retain the selected key +08:51:40.350 SCRIPT : ERR SMOKE PASS: local admission unrelated disconnect argument does not close helper +08:51:40.351 SCRIPT : ERR SMOKE PASS: local admission matching disconnect argument latches disposable helper closed +08:51:40.351 SCRIPT : ERR SMOKE PASS: local admission stopped disposable helper cannot reopen with the genuine controller +08:51:40.351 SCRIPT : ERR SMOKE PASS: local admission invalid controller argument before selection fails closed without selecting another life +08:51:40.351 SCRIPT : 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 +08:51:40.352 SCRIPT : ERR LOCAL ADMISSION REPLAY: invoking existing callback twice for already admitted real controller; this does not represent new native authentication/audits +08:51:40.352 SCRIPT : ERR SMOKE PASS: local admission replayed callbacks preserve exact roster object, used life, key, actor and no roster-change event +08:51:41.866 SCRIPT : ERR SMOKE PASS: local admission native update interval after replay creates no replacement actor, life or pending request +08:51:41.866 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:51:41.867 SCRIPT : ERR SMOKE PASS: base local admission fixture received its production fail-closed transition +08:51:41.963 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:51:41.965 SCRIPT (W): Slot_Chat Has no Content! +08:51:41.965 SCRIPT (W): Slot_VON Has no Content! +08:51:41.965 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:41.966 SCRIPT (W): Slot_Notifications Has no Content! +08:51:41.979 SCRIPT : ERR SMOKE PASS: local admission live helper rejects invalid controller argument through production context guard +08:51:41.979 SCRIPT : ERR SMOKE PASS: local admission production failure closes admission and ends round while preserving original used life and controlled actor +08:51:41.980 SCRIPT : ERR SMOKE COMPLETE: native local admission callback replay and fail-closed method injection; not multiplayer evidence +08:51:44.020 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:51:44.020 SCRIPT : -- Stack trace -- +08:51:44.020 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:51:44.021 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:51:44.021 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:51:44.021 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:51:44.021 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:51:44.021 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:51:44.021 SCRIPT : ----------------- +08:51:44.021 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:51:44.022 SCRIPT : -- Stack trace -- +08:51:44.022 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:51:44.022 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:51:44.022 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:51:44.022 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:51:44.022 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:51:44.022 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:51:44.023 SCRIPT : ----------------- +08:51:44.025 SCRIPT (W): Slot_Chat Has no Content! +08:51:44.025 SCRIPT (W): Slot_VON Has no Content! +08:51:44.025 SCRIPT (W): Slot_GameVersion Has no Content! +08:51:44.025 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-085048/source-provenance.json b/docs/evidence/native-2026-09-19-085048/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-085048/source-sha256.json b/docs/evidence/native-2026-09-19-085048/source-sha256.json new file mode 100644 index 0000000..3c04060 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085048/source-sha256.json @@ -0,0 +1,167 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "0fdc087f57afbbe785cdea12810d9c63060d88a778dc90c470733c13e86da94f", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "18d70e7c0580fda466307b0e34cfc5917fac693635cf4edc3589946e172fd180", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "f524f33d460bb72602f60b473f0c0d59f8a60f3e1e20d70d60d664fb85373837", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-085302-map-probe-compile-failure/console.log.txt b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/console.log.txt new file mode 100644 index 0000000..0d59772 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/console.log.txt @@ -0,0 +1,188 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-53-02\console.log started at 2026-09-19 08:53:02 (2026-09-19 06:53:02 UTC) + +08:53:02.740 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-53-02' to filesystem under name logs +08:53:02.740 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:53:02.740 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:53:02.742 PROFILING : Workbench Create Engine took: 10.506500 ms +08:53:03.777 INIT : INIT : Workbench Init Engine +08:53:03.777 ENGINE : Initializing engine, version 192142 +08:53:03.777 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 -errStationTeardownDiag 1 +08:53:03.785 ENGINE : Addon dirs: +08:53:03.785 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:53:03.785 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:53:03.785 ENGINE : dir: './addons' +08:53:03.785 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:53:03.785 ENGINE : Available addons: +08:53:03.785 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:53:03.785 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:53:03.785 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:53:03.785 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:53:03.785 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:53:03.785 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:53:03.785 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:53:03.785 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:53:03.902 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:53:03.905 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:53:03.905 ENGINE : CPU vendor : AuthenticAMD +08:53:03.905 ENGINE : CPU type : 2 +08:53:03.905 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:53:03.905 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:53:03.905 ENGINE : CPU count logical : 16 +08:53:03.905 ENGINE : CPU count physical : 8 +08:53:03.905 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:53:03.905 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:53:03.906 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:53:04.051 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:53:04.053 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:53:04.053 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-53-02/resourceDatabase.rdb) +08:53:04.216 RESOURCES : RESOURCES : ResourceDB: full scan +08:53:04.222 RESOURCES : RESOURCES : scanning... +08:53:04.222 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:53:04.226 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:53:04.371 RESOURCES : RESOURCES : scanning @"core" +08:53:04.375 RESOURCES : RESOURCES : scanning @"profile" +08:53:04.375 RESOURCES : RESOURCES : scanning @"logs" +08:53:04.375 RESOURCES : RESOURCES : processing meta-files... +08:53:04.437 RESOURCES : RESOURCES : processing files... +08:53:04.448 INIT : Workbench startup +08:53:04.448 INIT : Workbench Init Engine +08:53:04.448 RESOURCES : ResourceDB: full scan +08:53:04.448 RESOURCES : processing files... +08:53:04.448 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:53:04.448 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:53:04.448 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:53:04.448 RESOURCES : RESOURCES : processing folders... +08:53:04.455 RESOURCES : RESOURCES : creating GUID-item mapping... +08:53:04.472 RESOURCES : RESOURCES : building tree... +08:53:04.523 PROFILING : ResourceDB: full scan took: 307.781600 ms +08:53:04.524 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:53:04.526 RESOURCES : ResourceDB: written 6401/6401 bytes +08:53:04.526 RESOURCES : ResourceDB: cache successfully saved +08:53:04.526 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:53:04.528 RESOURCES : ResourceDB: written 206/206 bytes +08:53:04.528 RESOURCES : ResourceDB: cache successfully saved +08:53:04.528 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-53-02/resourceDatabase.rdb) +08:53:04.529 RESOURCES : ResourceDB: written 162/162 bytes +08:53:04.529 RESOURCES : ResourceDB: cache successfully saved +08:53:04.529 ENGINE : GameProject load +08:53:04.529 ENGINE : Loaded addons: +08:53:04.529 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:53:04.529 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:53:04.529 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:53:04.531 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:53:04.532 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:53:04.532 ENGINE : Engine user settings config loaded +08:53:04.532 PROFILING : Settings changed took: 0.002700 ms +08:53:04.631 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:53:04.632 RENDER : Basic screen setup: +08:53:04.632 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:53:04.632 RENDER : MSAA : none +08:53:04.645 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:53:04.645 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:53:04.645 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:53:04.645 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:53:04.645 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:53:04.645 RENDER : AMD AGS correctly initialized +08:53:04.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 +08:53:04.646 RENDER : Detected output devices: +08:53:04.646 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:53:04.646 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:53:04.646 RENDER : Concurrent frames limit 2 +08:53:04.731 RENDER : DX12 device successfully created by AMD AGS library +08:53:04.731 RENDER : * user markers not supported in this version AMD SW +08:53:04.731 RENDER : Graphics device features +08:53:04.731 RENDER : Needed: +08:53:04.731 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:53:04.731 RENDER : Optional: +08:53:04.731 RENDER : * Allow tearing (VSYNC) : 1 +08:53:04.731 RENDER : * 16 bits : 1 +08:53:04.731 RENDER : * Resource heap tier : 3 +08:53:04.731 RENDER : * Persistent heaps (DRED) : 1 +08:53:04.731 RENDER : * DRED 1.2 is supported by compiler +08:53:04.754 RENDER : Main RT format setup. +08:53:04.754 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:53:04.754 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:53:04.757 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:53:04.788 PROFILING : Settings changed took: 0.022100 ms +08:53:05.287 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:53:05.287 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:53:05.287 AUDIO : Audio client: +08:53:05.287 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:53:05.290 RENDER : RENDER : Reload shaders +08:53:05.290 RENDER : Enfusion shader version 13 +08:53:05.290 INIT : INIT : ShaderListReload +08:53:05.290 PROFILING : ShaderListReload took: 0.000700 ms +08:53:05.433 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:53:05.433 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:53:05.433 AUDIO : Audio client: +08:53:05.433 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:53:05.559 RENDER : Loaded 3752 newer shader binaries +08:53:05.559 PROFILING : Reload shaders took: 268.788700 ms +08:53:05.559 ENGINE : Initializing inputs. +08:53:05.570 NETWORK : Initializing networking. +08:53:05.570 NETWORK : Using new GameRplScheduler. +08:53:05.571 SCRIPT : SCRIPT : Initializing scripts +08:53:05.571 SCRIPT : SCRIPT : ScriptProjectManager init +08:53:06.396 PROFILING : ScriptProjectManager init took: 824.638000 ms +08:53:06.430 PROFILING : Initializing scripts took: 858.476400 ms +08:53:06.447 ENGINE : Enfusion engine successfully created. +08:53:06.447 PROFILING : Workbench Init Engine took: 2669.860900 ms +08:53:06.447 INIT : INIT : Workbench Create Game +08:53:06.457 GUI : Using default language (en_us) +08:53:06.457 GUI : Loading 'en_us' localization file. +08:53:06.457 INIT : INIT : Loading StringTable +08:53:06.480 PROFILING : Loading StringTable took: 22.575800 ms +08:53:06.480 SCRIPT : SCRIPT : Compiling GameLib scripts +08:53:06.535 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 +08:53:06.536 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 +08:53:06.536 PROFILING : Compiling GameLib scripts took: 56.698800 ms +08:53:06.536 SCRIPT : SCRIPT : Compiling Game scripts +08:53:07.704 INIT : Workbench Create Game +08:53:07.704 SCRIPT : Compiling Game scripts +08:53:07.704 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:53:07.704 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:53:07.848 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:07.971 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:53:08.002 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:53:08.136 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:53:08.194 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:53:08.194 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:53:08.196 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:53:08.234 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.234 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.236 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:53:08.236 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:53:08.259 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.290 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Decode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.SnapCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.PropCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Extract` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Inject` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors. +08:53:08.357 SCRIPT (E): @"Scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c,8": RPC `SCR_MapMarkerManagerComponent.RPC_DoAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Decode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.SnapCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.PropCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Extract` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Inject` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors. +08:53:08.358 SCRIPT (E): @"Scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c,8": RPC `SCR_MapMarkerSyncComponent.RPC_AskAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details. +08:53:08.407 SCRIPT (E): Can't compile "Game" script module! + +Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c(4): Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.930 SCRIPT (W): Failed to load +08:53:08.930 PROFILING : Compiling Game scripts took: 2393.904500 ms +08:53:08.930 ENGINE (E): Unable to initialize a game/gamelib. Some workbench features will not work. +08:53:08.930 SCRIPT (W): Initializing default GameLib's game class. +08:53:08.930 INIT : Creating game instance(Game), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:53:08.959 ENGINE : Game successfully created. +08:53:08.966 PROFILING : Workbench Create Game took: 2519.146300 ms +08:53:08.977 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/error.log.txt b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/error.log.txt new file mode 100644 index 0000000..71b5d8e --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/error.log.txt @@ -0,0 +1,53 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-53-02\error.log started at 2026-09-19 08:53:04 (2026-09-19 06:53:04 UTC) + +08:53:04.448 INIT : Workbench startup +08:53:04.448 INIT : Workbench Init Engine +08:53:04.448 RESOURCES : ResourceDB: full scan +08:53:04.448 RESOURCES : processing files... +08:53:04.448 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:53:04.448 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:53:04.448 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:53:07.704 INIT : Workbench Create Game +08:53:07.704 SCRIPT : Compiling Game scripts +08:53:07.704 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:53:07.704 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:53:07.848 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:07.971 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:53:08.002 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:53:08.136 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:53:08.194 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:53:08.194 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:53:08.196 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:53:08.234 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.234 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.236 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:53:08.236 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:53:08.259 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.290 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Decode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.SnapCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.PropCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Extract` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Inject` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors. +08:53:08.357 SCRIPT (E): @"Scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c,8": RPC `SCR_MapMarkerManagerComponent.RPC_DoAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Decode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.SnapCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.PropCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Extract` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Inject` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors. +08:53:08.358 SCRIPT (E): @"Scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c,8": RPC `SCR_MapMarkerSyncComponent.RPC_AskAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details. +08:53:08.407 SCRIPT (E): Can't compile "Game" script module! + +Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c(4): Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.930 SCRIPT (W): Failed to load +08:53:08.930 ENGINE (E): Unable to initialize a game/gamelib. Some workbench features will not work. +08:53:08.930 SCRIPT (W): Initializing default GameLib's game class. diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/headless-launch.log.txt b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/headless-launch.log.txt new file mode 100644 index 0000000..8564183 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/headless-launch.log.txt @@ -0,0 +1,131 @@ +[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: 115 +[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] [Info] launch: Primary child shut down! +(EE) failed to read Wayland events: Broken pipe diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source-sha256.json b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source-sha256.json new file mode 100644 index 0000000..32848c7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source-sha256.json @@ -0,0 +1,168 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "0fdc087f57afbbe785cdea12810d9c63060d88a778dc90c470733c13e86da94f", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "0b2f115a7a7f817fde50f4bd0d8d89d7a9d5a83a3d6ae9c2723ce30e7bc41a6c", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "5a06f63e63c739ed4dbb81064491d0d259813a2052d40d30a95f67f71c966b82", + "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": "58caf2f7f3990a6e5a1927790c49ea37ad6ba0153b6ebca9c675db540c09f78e", + "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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "f524f33d460bb72602f60b473f0c0d59f8a60f3e1e20d70d60d664fb85373837", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-085302-map-probe-compile-failure/launch-source.json b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source.json new file mode 100644 index 0000000..ce3b401 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/launch-source.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "launch_id": "01a6429b-a6c2-4786-aecd-1cdde2da4681", + "captured_unix": 1789800781.0761938, + "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", + "-errStationTeardownDiag", + "1" + ], + "manifest_sha256": "e650d368a9f18fd9d11a410cd6c38eef641cfccb292aba1809623405ee540b93" +} diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/report.json b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/report.json new file mode 100644 index 0000000..1362ca0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/report.json @@ -0,0 +1,46 @@ +{ + "log": "docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 0, + "script_or_runtime_failures": [ + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Encode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Decode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.SnapCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.PropCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Extract` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Inject` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c,8\": RPC `SCR_MapMarkerManagerComponent.RPC_DoAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Encode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Decode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.SnapCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.PropCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Extract` is missing.", + "08:53:08.358 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Inject` is missing.", + "08:53:08.358 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors.", + "08:53:08.358 SCRIPT (E): @\"Scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c,8\": RPC `SCR_MapMarkerSyncComponent.RPC_AskAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details.", + "08:53:08.407 SCRIPT (E): Can't compile \"Game\" script module!" + ], + "engine_errors": [ + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Encode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Decode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.SnapCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.PropCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Extract` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Inject` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c,8\": RPC `SCR_MapMarkerManagerComponent.RPC_DoAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Encode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Decode` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.SnapCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.PropCompare` is missing.", + "08:53:08.357 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Extract` is missing.", + "08:53:08.358 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Method `SCR_MapMarkerBase.Inject` is missing.", + "08:53:08.358 SCRIPT (E): @\"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4\": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors.", + "08:53:08.358 SCRIPT (E): @\"Scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c,8\": RPC `SCR_MapMarkerSyncComponent.RPC_AskAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details.", + "08:53:08.407 SCRIPT (E): Can't compile \"Game\" script module!", + "08:53:08.930 ENGINE (E): Unable to initialize a game/gamelib. Some workbench features will not work." + ], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/runner.json.txt b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/runner.json.txt new file mode 100644 index 0000000..ade8367 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789800789.3672154, + "console_sha256": "b80e8949349f5ba5826d2133d7d740c51a0c211f0bc669642898822a1a635184", + "end_source_sha256": "e650d368a9f18fd9d11a410cd6c38eef641cfccb292aba1809623405ee540b93", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "01a6429b-a6c2-4786-aecd-1cdde2da4681", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "e650d368a9f18fd9d11a410cd6c38eef641cfccb292aba1809623405ee540b93", + "started_unix": 1789800781.076257, + "result": "test-failed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-53-02", + "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-085302-map-probe-compile-failure/script.log.txt b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/script.log.txt new file mode 100644 index 0000000..b7b303e --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/script.log.txt @@ -0,0 +1,50 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-53-02\script.log started at 2026-09-19 08:53:05 (2026-09-19 06:53:05 UTC) + +08:53:05.571 SCRIPT : SCRIPT : Initializing scripts +08:53:05.571 SCRIPT : SCRIPT : ScriptProjectManager init +08:53:06.480 SCRIPT : SCRIPT : Compiling GameLib scripts +08:53:06.535 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 +08:53:06.536 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 +08:53:06.536 SCRIPT : SCRIPT : Compiling Game scripts +08:53:07.704 SCRIPT : Compiling Game scripts +08:53:07.704 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:53:07.704 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:53:07.848 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:07.971 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:53:08.002 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:53:08.106 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:53:08.136 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:53:08.194 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:53:08.194 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:53:08.196 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:53:08.234 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.234 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.236 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:53:08.236 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:53:08.259 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:53:08.290 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Decode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.SnapCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.PropCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Extract` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Inject` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors. +08:53:08.357 SCRIPT (E): @"Scripts/Game/Map/Markers/SCR_MapMarkerManagerComponent.c,8": RPC `SCR_MapMarkerManagerComponent.RPC_DoAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Decode` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.SnapCompare` is missing. +08:53:08.357 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.PropCompare` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Extract` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Method `SCR_MapMarkerBase.Inject` is missing. +08:53:08.358 SCRIPT (E): @"Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c,4": Type `SCR_MapMarkerBase` cannot be replicated due to previous errors. +08:53:08.358 SCRIPT (E): @"Scripts/Game/Map/Markers/SCR_MapMarkerSyncComponent.c,8": RPC `SCR_MapMarkerSyncComponent.RPC_AskAddStaticMarker` has parameters that cannot be replicated. RPC calls will be discarded. See previous errors for details. +08:53:08.407 SCRIPT (E): Can't compile "Game" script module! + +Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c(4): Method `SCR_MapMarkerBase.Encode` is missing. +08:53:08.930 SCRIPT (W): Failed to load +08:53:08.930 SCRIPT (W): Initializing default GameLib's game class. diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-provenance.json b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-sha256.json b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-sha256.json new file mode 100644 index 0000000..32848c7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085302-map-probe-compile-failure/source-sha256.json @@ -0,0 +1,168 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "0fdc087f57afbbe785cdea12810d9c63060d88a778dc90c470733c13e86da94f", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "0b2f115a7a7f817fde50f4bd0d8d89d7a9d5a83a3d6ae9c2723ce30e7bc41a6c", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "5a06f63e63c739ed4dbb81064491d0d259813a2052d40d30a95f67f71c966b82", + "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": "58caf2f7f3990a6e5a1927790c49ea37ad6ba0153b6ebca9c675db540c09f78e", + "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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "f524f33d460bb72602f60b473f0c0d59f8a60f3e1e20d70d60d664fb85373837", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-085442/console.log.txt b/docs/evidence/native-2026-09-19-085442/console.log.txt new file mode 100644 index 0000000..8d73313 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/console.log.txt @@ -0,0 +1,1486 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-54-42\console.log started at 2026-09-19 08:54:42 (2026-09-19 06:54:42 UTC) + +08:54:42.539 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-54-42' to filesystem under name logs +08:54:42.539 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:54:42.539 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:54:42.541 PROFILING : Workbench Create Engine took: 11.941500 ms +08:54:43.578 INIT : INIT : Workbench Init Engine +08:54:43.578 ENGINE : Initializing engine, version 192142 +08:54:43.578 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 -errStationTeardownDiag 1 +08:54:43.586 ENGINE : Addon dirs: +08:54:43.586 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/' +08:54:43.586 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:54:43.586 ENGINE : dir: './addons' +08:54:43.586 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:54:43.586 ENGINE : Available addons: +08:54:43.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:54:43.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:54:43.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:54:43.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:54:43.586 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:54:43.586 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:54:43.586 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:54:43.587 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:54:43.700 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:54:43.703 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:54:43.703 ENGINE : CPU vendor : AuthenticAMD +08:54:43.703 ENGINE : CPU type : 2 +08:54:43.703 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:54:43.703 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:54:43.703 ENGINE : CPU count logical : 16 +08:54:43.703 ENGINE : CPU count physical : 8 +08:54:43.703 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:54:43.703 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:54:43.704 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:54:43.838 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb) +08:54:43.839 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:54:43.840 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-54-42/resourceDatabase.rdb) +08:54:43.994 RESOURCES : RESOURCES : ResourceDB: full scan +08:54:43.999 RESOURCES : RESOURCES : scanning... +08:54:43.999 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:54:44.003 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:54:44.155 RESOURCES : RESOURCES : scanning @"core" +08:54:44.159 RESOURCES : RESOURCES : scanning @"profile" +08:54:44.159 RESOURCES : RESOURCES : scanning @"logs" +08:54:44.160 RESOURCES : RESOURCES : processing meta-files... +08:54:44.227 RESOURCES : RESOURCES : processing files... +08:54:44.239 INIT : Workbench startup +08:54:44.239 INIT : Workbench Init Engine +08:54:44.239 RESOURCES : ResourceDB: full scan +08:54:44.239 RESOURCES : processing files... +08:54:44.239 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:54:44.239 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:54:44.239 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:54:44.239 RESOURCES : RESOURCES : processing folders... +08:54:44.246 RESOURCES : RESOURCES : creating GUID-item mapping... +08:54:44.262 RESOURCES : RESOURCES : building tree... +08:54:44.317 PROFILING : ResourceDB: full scan took: 323.399000 ms +08:54:44.318 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:54:44.319 RESOURCES : ResourceDB: written 6401/6401 bytes +08:54:44.319 RESOURCES : ResourceDB: cache successfully saved +08:54:44.320 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:54:44.321 RESOURCES : ResourceDB: written 206/206 bytes +08:54:44.321 RESOURCES : ResourceDB: cache successfully saved +08:54:44.321 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-54-42/resourceDatabase.rdb) +08:54:44.322 RESOURCES : ResourceDB: written 162/162 bytes +08:54:44.322 RESOURCES : ResourceDB: cache successfully saved +08:54:44.322 ENGINE : GameProject load +08:54:44.322 ENGINE : Loaded addons: +08:54:44.322 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:54:44.322 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:54:44.322 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:54:44.324 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:54:44.324 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:54:44.324 ENGINE : Engine user settings config loaded +08:54:44.324 PROFILING : Settings changed took: 0.001500 ms +08:54:44.427 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:54:44.428 RENDER : Basic screen setup: +08:54:44.428 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:54:44.428 RENDER : MSAA : none +08:54:44.442 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:54:44.442 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:54:44.442 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:54:44.442 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:54:44.442 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:54:44.442 RENDER : AMD AGS correctly initialized +08:54:44.443 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 +08:54:44.443 RENDER : Detected output devices: +08:54:44.443 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:54:44.443 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:54:44.443 RENDER : Concurrent frames limit 2 +08:54:44.517 RENDER : DX12 device successfully created by AMD AGS library +08:54:44.517 RENDER : * user markers not supported in this version AMD SW +08:54:44.517 RENDER : Graphics device features +08:54:44.517 RENDER : Needed: +08:54:44.517 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:54:44.517 RENDER : Optional: +08:54:44.517 RENDER : * Allow tearing (VSYNC) : 1 +08:54:44.517 RENDER : * 16 bits : 1 +08:54:44.517 RENDER : * Resource heap tier : 3 +08:54:44.517 RENDER : * Persistent heaps (DRED) : 1 +08:54:44.517 RENDER : * DRED 1.2 is supported by compiler +08:54:44.538 RENDER : Main RT format setup. +08:54:44.538 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:54:44.538 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:54:44.540 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:54:44.568 PROFILING : Settings changed took: 0.015100 ms +08:54:45.026 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:54:45.026 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:54:45.026 AUDIO : Audio client: +08:54:45.026 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:54:45.030 RENDER : RENDER : Reload shaders +08:54:45.030 RENDER : Enfusion shader version 13 +08:54:45.030 INIT : INIT : ShaderListReload +08:54:45.030 PROFILING : ShaderListReload took: 0.000500 ms +08:54:45.168 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:54:45.168 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:54:45.169 AUDIO : Audio client: +08:54:45.169 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:54:45.285 RENDER : Loaded 3752 newer shader binaries +08:54:45.285 PROFILING : Reload shaders took: 254.577200 ms +08:54:45.285 ENGINE : Initializing inputs. +08:54:45.297 NETWORK : Initializing networking. +08:54:45.298 NETWORK : Using new GameRplScheduler. +08:54:45.298 SCRIPT : SCRIPT : Initializing scripts +08:54:45.298 SCRIPT : SCRIPT : ScriptProjectManager init +08:54:46.138 PROFILING : ScriptProjectManager init took: 839.819900 ms +08:54:46.175 PROFILING : Initializing scripts took: 876.537900 ms +08:54:46.193 ENGINE : Enfusion engine successfully created. +08:54:46.193 PROFILING : Workbench Init Engine took: 2615.092900 ms +08:54:46.193 INIT : INIT : Workbench Create Game +08:54:46.204 GUI : Using default language (en_us) +08:54:46.204 GUI : Loading 'en_us' localization file. +08:54:46.204 INIT : INIT : Loading StringTable +08:54:46.228 PROFILING : Loading StringTable took: 24.115600 ms +08:54:46.228 SCRIPT : SCRIPT : Compiling GameLib scripts +08:54:46.287 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 +08:54:46.288 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 +08:54:46.288 PROFILING : Compiling GameLib scripts took: 60.424100 ms +08:54:46.288 SCRIPT : SCRIPT : Compiling Game scripts +08:54:47.389 INIT : Workbench Create Game +08:54:47.389 SCRIPT : Compiling Game scripts +08:54:47.389 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:54:47.389 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:54:47.528 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.641 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:54:47.672 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:54:47.802 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:54:47.866 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:54:47.867 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:54:47.868 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:54:47.909 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.909 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.911 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:54:47.911 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:54:47.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.967 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:54:48.227 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 +08:54:48.234 SCRIPT : Module: Game; loaded 5735x files; 11239x classes; used 32907K 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: 8599e6b7 +08:54:48.271 PROFILING : Compiling Game scripts took: 1982.518800 ms +08:54:48.277 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:54:48.318 ENGINE : Game successfully created. +08:54:48.319 PROFILING : Workbench Create Game took: 2125.971700 ms +08:54:48.326 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/thumbnails +08:54:49.146 INIT : INIT : Workbench Reload Game +08:54:49.147 ENGINE : Game destroyed. +08:54:49.154 GUI : Using default language (en_us) +08:54:49.155 GUI : Loading 'en_us' localization file. +08:54:49.155 INIT : INIT : Loading StringTable +08:54:49.166 PROFILING : Loading StringTable took: 10.704300 ms +08:54:49.166 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:54:49.172 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:54:49.172 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:54:49.172 ENGINE : Game successfully created. +08:54:49.173 ENGINE : Game successfully initialized. +08:54:49.173 PROFILING : Workbench Reload Game took: 26.998900 ms +08:54:49.892 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:54:50.884 PROFILING : Entities load took: 991.173300 ms +08:54:50.894 WORLD : WORLD : CreateEntities +08:54:50.900 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:54:50.900 PROFILING : NotifyBeforeEntitiesCreated took: 0.003900 ms +08:54:50.900 WORLD : WORLD : Wait for preloading data +08:54:50.901 PROFILING : Wait for preloading data took: 0.004400 ms +08:54:51.004 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:54:51.004 PROFILING : PROFILING : Terrain load +08:54:52.574 PROFILING : Terrain load took: 1569.437400 ms +08:54:56.652 WORLD : CreateEntities +08:54:56.652 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" +08:54:56.652 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:54:56.652 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:55:06.283 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:55:06.283 PROFILING : NotifyBeforeEntitiesInitialized took: 0.008300 ms +08:55:06.736 WORLD : WORLD : NotifyEntitiesInitialized +08:55:06.737 TERRAIN : TERRAIN : Initializing road networks... +08:55:06.739 PROFILING : Initializing road networks... took: 2.109100 ms +08:55:06.739 PROFILING : NotifyEntitiesInitialized took: 2.355400 ms +08:55:06.739 PROFILING : CreateEntities took: 15844.307200 ms +08:55:06.910 PROFILING : * WorldEditor: LoadWorld: 17023.526700 ms +08:55:08.391 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:55:08.391 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:55:08.392 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:55:08.393 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:55:08.477 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:55:08.502 BACKEND : Attempting online Game Config instead. +08:55:11.665 INIT : INIT : Workbench Reload Game +08:55:11.668 ENGINE : Game destroyed. +08:55:11.674 GUI : Using default language (en_us) +08:55:11.674 GUI : Loading 'en_us' localization file. +08:55:11.674 INIT : INIT : Loading StringTable +08:55:11.696 PROFILING : Loading StringTable took: 21.413500 ms +08:55:11.696 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:55:11.706 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:55:11.706 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:55:11.706 ENGINE : Game successfully created. +08:55:11.706 ENGINE : Game successfully initialized. +08:55:11.706 PROFILING : Workbench Reload Game took: 41.387200 ms +08:55:11.710 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:55:11.767 PLATFORM : Save data from container 'settings' have been loaded +08:55:11.856 PLATFORM : Save data from container 'sessions' have been loaded +08:55:11.857 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:55:11.857 ENGINE : Game user settings config loaded +08:55:11.954 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:55:11.962 WORLD : WORLD : Game::LoadEntities +08:55:11.962 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:55:11.963 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:55:11.963 WORLD : WORLD : CreateEntities +08:55:11.963 WORLD : WORLD : CreateEntities +08:55:11.963 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:55:11.968 RESOURCES : Loaded mission headers from 7 addon(s)! +08:55:11.968 PROFILING : NotifyBeforeEntitiesCreated took: 4.642200 ms +08:55:11.968 WORLD : WORLD : Wait for preloading data +08:55:11.968 PROFILING : Wait for preloading data took: 0.000700 ms +08:55:16.519 WORLD : Game::LoadEntities +08:55:16.519 WORLD : CreateEntities +08:55:16.519 WORLD : CreateEntities +08:55:16.519 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" +08:55:16.519 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:55:16.519 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:55:17.938 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:55:17.938 ENTITY : CreateComponent 'Hierarchy' +08:55:17.938 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>') +08:55:17.938 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:55:17.938 ENTITY : CreateComponent 'Hierarchy' +08:55:17.938 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>') +08:55:17.938 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:55:17.938 ENTITY : CreateComponent 'Hierarchy' +08:55:17.938 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>') +08:55:17.944 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:55:17.944 ENTITY : CreateComponent 'Hierarchy' +08:55:17.944 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>') +08:55:17.944 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:55:17.944 ENTITY : CreateComponent 'Hierarchy' +08:55:17.944 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>') +08:55:17.944 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:55:17.944 ENTITY : CreateComponent 'Hierarchy' +08:55:17.944 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>') +08:55:17.948 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:55:17.948 ENTITY : CreateComponent 'Hierarchy' +08:55:17.948 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>') +08:55:17.948 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:55:17.948 ENTITY : CreateComponent 'Hierarchy' +08:55:17.948 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>') +08:55:17.948 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:55:17.948 ENTITY : CreateComponent 'Hierarchy' +08:55:17.948 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>') +08:55:22.850 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:55:22.850 PROFILING : NotifyBeforeEntitiesInitialized took: 0.048100 ms +08:55:24.816 WORLD : InitEntities 'world' +08:55:24.816 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:55:24.816 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:55:24.842 WORLD : InitEntities 'world' +08:55:24.842 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:55:24.842 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:55:24.843 WORLD : WORLD : NotifyEntitiesInitialized +08:55:24.843 TERRAIN : TERRAIN : Initializing road networks... +08:55:24.846 PROFILING : Initializing road networks... took: 3.005000 ms +08:55:24.846 DEFAULT : DEFAULT : WorldVolumesCollection +08:55:24.905 PROFILING : WorldVolumesCollection took: 58.832500 ms +08:55:24.905 INIT : INIT : SoundWorldInit +08:55:24.919 PROFILING : SoundWorldInit took: 13.991700 ms +08:55:24.919 PROFILING : NotifyEntitiesInitialized took: 76.116300 ms +08:55:24.919 PROFILING : CreateEntities took: 12955.953100 ms +08:55:24.919 PROFILING : CreateEntities took: 12956.140300 ms +08:55:24.920 WORLD : WORLD : Wait for preloading data around camera +08:55:24.920 PROFILING : Wait for preloading data around camera took: 0.001600 ms +08:55:24.920 WORLD : WORLD : EOnActivate +08:55:24.954 PROFILING : EOnActivate took: 34.172500 ms +08:55:24.954 PROFILING : Game::LoadEntities took: 12992.463200 ms +08:55:25.192 DEFAULT : Entered offline game state. +08:55:25.296 NETWORK : Player connected: connectionID=2147483646 +08:55:25.296 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:55:25.296 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:55:25.302 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:55:25.302 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:55:25.302 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:55:25.302 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! +08:55:25.303 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! +08:55:25.304 SCRIPT (W): Can't open config file "" +08:55:25.310 WORLD : InitEntities 'world' +08:55:25.310 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:55:25.310 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:55:25.311 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:55:25.311 SCRIPT (W): Slot_Chat Has no Content! +08:55:25.311 SCRIPT (W): Slot_VON Has no Content! +08:55:25.311 SCRIPT (W): Slot_AvailableActions Has no Content! +08:55:25.311 SCRIPT (W): Slot_Vehicle Has no Content! +08:55:25.311 SCRIPT (W): Slot_GameVersion Has no Content! +08:55:25.311 SCRIPT (W): Slot_Notifications Has no Content! +08:55:25.312 SCRIPT (W): Slot_Hints Has no Content! +08:55:25.323 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:55:25.324 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:55:25.324 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:55:25.324 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. +08:55:25.324 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. +08:55:25.327 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:55:25.328 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:55:25.328 NETWORK : Players connecting: 0 +08:55:25.328 NETWORK : Players connected: 1 / 1 +08:55:25.356 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Core/autosaves +08:55:25.358 PROFILING : Workbench startup took: 42888.567300 ms +08:55:25.369 SCRIPT : ERR STATION INIT OWNERSHIP: n=1 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:55:25.370 SCRIPT : ERR STATION INIT OWNERSHIP: n=2 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:55:25.383 WORLD : Frame start +08:55:25.383 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:55:25.395 WORLD : UpdateEntities +08:55:25.395 WORLD : Frame +08:55:25.395 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:55:25.585 WORLD : UpdateEntities +08:55:25.585 WORLD : PostFrame +08:55:25.585 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:55:25.585 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:55:25.625 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:55:25.626 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:55:25.626 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:55:25.626 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:55:25.757 RENDER : RENDER : ObjectsHeightMap::Build +08:55:25.758 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:55:25.915 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 156.767900 ms +08:55:25.922 PROFILING : ObjectsHeightMap::Build took: 163.875300 ms +08:55:27.094 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:55:27.124 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:55:27.125 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:55:27.159 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:55:27.164 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:55:27.215 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:55:27.215 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:55:27.221 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:55:27.269 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:55:27.270 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:55:27.271 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:55:27.272 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:55:27.275 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:55:27.276 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:55:27.276 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:55:27.278 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:55:27.278 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:55:27.278 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:55:27.279 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:55:27.279 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:55:27.279 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:55:27.279 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 +08:55:27.279 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:55:27.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:55:27.280 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 +08:55:27.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:55:27.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:55:27.280 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 +08:55:27.280 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:28.039 WORLD : UpdateEntities +08:55:28.039 WORLD : AfterPostSimulate +08:55:28.039 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:55:28.111 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.111 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.112 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.112 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.367 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5287,7499.7> up=0.995678 +08:55:28.367 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +08:55:28.368 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:28.368 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7501.97> +08:55:28.368 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7501.97> terrainY=63.3165 tireTerrainGap=-0.00303268 +08:55:28.368 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7501.97> radius=0.3 bottom=<7012.07,63.3134,7501.97> fraction=0.441143 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00294876 +08:55:28.368 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6009,7497.71> +08:55:28.368 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1509,7497.71> terrainY=64.1556 tireTerrainGap=-0.00471497 +08:55:28.369 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6009,7497.71> radius=0.45 bottom=<7009.88,64.1509,7497.71> fraction=0.432978 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00474548 +08:55:28.369 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2629,7497.74> +08:55:28.369 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8129,7497.74> terrainY=63.8179 tireTerrainGap=-0.00495529 +08:55:28.369 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2629,7497.74> radius=0.45 bottom=<7014.42,63.8129,7497.74> fraction=0.431944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00497055 +08:55:28.369 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:28.622 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:28.622 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:28.623 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.623 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:29.127 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.127 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.128 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.450 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5347,7499.71> up=0.994334 +08:55:29.450 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:55:29.451 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:29.451 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6187,7501.99> +08:55:29.451 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3187,7501.99> terrainY=63.3146 tireTerrainGap=0.00413132 +08:55:29.451 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6187,7501.99> radius=0.3 bottom=<7012.07,63.3187,7501.99> fraction=0.473389 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00414658 +08:55:29.451 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.602,7497.71> +08:55:29.451 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.152,7497.71> terrainY=64.149 tireTerrainGap=0.00299072 +08:55:29.452 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.602,7497.71> radius=0.45 bottom=<7009.93,64.152,7497.71> fraction=0.468312 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00302887 +08:55:29.452 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2647,7497.78> +08:55:29.452 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8147,7497.78> terrainY=63.8155 tireTerrainGap=-0.000751495 +08:55:29.452 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2647,7497.78> radius=0.45 bottom=<7014.47,63.8147,7497.78> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:55:29.452 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.944 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:30.454 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5312,7499.74> up=0.994218 +08:55:30.454 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +08:55:30.455 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:30.455 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6139,7502.01> +08:55:30.455 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3139,7502.01> terrainY=63.3115 tireTerrainGap=0.00248337 +08:55:30.455 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6139,7502.01> radius=0.3 bottom=<7012.08,63.3139,7502.01> fraction=0.465776 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00247192 +08:55:30.455 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5952,7497.72> +08:55:30.455 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1452,7497.72> terrainY=64.1427 tireTerrainGap=0.00242615 +08:55:30.456 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5952,7497.72> radius=0.45 bottom=<7009.97,64.1452,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +08:55:30.456 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.83> +08:55:30.456 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.83> terrainY=63.8127 tireTerrainGap=-0.00218582 +08:55:30.456 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.83> radius=0.45 bottom=<7014.51,63.8105,7497.83> fraction=0.444444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00222015 +08:55:30.456 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:30.456 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.457 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.457 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.457 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.961 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:30.961 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:30.962 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:30.962 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:31.474 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:55:31.474 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:55:31.475 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:31.475 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:55:31.475 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00168991 +08:55:31.475 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 +08:55:31.475 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:55:31.475 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00254822 +08:55:31.476 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 +08:55:31.476 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:55:31.476 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.0018959 +08:55:31.476 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 +08:55:31.476 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:32.003 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.004 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.004 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.004 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.257 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.258 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:55:32.259 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:55:32.259 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:55:32.260 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:55:32.638 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:55:32.681 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.901 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.902 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:55:32.902 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:55:32.903 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:55:32.903 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:55:32.903 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:55:32.904 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.904 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.905 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:55:32.905 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:55:32.906 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:55:32.906 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:55:32.907 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:55:32.907 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:55:32.908 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:55:32.908 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +08:55:32.927 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +08:55:32.928 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +08:55:32.928 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +08:55:32.928 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +08:55:32.929 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +08:55:32.929 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +08:55:32.929 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:32.932 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:55:32.932 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:55:32.932 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:55:32.934 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:55:32.934 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:55:33.408 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:55:33.408 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:33.412 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:33.412 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:33.412 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:55:33.916 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:55:33.918 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:55:33.918 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:55:33.918 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:55:33.925 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:55:33.927 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:55:33.927 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:55:33.927 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:55:33.928 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:55:33.928 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:55:33.930 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:55:33.932 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:55:33.932 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:55:33.932 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:55:33.939 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:55:33.939 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:55:33.939 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:55:33.940 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:55:33.940 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:55:33.940 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:55:33.940 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:55:33.940 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:55:33.940 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:55:33.940 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:55:33.941 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:55:33.941 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:55:33.941 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:55:33.942 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:55:33.946 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:55:33.947 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:55:33.948 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:55:33.948 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:55:33.949 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:55:33.950 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:55:33.950 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:55:33.951 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:55:33.951 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:55:33.952 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:55:33.952 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:55:33.952 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:55:33.959 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:55:33.959 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:55:33.959 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:55:33.959 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:33.960 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:55:33.960 SCRIPT : ERR BASE STOCK: cache items=54 +08:55:33.960 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:55:33.961 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:55:33.961 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:55:33.961 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:55:33.961 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:55:33.963 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:55:33.965 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:55:33.965 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:55:33.965 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:55:33.965 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:33.967 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:33.968 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:55:33.969 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:55:40.011 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:55:46.068 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:55:46.069 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:55:46.069 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.32,174.682,7466.38> target=<6340,175.788,7400> +08:55:52.119 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:55:58.191 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:55:58.191 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:55:58.697 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:55:58.798 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:56:01.225 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:56:03.763 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:56:03.767 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:56:03.767 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:56:05.289 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:56:05.289 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:56:05.292 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:56:05.298 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:56:06.294 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:56:06.295 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:56:06.295 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:56:07.321 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200.01> radio=<6500,159.756,7200> distanceXZ=6.00537 +08:56:07.322 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:56:08.330 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.05,159.668,7200.02> radio=<6500,159.756,7200> distanceXZ=2.04993 +08:56:08.330 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:56:09.342 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.669,7200.02> +08:56:10.352 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.67,7200.02> +08:56:11.365 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.529,7200.02> +08:56:11.874 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.05,159.529,7200.02> +08:56:11.875 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.04993 +08:56:11.875 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:56:11.875 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:56:11.875 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:56:11.875 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:56:12.888 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:56:13.890 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:56:13.890 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:56:14.902 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:56:15.914 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:56:16.921 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:56:17.929 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:56:18.946 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.09,159.667,7200.06> +08:56:19.953 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.09,159.527,7200.06> +08:56:20.460 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.09,159.527,7200.06> +08:56:20.461 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:56:21.482 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.24> +08:56:22.503 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.24> +08:56:23.003 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.73,159.873,7199.24> +08:56:23.003 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:56:24.013 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4946 +08:56:24.013 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:56:25.031 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:56:26.033 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:56:26.034 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:56:26.037 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:56:26.037 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:56:26.039 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:56:27.042 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:56:27.042 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.0023505 +08:56:27.042 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:56:27.042 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:56:27.043 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:56:27.044 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:56:27.044 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:56:32.085 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:56:32.085 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:56:32.085 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:56:32.086 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:56:32.088 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:56:32.088 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:56:32.088 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:56:32.089 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:56:32.089 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:56:32.089 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:57:07.414 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +08:57:07.415 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +08:57:07.415 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +08:57:07.415 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +08:57:13.504 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +08:57:13.504 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +08:57:13.504 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +08:57:16.035 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +08:57:16.036 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +08:57:16.036 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:57:46.400 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:57:49.434 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +08:57:49.435 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +08:57:49.435 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +08:57:49.435 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +08:57:49.435 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +08:57:49.435 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:57:49.438 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:57:49.438 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:57:49.438 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:57:49.439 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:57:49.439 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:57:49.439 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:57:49.439 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +08:57:52.472 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +08:57:53.437 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:57:53.438 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +08:57:53.438 SCRIPT : ERR SMOKE COMPLETE: core-only escape +08:57:53.534 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:57:53.536 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:57:53.536 SCRIPT (W): Slot_Chat Has no Content! +08:57:53.536 SCRIPT (W): Slot_VON Has no Content! +08:57:53.536 SCRIPT (W): Slot_GameVersion Has no Content! +08:57:53.536 SCRIPT (W): Slot_Notifications Has no Content! +08:57:55.572 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:57:55.572 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:57:55.572 SCRIPT : -- Stack trace -- +08:57:55.572 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:57:55.572 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:57:55.572 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:57:55.573 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:57:55.573 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:57:55.573 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:57:55.573 SCRIPT : ----------------- +08:57:55.573 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:57:55.573 SCRIPT : -- Stack trace -- +08:57:55.573 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:57:55.573 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:57:55.574 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:57:55.574 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:57:55.574 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:57:55.574 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:57:55.574 SCRIPT : ----------------- +08:57:55.576 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:57:55.576 SCRIPT (W): Slot_Chat Has no Content! +08:57:55.576 SCRIPT (W): Slot_VON Has no Content! +08:57:55.576 SCRIPT (W): Slot_GameVersion Has no Content! +08:57:55.576 SCRIPT (W): Slot_Notifications Has no Content! +08:57:55.578 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:58:23.456 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:58:23.457 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:58:23.679 DEFAULT (W): Achievements cannot be saved. +08:58:23.679 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +08:58:23.977 PLATFORM : Save data from container 'settings' have been loaded +08:58:24.077 PLATFORM : Save data from container 'sessions' have been loaded +08:58:24.078 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:58:24.078 ENGINE : Game user settings config loaded +08:58:27.086 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=1 owner= prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:58:27.091 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=2 owner= prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:58:27.270 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:58:27.271 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:58:27.992 PROFILING : Entities load took: 720.850100 ms +08:58:27.994 WORLD : WORLD : Game::LoadEntities +08:58:27.995 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:58:27.995 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:58:27.995 WORLD : WORLD : CreateEntities +08:58:27.995 WORLD : WORLD : CreateEntities 'world' +08:58:27.995 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:58:27.996 RESOURCES : Unloading all loaded mission headers from 7 addon(s)! +08:58:27.999 RESOURCES : Loaded mission headers from 7 addon(s)! +08:58:27.999 PROFILING : NotifyBeforeEntitiesCreated took: 3.387600 ms +08:58:27.999 WORLD : WORLD : Wait for preloading data +08:58:27.999 PROFILING : Wait for preloading data took: 0.000900 ms +08:58:27.999 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:58:27.999 PROFILING : PROFILING : Terrain load +08:58:29.240 PROFILING : Terrain load took: 1240.836300 ms +08:58:32.090 WORLD : Game::LoadEntities +08:58:32.090 WORLD : CreateEntities +08:58:32.090 WORLD : CreateEntities 'world' +08:58:32.090 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" +08:58:32.090 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:58:32.090 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:58:33.466 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:58:33.466 ENTITY : CreateComponent 'Hierarchy' +08:58:33.466 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>') +08:58:33.466 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:58:33.466 ENTITY : CreateComponent 'Hierarchy' +08:58:33.466 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>') +08:58:33.466 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:58:33.466 ENTITY : CreateComponent 'Hierarchy' +08:58:33.466 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>') +08:58:33.470 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:58:33.470 ENTITY : CreateComponent 'Hierarchy' +08:58:33.470 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>') +08:58:33.471 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:58:33.471 ENTITY : CreateComponent 'Hierarchy' +08:58:33.471 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>') +08:58:33.471 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:58:33.471 ENTITY : CreateComponent 'Hierarchy' +08:58:33.471 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>') +08:58:33.475 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:58:33.475 ENTITY : CreateComponent 'Hierarchy' +08:58:33.475 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>') +08:58:33.475 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:58:33.475 ENTITY : CreateComponent 'Hierarchy' +08:58:33.475 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>') +08:58:33.475 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:58:33.475 ENTITY : CreateComponent 'Hierarchy' +08:58:33.475 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>') +08:58:38.152 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:58:38.152 PROFILING : NotifyBeforeEntitiesInitialized took: 0.055300 ms +08:58:40.150 WORLD : InitEntities 'world' +08:58:40.150 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:58:40.150 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:58:40.151 WORLD : InitEntities 'world' +08:58:40.151 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:58:40.151 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:58:40.151 WORLD : WORLD : NotifyEntitiesInitialized +08:58:40.151 TERRAIN : TERRAIN : Initializing road networks... +08:58:40.153 PROFILING : Initializing road networks... took: 2.171000 ms +08:58:40.154 DEFAULT : DEFAULT : WorldVolumesCollection +08:58:40.211 PROFILING : WorldVolumesCollection took: 57.406100 ms +08:58:40.211 INIT : INIT : SoundWorldInit +08:58:40.211 PROFILING : SoundWorldInit took: 0.198700 ms +08:58:40.211 PROFILING : NotifyEntitiesInitialized took: 60.013600 ms +08:58:40.211 PROFILING : CreateEntities took: 12215.664000 ms +08:58:40.212 PROFILING : CreateEntities took: 12215.848100 ms +08:58:40.212 WORLD : WORLD : Wait for preloading data around camera +08:58:40.212 PROFILING : Wait for preloading data around camera took: 0.001200 ms +08:58:40.212 WORLD : WORLD : EOnActivate +08:58:40.239 PROFILING : EOnActivate took: 27.192500 ms +08:58:40.240 PROFILING : Game::LoadEntities took: 12245.313200 ms +08:58:40.240 PROFILING : * LoadEntities: 12245.603800 ms +08:58:40.677 DEFAULT : Entered offline game state. +08:58:40.785 NETWORK : Player connected: connectionID=2147483646 +08:58:40.785 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:58:40.785 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:58:40.787 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:58:40.787 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:58:40.787 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:58:40.787 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! +08:58:40.788 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! +08:58:40.789 SCRIPT (W): Can't open config file "" +08:58:40.789 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:58:40.790 WORLD : InitEntities 'world' +08:58:40.790 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:58:40.790 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:58:40.791 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:58:40.791 SCRIPT (W): Slot_Chat Has no Content! +08:58:40.791 SCRIPT (W): Slot_VON Has no Content! +08:58:40.791 SCRIPT (W): Slot_AvailableActions Has no Content! +08:58:40.791 SCRIPT (W): Slot_Vehicle Has no Content! +08:58:40.791 SCRIPT (W): Slot_GameVersion Has no Content! +08:58:40.791 SCRIPT (W): Slot_Notifications Has no Content! +08:58:40.791 SCRIPT (W): Slot_Hints Has no Content! +08:58:40.796 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:58:40.796 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:58:40.796 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:58:40.796 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. +08:58:40.797 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. +08:58:40.799 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:58:40.800 NETWORK : Players connecting: 0 +08:58:40.800 NETWORK : Players connected: 1 / 1 +08:58:40.806 SCRIPT : ERR STATION INIT OWNERSHIP: n=3 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:58:40.807 SCRIPT : ERR STATION INIT OWNERSHIP: n=4 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:58:40.818 WORLD : Frame start +08:58:40.818 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:58:40.830 WORLD : UpdateEntities +08:58:40.831 WORLD : Frame +08:58:40.831 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:58:40.971 WORLD : UpdateEntities +08:58:40.971 WORLD : PostFrame +08:58:40.971 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:58:40.971 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:58:40.994 RENDER : RENDER : ObjectsHeightMap::Build +08:58:40.994 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:58:41.159 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 165.098000 ms +08:58:41.165 PROFILING : ObjectsHeightMap::Build took: 170.724900 ms +08:58:42.353 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:58:42.359 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:58:42.359 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:58:42.368 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:58:42.369 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:58:42.379 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:58:42.379 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:58:42.384 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:58:42.394 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:58:42.395 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:58:42.396 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:58:42.397 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:58:42.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:58:42.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:58:42.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:58:42.401 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:58:42.402 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:58:42.402 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:58:42.402 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:58:42.402 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:58:42.402 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:58:42.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 +08:58:42.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:58:42.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:58:42.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 +08:58:42.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:58:42.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:58:42.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 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.405 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:43.074 WORLD : UpdateEntities +08:58:43.074 WORLD : AfterPostSimulate +08:58:43.074 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:58:43.107 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.107 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.108 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.108 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.359 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5683,7499.7> up=0.995167 +08:58:43.359 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.36388 angularSpeed=0.125462 +08:58:43.359 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:43.359 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6192,7501.98> +08:58:43.359 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3192,7501.98> terrainY=63.3148 tireTerrainGap=0.00442505 +08:58:43.359 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6192,7501.98> radius=0.3 bottom=<7012.07,63.3192,7501.98> fraction=0.474776 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00445175 +08:58:43.360 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6009,7497.72> +08:58:43.360 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1509,7497.72> terrainY=64.1552 tireTerrainGap=-0.00424957 +08:58:43.360 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6009,7497.72> radius=0.45 bottom=<7009.88,64.1509,7497.72> fraction=0.435466 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00419617 +08:58:43.360 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2667,7497.74> +08:58:43.360 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8167,7497.74> terrainY=63.818 tireTerrainGap=-0.00126266 +08:58:43.360 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2667,7497.74> radius=0.45 bottom=<7014.42,63.8167,7497.74> fraction=0.448611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00130463 +08:58:43.361 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:43.614 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:43.614 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:43.614 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.615 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:44.119 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:44.120 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.120 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.374 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.524,7499.71> up=0.993921 +08:58:44.374 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0532861 angularSpeed=0.0688037 +08:58:44.374 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:44.374 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6179,7501.99> +08:58:44.374 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3179,7501.99> terrainY=63.3144 tireTerrainGap=0.00348663 +08:58:44.375 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6179,7501.99> radius=0.3 bottom=<7012.06,63.3179,7501.99> fraction=0.470588 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00352859 +08:58:44.375 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6023,7497.72> +08:58:44.375 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1524,7497.72> terrainY=64.1503 tireTerrainGap=0.00205231 +08:58:44.375 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6023,7497.72> radius=0.45 bottom=<7009.91,64.1524,7497.72> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +08:58:44.375 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2645,7497.78> +08:58:44.375 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8145,7497.78> terrainY=63.8156 tireTerrainGap=-0.00112534 +08:58:44.376 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2645,7497.78> radius=0.45 bottom=<7014.46,63.8145,7497.78> fraction=0.449444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00112152 +08:58:44.376 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:44.880 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:58:45.131 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.131 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.132 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.132 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.387 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5347,7499.74> up=0.99377 +08:58:45.387 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0252265 angularSpeed=0.0313119 +08:58:45.387 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:45.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6145,7502.01> +08:58:45.388 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3145,7502.01> terrainY=63.3117 tireTerrainGap=0.00275421 +08:58:45.388 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6145,7502.01> radius=0.3 bottom=<7012.06,63.3145,7502.01> fraction=0.466889 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00271606 +08:58:45.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5959,7497.72> +08:58:45.388 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1459,7497.72> terrainY=64.1441 tireTerrainGap=0.00183868 +08:58:45.388 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5959,7497.72> radius=0.45 bottom=<7009.96,64.1459,7497.72> fraction=0.463004 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00186157 +08:58:45.389 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2606,7497.83> +08:58:45.389 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8106,7497.83> terrainY=63.8128 tireTerrainGap=-0.00216293 +08:58:45.389 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 +08:58:45.389 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:45.637 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:46.395 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993804 +08:58:46.395 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:58:46.395 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:46.395 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:58:46.396 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00178146 +08:58:46.396 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462716 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00179672 +08:58:46.396 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:58:46.396 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1423 tireTerrainGap=0.00241852 +08:58:46.396 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +08:58:46.396 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:58:46.397 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +08:58:46.397 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 +08:58:46.397 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:47.153 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.153 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.154 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.154 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.404 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993804 +08:58:47.404 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:58:47.404 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:47.404 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:58:47.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00178146 +08:58:47.405 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462716 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00179672 +08:58:47.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:58:47.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1423 tireTerrainGap=0.00241852 +08:58:47.405 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +08:58:47.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:58:47.406 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +08:58:47.406 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 +08:58:47.406 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:47.654 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.655 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:58:47.655 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:58:47.656 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:58:47.656 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:58:47.881 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:58:47.911 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:58:47.966 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.968 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.968 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:58:47.969 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:58:47.969 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:58:47.969 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:58:47.970 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:58:47.970 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.971 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.971 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:58:47.972 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:58:47.972 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:58:47.972 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:58:47.973 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:58:47.973 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:58:47.974 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:58:47.975 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +08:58:47.977 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +08:58:47.978 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +08:58:47.978 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +08:58:47.978 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +08:58:47.981 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +08:58:47.982 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +08:58:47.982 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:47.985 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:58:47.985 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:58:47.985 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:58:48.470 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:58:48.470 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:48.472 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:48.474 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:58:48.980 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:58:48.980 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:58:48.980 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:58:48.981 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:58:48.981 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:58:48.981 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:58:48.993 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:58:48.993 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:58:48.993 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:58:48.995 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:58:48.995 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:58:48.995 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:58:48.995 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:58:48.997 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:58:48.999 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:58:48.999 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:58:48.999 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:58:49.001 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:58:49.001 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:58:49.001 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:58:49.002 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:58:49.004 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:58:49.004 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:58:49.004 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:58:49.005 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:58:49.005 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:58:49.006 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:58:49.006 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:58:49.006 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:58:49.006 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:58:49.007 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:58:49.007 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:58:49.007 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:58:49.008 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:58:49.012 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:58:49.013 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:58:49.013 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:58:49.014 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:58:49.015 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:58:49.015 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:58:49.016 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:58:49.017 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:58:49.027 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:58:49.027 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:58:49.027 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:58:49.028 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:49.028 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:58:49.029 SCRIPT : ERR BASE STOCK: cache items=54 +08:58:49.029 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:58:49.029 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:58:49.029 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:58:49.029 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:58:49.029 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:58:49.031 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:58:49.033 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:58:49.034 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:58:49.034 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:58:49.034 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:49.037 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:58:49.037 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:58:49.037 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:49.038 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:49.038 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:49.038 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:49.038 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:58:49.038 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:58:55.036 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:59:01.106 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:59:01.106 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:59:01.106 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.95,174.698,7466.71> target=<6340,175.788,7400> +08:59:07.155 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:59:13.207 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:59:13.208 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:59:13.715 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:59:14.017 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:59:16.249 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:59:17.027 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:59:18.771 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:59:18.771 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:59:18.771 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:59:18.772 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:59:18.772 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:59:18.772 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:59:18.776 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:59:18.776 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:59:20.285 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:59:20.286 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:59:20.289 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:59:20.296 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:59:21.297 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:59:21.297 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:59:21.297 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:59:22.307 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506,159.313,7200> radio=<6500,159.756,7200> distanceXZ=6.00488 +08:59:22.308 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:59:23.319 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.04,159.67,7200.05> radio=<6500,159.756,7200> distanceXZ=2.03959 +08:59:23.320 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:59:24.331 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.67,7200.05> +08:59:25.350 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.67,7200.05> +08:59:26.355 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.53,7200.05> +08:59:26.862 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.04,159.53,7200.05> +08:59:26.862 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.0391 +08:59:26.862 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:59:26.863 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:59:26.863 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:59:26.863 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:59:27.865 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:59:28.883 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:59:28.883 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:59:29.906 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:59:30.916 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:59:31.931 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:59:32.936 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:59:33.953 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.667,7200.09> +08:59:34.977 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.528,7200.09> +08:59:35.488 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.08,159.528,7200.09> +08:59:35.488 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:59:36.504 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.23> +08:59:37.512 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.23> +08:59:38.022 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.73,159.873,7199.23> +08:59:38.022 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:59:39.034 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 +08:59:39.034 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:59:40.039 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:59:41.047 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:59:41.047 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:59:41.050 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:59:41.050 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:59:41.052 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:59:41.052 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:59:42.061 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:59:42.062 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00162404 +08:59:42.062 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:59:42.062 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:59:42.062 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:59:42.063 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:59:42.063 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:59:47.115 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:59:47.115 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:59:47.116 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:59:47.116 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:59:47.118 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:59:47.118 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +09:00:22.504 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +09:00:22.504 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +09:00:22.504 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +09:00:22.504 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +09:00:28.567 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +09:00:28.567 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +09:00:28.568 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +09:00:31.101 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +09:00:31.101 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +09:00:31.101 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +09:00:31.101 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +09:00:31.101 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +09:00:31.101 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +09:00:31.102 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +09:00:31.102 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +09:01:01.577 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +09:01:04.521 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +09:01:04.521 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +09:01:04.521 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +09:01:04.522 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +09:01:04.522 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +09:01:04.522 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +09:01:04.524 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +09:01:04.524 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +09:01:04.525 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +09:01:07.535 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +09:01:07.598 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +09:01:07.598 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +09:01:07.599 SCRIPT : ERR SMOKE COMPLETE: core-only escape +09:01:07.709 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +09:01:07.711 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +09:01:07.711 SCRIPT (W): Slot_Chat Has no Content! +09:01:07.711 SCRIPT (W): Slot_VON Has no Content! +09:01:07.711 SCRIPT (W): Slot_GameVersion Has no Content! +09:01:07.711 SCRIPT (W): Slot_Notifications Has no Content! +09:01:09.752 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +09:01:09.752 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +09:01:09.752 SCRIPT : -- Stack trace -- +09:01:09.752 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +09:01:09.753 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +09:01:09.753 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +09:01:09.753 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +09:01:09.753 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +09:01:09.753 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +09:01:09.753 SCRIPT : ----------------- +09:01:09.753 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +09:01:09.753 SCRIPT : -- Stack trace -- +09:01:09.754 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +09:01:09.754 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +09:01:09.754 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +09:01:09.754 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +09:01:09.754 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +09:01:09.754 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +09:01:09.754 SCRIPT : ----------------- +09:01:09.756 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +09:01:09.757 SCRIPT (W): Slot_Chat Has no Content! +09:01:09.757 SCRIPT (W): Slot_VON Has no Content! +09:01:09.757 SCRIPT (W): Slot_GameVersion Has no Content! +09:01:09.757 SCRIPT (W): Slot_Notifications Has no Content! +09:01:09.757 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-085442/error.log.txt b/docs/evidence/native-2026-09-19-085442/error.log.txt new file mode 100644 index 0000000..13bfb25 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/error.log.txt @@ -0,0 +1,200 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-54-42\error.log started at 2026-09-19 08:54:44 (2026-09-19 06:54:44 UTC) + +08:54:44.239 INIT : Workbench startup +08:54:44.239 INIT : Workbench Init Engine +08:54:44.239 RESOURCES : ResourceDB: full scan +08:54:44.239 RESOURCES : processing files... +08:54:44.239 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:54:44.239 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:54:44.239 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:54:47.389 INIT : Workbench Create Game +08:54:47.389 SCRIPT : Compiling Game scripts +08:54:47.389 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:54:47.389 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:54:47.528 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.641 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:54:47.672 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:54:47.802 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:54:47.866 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:54:47.867 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:54:47.868 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:54:47.909 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.909 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.911 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:54:47.911 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:54:47.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.967 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:54:56.652 WORLD : CreateEntities +08:54:56.652 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" +08:54:56.652 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:54:56.652 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:55:11.710 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:55:16.519 WORLD : Game::LoadEntities +08:55:16.519 WORLD : CreateEntities +08:55:16.519 WORLD : CreateEntities +08:55:16.519 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" +08:55:16.519 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:55:16.519 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:55:17.938 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:55:17.938 ENTITY : CreateComponent 'Hierarchy' +08:55:17.938 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>') +08:55:17.938 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:55:17.938 ENTITY : CreateComponent 'Hierarchy' +08:55:17.938 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>') +08:55:17.938 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:55:17.938 ENTITY : CreateComponent 'Hierarchy' +08:55:17.938 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>') +08:55:17.944 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:55:17.944 ENTITY : CreateComponent 'Hierarchy' +08:55:17.944 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>') +08:55:17.944 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:55:17.944 ENTITY : CreateComponent 'Hierarchy' +08:55:17.944 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>') +08:55:17.944 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:55:17.944 ENTITY : CreateComponent 'Hierarchy' +08:55:17.944 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>') +08:55:17.948 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:55:17.948 ENTITY : CreateComponent 'Hierarchy' +08:55:17.948 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>') +08:55:17.948 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:55:17.948 ENTITY : CreateComponent 'Hierarchy' +08:55:17.948 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>') +08:55:17.948 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:55:17.948 ENTITY : CreateComponent 'Hierarchy' +08:55:17.948 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>') +08:55:24.816 WORLD : InitEntities 'world' +08:55:24.816 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:55:24.816 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:55:25.302 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:55:25.302 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:55:25.302 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:55:25.302 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! +08:55:25.302 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! +08:55:25.304 SCRIPT (W): Can't open config file "" +08:55:25.310 WORLD : InitEntities 'world' +08:55:25.310 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:55:25.310 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:55:25.311 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:55:25.311 SCRIPT (W): Slot_Chat Has no Content! +08:55:25.311 SCRIPT (W): Slot_VON Has no Content! +08:55:25.311 SCRIPT (W): Slot_AvailableActions Has no Content! +08:55:25.311 SCRIPT (W): Slot_Vehicle Has no Content! +08:55:25.311 SCRIPT (W): Slot_GameVersion Has no Content! +08:55:25.311 SCRIPT (W): Slot_Notifications Has no Content! +08:55:25.312 SCRIPT (W): Slot_Hints Has no Content! +08:55:25.323 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:55:25.324 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:55:25.324 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:55:25.324 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. +08:55:25.324 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. +08:55:25.328 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:55:25.585 WORLD : UpdateEntities +08:55:25.585 WORLD : PostFrame +08:55:25.585 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:55:25.585 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:55:25.625 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:55:25.626 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:55:25.626 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:55:25.626 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:55:28.039 WORLD : UpdateEntities +08:55:28.039 WORLD : AfterPostSimulate +08:55:28.039 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:57:53.536 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:57:53.536 SCRIPT (W): Slot_Chat Has no Content! +08:57:53.536 SCRIPT (W): Slot_VON Has no Content! +08:57:53.536 SCRIPT (W): Slot_GameVersion Has no Content! +08:57:53.536 SCRIPT (W): Slot_Notifications Has no Content! +08:57:55.572 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:57:55.573 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:57:55.576 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:57:55.576 SCRIPT (W): Slot_Chat Has no Content! +08:57:55.576 SCRIPT (W): Slot_VON Has no Content! +08:57:55.576 SCRIPT (W): Slot_GameVersion Has no Content! +08:57:55.576 SCRIPT (W): Slot_Notifications Has no Content! +08:58:23.456 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:58:23.457 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:58:23.679 DEFAULT (W): Achievements cannot be saved. +08:58:23.679 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +08:58:32.090 WORLD : Game::LoadEntities +08:58:32.090 WORLD : CreateEntities +08:58:32.090 WORLD : CreateEntities 'world' +08:58:32.090 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" +08:58:32.090 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:58:32.090 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:58:33.466 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:58:33.466 ENTITY : CreateComponent 'Hierarchy' +08:58:33.466 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>') +08:58:33.466 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:58:33.466 ENTITY : CreateComponent 'Hierarchy' +08:58:33.466 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>') +08:58:33.466 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:58:33.466 ENTITY : CreateComponent 'Hierarchy' +08:58:33.466 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>') +08:58:33.470 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:58:33.470 ENTITY : CreateComponent 'Hierarchy' +08:58:33.470 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>') +08:58:33.471 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:58:33.471 ENTITY : CreateComponent 'Hierarchy' +08:58:33.471 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>') +08:58:33.471 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:58:33.471 ENTITY : CreateComponent 'Hierarchy' +08:58:33.471 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>') +08:58:33.475 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:58:33.475 ENTITY : CreateComponent 'Hierarchy' +08:58:33.475 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>') +08:58:33.475 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:58:33.475 ENTITY : CreateComponent 'Hierarchy' +08:58:33.475 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>') +08:58:33.475 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:58:33.475 ENTITY : CreateComponent 'Hierarchy' +08:58:33.475 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>') +08:58:40.150 WORLD : InitEntities 'world' +08:58:40.150 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:58:40.150 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:58:40.787 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:58:40.787 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:58:40.787 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:58:40.787 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! +08:58:40.788 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! +08:58:40.789 SCRIPT (W): Can't open config file "" +08:58:40.789 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:58:40.790 WORLD : InitEntities 'world' +08:58:40.790 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:58:40.790 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:58:40.791 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:58:40.791 SCRIPT (W): Slot_Chat Has no Content! +08:58:40.791 SCRIPT (W): Slot_VON Has no Content! +08:58:40.791 SCRIPT (W): Slot_AvailableActions Has no Content! +08:58:40.791 SCRIPT (W): Slot_Vehicle Has no Content! +08:58:40.791 SCRIPT (W): Slot_GameVersion Has no Content! +08:58:40.791 SCRIPT (W): Slot_Notifications Has no Content! +08:58:40.791 SCRIPT (W): Slot_Hints Has no Content! +08:58:40.796 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:58:40.796 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:58:40.796 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:58:40.796 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. +08:58:40.797 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. +08:58:40.971 WORLD : UpdateEntities +08:58:40.971 WORLD : PostFrame +08:58:40.971 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:58:40.971 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:58:43.074 WORLD : UpdateEntities +08:58:43.074 WORLD : AfterPostSimulate +08:58:43.074 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +09:01:07.711 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +09:01:07.711 SCRIPT (W): Slot_Chat Has no Content! +09:01:07.711 SCRIPT (W): Slot_VON Has no Content! +09:01:07.711 SCRIPT (W): Slot_GameVersion Has no Content! +09:01:07.711 SCRIPT (W): Slot_Notifications Has no Content! +09:01:09.752 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +09:01:09.753 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +09:01:09.756 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +09:01:09.757 SCRIPT (W): Slot_Chat Has no Content! +09:01:09.757 SCRIPT (W): Slot_VON Has no Content! +09:01:09.757 SCRIPT (W): Slot_GameVersion Has no Content! +09:01:09.757 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-085442/headless-launch.log.txt b/docs/evidence/native-2026-09-19-085442/headless-launch.log.txt new file mode 100644 index 0000000..f9d62ef --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/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: 115 +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555750c7220 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555750c7220 +[Gamescope WSI] Destroyed swapchain: 0x5555750c7220 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555750c7220 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555750c7220 +[Gamescope WSI] Destroyed swapchain: 0x5555750c7220 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x555575109bf0 - 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: 0x555575506790 - imageCount: 3 +[Gamescope WSI] Destroying swapchain: 0x555575506790 +[Gamescope WSI] Destroyed swapchain: 0x555575506790 +[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: 0x555575506790 - imageCount: 3 +[gamescope] [Error] xwm: X11 I/O error! This is fatal. Aborting... diff --git a/docs/evidence/native-2026-09-19-085442/launch-source-sha256.json b/docs/evidence/native-2026-09-19-085442/launch-source-sha256.json new file mode 100644 index 0000000..d8e3e4f --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/launch-source-sha256.json @@ -0,0 +1,168 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "0fdc087f57afbbe785cdea12810d9c63060d88a778dc90c470733c13e86da94f", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "0b2f115a7a7f817fde50f4bd0d8d89d7a9d5a83a3d6ae9c2723ce30e7bc41a6c", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "5a06f63e63c739ed4dbb81064491d0d259813a2052d40d30a95f67f71c966b82", + "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": "d7cc2a908df6a34897951a09f1edc4a90495fd1206840dc74e920edb8e4a6843", + "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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "f524f33d460bb72602f60b473f0c0d59f8a60f3e1e20d70d60d664fb85373837", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-085442/launch-source.json b/docs/evidence/native-2026-09-19-085442/launch-source.json new file mode 100644 index 0000000..fe4d155 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/launch-source.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "launch_id": "a96e9211-3456-4e63-95c7-97b117097620", + "captured_unix": 1789800880.9102829, + "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", + "-errStationTeardownDiag", + "1" + ], + "manifest_sha256": "87f2eb4ba8f4fc45d65b9150ae5344b224d69b90b01d550736ad5894592d07bc" +} diff --git a/docs/evidence/native-2026-09-19-085442/report.json b/docs/evidence/native-2026-09-19-085442/report.json new file mode 100644 index 0000000..17650d7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-085442/console.log.txt", + "smoke_completions": 2, + "assertions_passed": 586, + "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-085442/runner.json.txt b/docs/evidence/native-2026-09-19-085442/runner.json.txt new file mode 100644 index 0000000..95e6f6e --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789801274.5438855, + "console_sha256": "820d164ba335f3e33f75b17e900b29ce6ad619987b095fa740a9edf28c71d905", + "end_source_sha256": "87f2eb4ba8f4fc45d65b9150ae5344b224d69b90b01d550736ad5894592d07bc", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "a96e9211-3456-4e63-95c7-97b117097620", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "87f2eb4ba8f4fc45d65b9150ae5344b224d69b90b01d550736ad5894592d07bc", + "started_unix": 1789800880.9103527, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-54-42", + "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-085442/script.log.txt b/docs/evidence/native-2026-09-19-085442/script.log.txt new file mode 100644 index 0000000..a4214ec --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/script.log.txt @@ -0,0 +1,1086 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-54-42\script.log started at 2026-09-19 08:54:45 (2026-09-19 06:54:45 UTC) + +08:54:45.298 SCRIPT : SCRIPT : Initializing scripts +08:54:45.298 SCRIPT : SCRIPT : ScriptProjectManager init +08:54:46.228 SCRIPT : SCRIPT : Compiling GameLib scripts +08:54:46.287 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 +08:54:46.288 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 +08:54:46.288 SCRIPT : SCRIPT : Compiling Game scripts +08:54:47.389 SCRIPT : Compiling Game scripts +08:54:47.389 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:54:47.389 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:54:47.528 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.641 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:54:47.672 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:54:47.769 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:54:47.802 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:54:47.866 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:54:47.867 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:54:47.868 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:54:47.909 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.909 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.911 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:54:47.911 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:54:47.936 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:54:47.967 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:54:48.227 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 +08:54:48.234 SCRIPT : Module: Game; loaded 5735x files; 11239x classes; used 32907K 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: 8599e6b7 +08:54:49.172 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:54:49.172 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:55:08.477 SCRIPT : ERR SITE SURVEY: supply=6150/7050 elevationRange=0.625 min=202.875 max=203.5 +08:55:11.706 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:55:11.706 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:55:24.816 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:55:24.842 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:55:25.302 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! +08:55:25.303 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! +08:55:25.304 SCRIPT (W): Can't open config file "" +08:55:25.311 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:55:25.311 SCRIPT (W): Slot_Chat Has no Content! +08:55:25.311 SCRIPT (W): Slot_VON Has no Content! +08:55:25.311 SCRIPT (W): Slot_AvailableActions Has no Content! +08:55:25.311 SCRIPT (W): Slot_Vehicle Has no Content! +08:55:25.311 SCRIPT (W): Slot_GameVersion Has no Content! +08:55:25.311 SCRIPT (W): Slot_Notifications Has no Content! +08:55:25.312 SCRIPT (W): Slot_Hints Has no Content! +08:55:25.324 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. +08:55:25.324 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. +08:55:25.328 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:55:25.369 SCRIPT : ERR STATION INIT OWNERSHIP: n=1 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:55:25.370 SCRIPT : ERR STATION INIT OWNERSHIP: n=2 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:55:25.383 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:55:25.395 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:55:25.585 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:55:27.094 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:55:27.124 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:55:27.125 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:55:27.159 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:55:27.164 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:55:27.215 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:55:27.215 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:55:27.221 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:55:27.269 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:55:27.270 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:55:27.271 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:55:27.272 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:55:27.275 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:55:27.276 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:55:27.276 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:55:27.278 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:55:27.278 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:55:27.278 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:55:27.279 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:55:27.279 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:55:27.279 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:55:27.279 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 +08:55:27.279 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:55:27.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:55:27.280 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 +08:55:27.280 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:55:27.280 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:55:27.280 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 +08:55:27.280 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:27.281 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:55:28.111 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.111 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.112 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.112 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.367 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5287,7499.7> up=0.995678 +08:55:28.367 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +08:55:28.368 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:28.368 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6134,7501.97> +08:55:28.368 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3134,7501.97> terrainY=63.3165 tireTerrainGap=-0.00303268 +08:55:28.368 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6134,7501.97> radius=0.3 bottom=<7012.07,63.3134,7501.97> fraction=0.441143 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00294876 +08:55:28.368 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6009,7497.71> +08:55:28.368 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1509,7497.71> terrainY=64.1556 tireTerrainGap=-0.00471497 +08:55:28.369 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6009,7497.71> radius=0.45 bottom=<7009.88,64.1509,7497.71> fraction=0.432978 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00474548 +08:55:28.369 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2629,7497.74> +08:55:28.369 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8129,7497.74> terrainY=63.8179 tireTerrainGap=-0.00495529 +08:55:28.369 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2629,7497.74> radius=0.45 bottom=<7014.42,63.8129,7497.74> fraction=0.431944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00497055 +08:55:28.369 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:28.622 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:28.622 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:28.623 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:28.623 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:55:29.127 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.127 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.128 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.450 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5347,7499.71> up=0.994334 +08:55:29.450 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:55:29.451 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:29.451 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6187,7501.99> +08:55:29.451 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3187,7501.99> terrainY=63.3146 tireTerrainGap=0.00413132 +08:55:29.451 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6187,7501.99> radius=0.3 bottom=<7012.07,63.3187,7501.99> fraction=0.473389 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00414658 +08:55:29.451 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.602,7497.71> +08:55:29.451 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.152,7497.71> terrainY=64.149 tireTerrainGap=0.00299072 +08:55:29.452 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.602,7497.71> radius=0.45 bottom=<7009.93,64.152,7497.71> fraction=0.468312 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00302887 +08:55:29.452 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2647,7497.78> +08:55:29.452 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8147,7497.78> terrainY=63.8155 tireTerrainGap=-0.000751495 +08:55:29.452 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2647,7497.78> radius=0.45 bottom=<7014.47,63.8147,7497.78> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:55:29.452 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:55:29.453 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.944 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:29.945 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:55:30.454 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5312,7499.74> up=0.994218 +08:55:30.454 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +08:55:30.455 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:30.455 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6139,7502.01> +08:55:30.455 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3139,7502.01> terrainY=63.3115 tireTerrainGap=0.00248337 +08:55:30.455 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6139,7502.01> radius=0.3 bottom=<7012.08,63.3139,7502.01> fraction=0.465776 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00247192 +08:55:30.455 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5952,7497.72> +08:55:30.455 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1452,7497.72> terrainY=64.1427 tireTerrainGap=0.00242615 +08:55:30.456 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5952,7497.72> radius=0.45 bottom=<7009.97,64.1452,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +08:55:30.456 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2605,7497.83> +08:55:30.456 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8105,7497.83> terrainY=63.8127 tireTerrainGap=-0.00218582 +08:55:30.456 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2605,7497.83> radius=0.45 bottom=<7014.51,63.8105,7497.83> fraction=0.444444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00222015 +08:55:30.456 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:30.456 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.457 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.457 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.457 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:30.961 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:30.961 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:30.962 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:30.962 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:55:31.474 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:55:31.474 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:55:31.475 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:55:31.475 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:55:31.475 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00168991 +08:55:31.475 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 +08:55:31.475 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:55:31.475 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00254822 +08:55:31.476 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 +08:55:31.476 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:55:31.476 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.0018959 +08:55:31.476 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 +08:55:31.476 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:31.477 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:55:32.003 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.004 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.004 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.004 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.258 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:55:32.258 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:55:32.259 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:55:32.259 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:55:32.260 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:55:32.638 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:55:32.681 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:55:32.900 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:55:32.901 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.901 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.902 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:55:32.902 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:55:32.902 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:55:32.903 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:55:32.903 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.903 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:55:32.903 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:55:32.904 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:55:32.904 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.904 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:55:32.905 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:55:32.905 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:55:32.905 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:55:32.906 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:55:32.906 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.906 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:55:32.907 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:55:32.907 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:55:32.907 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:55:32.908 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:55:32.908 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:55:32.908 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +08:55:32.926 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +08:55:32.927 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +08:55:32.928 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +08:55:32.928 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +08:55:32.928 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +08:55:32.929 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +08:55:32.929 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +08:55:32.929 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:32.932 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:55:32.932 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:55:32.932 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:32.933 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:55:32.934 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:55:32.934 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:55:33.408 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:55:33.408 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:33.411 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:33.412 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:33.412 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:33.412 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:55:33.915 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:55:33.916 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:55:33.918 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:55:33.918 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:55:33.918 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:55:33.919 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:55:33.922 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:55:33.923 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:55:33.925 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:55:33.926 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:55:33.927 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:55:33.927 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:55:33.927 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:55:33.928 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:55:33.928 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:55:33.929 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:55:33.930 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:55:33.930 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:55:33.931 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:55:33.932 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:55:33.932 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:55:33.932 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:55:33.932 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:55:33.933 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:55:33.936 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:55:33.939 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:55:33.939 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:55:33.939 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:55:33.939 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:55:33.940 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:55:33.940 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:55:33.940 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:55:33.940 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:55:33.940 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:55:33.940 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:55:33.940 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:55:33.941 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:55:33.941 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:55:33.941 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:55:33.942 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:55:33.946 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:55:33.947 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:55:33.948 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:55:33.948 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:55:33.949 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:55:33.950 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:55:33.950 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:55:33.951 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:55:33.951 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:55:33.952 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:55:33.952 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:55:33.952 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:55:33.959 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:55:33.959 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:55:33.959 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:55:33.959 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:33.960 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:33.960 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:55:33.960 SCRIPT : ERR BASE STOCK: cache items=54 +08:55:33.960 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:55:33.961 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:55:33.961 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:55:33.961 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:55:33.961 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:55:33.963 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:55:33.965 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:55:33.965 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:55:33.965 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:55:33.965 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:55:33.967 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:55:33.968 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:55:33.968 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:55:33.969 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:55:40.011 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:55:46.068 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:55:46.069 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:55:46.069 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.32,174.682,7466.38> target=<6340,175.788,7400> +08:55:52.119 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:55:58.191 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:55:58.191 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:55:58.697 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:55:58.798 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:56:01.225 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:56:03.763 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:56:03.764 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:56:03.767 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:56:03.767 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:56:05.289 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:56:05.289 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:56:05.292 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:56:05.298 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:56:06.294 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:56:06.295 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:56:06.295 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:56:07.321 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506.01,159.313,7200.01> radio=<6500,159.756,7200> distanceXZ=6.00537 +08:56:07.322 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:56:08.330 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.05,159.668,7200.02> radio=<6500,159.756,7200> distanceXZ=2.04993 +08:56:08.330 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:56:09.342 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.669,7200.02> +08:56:10.352 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.67,7200.02> +08:56:11.365 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.05,159.529,7200.02> +08:56:11.874 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.05,159.529,7200.02> +08:56:11.875 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.04993 +08:56:11.875 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:56:11.875 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:56:11.875 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:56:11.875 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:56:12.888 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:56:13.890 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:56:13.890 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:56:14.902 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:56:15.914 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:56:16.921 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:56:17.929 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:56:18.946 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.09,159.667,7200.06> +08:56:19.953 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.09,159.527,7200.06> +08:56:20.460 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.09,159.527,7200.06> +08:56:20.461 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:56:21.482 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.24> +08:56:22.503 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.24> +08:56:23.003 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.73,159.873,7199.24> +08:56:23.003 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:56:24.013 SCRIPT : ERR RADIO POSITION: outside defence radius after deferred teleport actor=<6560.49,155.594,7199.99> radio=<6500,159.756,7200> distanceXZ=60.4946 +08:56:24.013 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:56:25.031 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:56:26.033 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:56:26.034 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:56:26.037 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:56:26.037 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:56:26.039 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:56:26.040 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:56:27.042 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:56:27.042 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.0023505 +08:56:27.042 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:56:27.042 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:56:27.043 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:56:27.044 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:56:27.044 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:56:32.085 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:56:32.085 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:56:32.085 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:56:32.086 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:56:32.088 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:56:32.088 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:56:32.088 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:56:32.089 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:56:32.089 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:56:32.089 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:57:07.414 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +08:57:07.415 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +08:57:07.415 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +08:57:07.415 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +08:57:13.504 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +08:57:13.504 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +08:57:13.504 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +08:57:16.035 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +08:57:16.036 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +08:57:16.036 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:57:16.036 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:57:46.400 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:57:49.435 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +08:57:49.435 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +08:57:49.435 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +08:57:49.435 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +08:57:49.435 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +08:57:49.435 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:57:49.438 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:57:49.438 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:57:49.438 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:57:49.439 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:57:49.439 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:57:49.439 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:57:49.439 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +08:57:52.472 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +08:57:53.438 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:57:53.438 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +08:57:53.438 SCRIPT : ERR SMOKE COMPLETE: core-only escape +08:57:53.534 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:57:53.536 SCRIPT (W): Slot_Chat Has no Content! +08:57:53.536 SCRIPT (W): Slot_VON Has no Content! +08:57:53.536 SCRIPT (W): Slot_GameVersion Has no Content! +08:57:53.536 SCRIPT (W): Slot_Notifications Has no Content! +08:57:55.572 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:57:55.572 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:57:55.572 SCRIPT : -- Stack trace -- +08:57:55.572 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:57:55.572 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:57:55.572 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:57:55.573 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:57:55.573 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:57:55.573 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:57:55.573 SCRIPT : ----------------- +08:57:55.573 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:57:55.573 SCRIPT : -- Stack trace -- +08:57:55.573 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:57:55.573 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:57:55.574 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:57:55.574 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:57:55.574 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:57:55.574 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:57:55.574 SCRIPT : ----------------- +08:57:55.576 SCRIPT (W): Slot_Chat Has no Content! +08:57:55.576 SCRIPT (W): Slot_VON Has no Content! +08:57:55.576 SCRIPT (W): Slot_GameVersion Has no Content! +08:57:55.576 SCRIPT (W): Slot_Notifications Has no Content! +08:57:55.578 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:58:23.456 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:58:23.457 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:58:27.087 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=1 owner= prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:58:27.092 SCRIPT : string detail = 'ERR STATION TEARDOWN DIAG: n=2 owner= prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et cachedCatalog=1 globalCatalog=1 modePresent=0 gameState=-1 errPhase=-1 endData=0 call=OnDelete/InitValidSetup initSeen=1 initMode=1 initMainWorld=0 initSiteOwned=0 initInInventory=1 initParentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et deleteMainWorld=0 deleteSiteOwned=0 deleteInInventory=1 deleteParentPrefab=' +08:58:40.150 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:58:40.151 SCRIPT : ERR BASE SMOKE: core-only scripted escape; not manual or multiplayer acceptance +08:58:40.787 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! +08:58:40.788 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! +08:58:40.789 SCRIPT (W): Can't open config file "" +08:58:40.789 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:58:40.791 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:58:40.791 SCRIPT (W): Slot_Chat Has no Content! +08:58:40.791 SCRIPT (W): Slot_VON Has no Content! +08:58:40.791 SCRIPT (W): Slot_AvailableActions Has no Content! +08:58:40.791 SCRIPT (W): Slot_Vehicle Has no Content! +08:58:40.791 SCRIPT (W): Slot_GameVersion Has no Content! +08:58:40.791 SCRIPT (W): Slot_Notifications Has no Content! +08:58:40.791 SCRIPT (W): Slot_Hints Has no Content! +08:58:40.796 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. +08:58:40.797 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. +08:58:40.807 SCRIPT : ERR STATION INIT OWNERSHIP: n=3 prefab={AE578EEA4244D41F}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_US.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={4805E67E2AE30F8D}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_M5.et +08:58:40.807 SCRIPT : ERR STATION INIT OWNERSHIP: n=4 prefab={21EF98BFC1EB3793}Prefabs/Items/Equipment/Kits/MedicalKit_01/MedicalKit_01_USSR.et modePresent=1 mainWorld=0 siteOwned=0 inInventory=1 parentPrefab={7AC107CA7AFC9B59}Prefabs/Items/Equipment/Backpacks/Backpack_Medical_Soviet.et +08:58:40.818 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:58:40.831 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:58:40.971 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:58:42.353 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:58:42.359 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:58:42.359 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:58:42.368 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:58:42.369 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:58:42.379 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:58:42.379 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:58:42.384 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:58:42.394 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:58:42.395 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:58:42.396 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:58:42.397 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:58:42.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:58:42.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:58:42.400 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:58:42.401 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:58:42.402 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:58:42.402 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:58:42.402 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:58:42.402 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:58:42.402 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:58:42.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 +08:58:42.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:58:42.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:58:42.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 +08:58:42.403 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:58:42.403 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:58:42.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 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.404 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:42.405 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:58:43.107 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.107 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.108 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.108 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.359 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5683,7499.7> up=0.995167 +08:58:43.359 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.36388 angularSpeed=0.125462 +08:58:43.359 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:43.359 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6192,7501.98> +08:58:43.359 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3192,7501.98> terrainY=63.3148 tireTerrainGap=0.00442505 +08:58:43.360 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6192,7501.98> radius=0.3 bottom=<7012.07,63.3192,7501.98> fraction=0.474776 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00445175 +08:58:43.360 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6009,7497.72> +08:58:43.360 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1509,7497.72> terrainY=64.1552 tireTerrainGap=-0.00424957 +08:58:43.360 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6009,7497.72> radius=0.45 bottom=<7009.88,64.1509,7497.72> fraction=0.435466 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00419617 +08:58:43.360 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2667,7497.74> +08:58:43.360 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8167,7497.74> terrainY=63.818 tireTerrainGap=-0.00126266 +08:58:43.360 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2667,7497.74> radius=0.45 bottom=<7014.42,63.8167,7497.74> fraction=0.448611 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00130463 +08:58:43.361 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:43.614 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:43.614 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:43.614 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:43.615 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:58:44.119 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:44.120 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.120 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.374 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.524,7499.71> up=0.993921 +08:58:44.374 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0532861 angularSpeed=0.0688037 +08:58:44.374 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:44.374 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6179,7501.99> +08:58:44.374 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3179,7501.99> terrainY=63.3144 tireTerrainGap=0.00348663 +08:58:44.375 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6179,7501.99> radius=0.3 bottom=<7012.06,63.3179,7501.99> fraction=0.470588 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00352859 +08:58:44.375 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6023,7497.72> +08:58:44.375 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1524,7497.72> terrainY=64.1503 tireTerrainGap=0.00205231 +08:58:44.375 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6023,7497.72> radius=0.45 bottom=<7009.91,64.1524,7497.72> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +08:58:44.375 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2645,7497.78> +08:58:44.375 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8145,7497.78> terrainY=63.8156 tireTerrainGap=-0.00112534 +08:58:44.376 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2645,7497.78> radius=0.45 bottom=<7014.46,63.8145,7497.78> fraction=0.449444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00112152 +08:58:44.376 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:58:44.629 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:44.880 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:58:45.131 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.131 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.132 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.132 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:58:45.387 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5347,7499.74> up=0.99377 +08:58:45.387 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0252265 angularSpeed=0.0313119 +08:58:45.387 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:45.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6145,7502.01> +08:58:45.388 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3145,7502.01> terrainY=63.3117 tireTerrainGap=0.00275421 +08:58:45.388 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6145,7502.01> radius=0.3 bottom=<7012.06,63.3145,7502.01> fraction=0.466889 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00271606 +08:58:45.388 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.5959,7497.72> +08:58:45.388 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.1459,7497.72> terrainY=64.1441 tireTerrainGap=0.00183868 +08:58:45.388 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.5959,7497.72> radius=0.45 bottom=<7009.96,64.1459,7497.72> fraction=0.463004 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00186157 +08:58:45.389 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.2606,7497.83> +08:58:45.389 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.8106,7497.83> terrainY=63.8128 tireTerrainGap=-0.00216293 +08:58:45.389 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 +08:58:45.389 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:45.638 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.144 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:58:46.395 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993804 +08:58:46.395 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:58:46.395 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:46.395 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:58:46.396 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00178146 +08:58:46.396 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462716 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00179672 +08:58:46.396 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:58:46.396 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1423 tireTerrainGap=0.00241852 +08:58:46.396 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +08:58:46.396 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:58:46.397 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +08:58:46.397 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 +08:58:46.397 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.649 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:46.650 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:58:47.153 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.153 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.154 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.154 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.404 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993804 +08:58:47.404 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:58:47.404 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:58:47.404 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:58:47.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00178146 +08:58:47.405 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462716 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00179672 +08:58:47.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:58:47.405 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1423 tireTerrainGap=0.00241852 +08:58:47.405 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.465769 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00247192 +08:58:47.405 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:58:47.406 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8121 tireTerrainGap=-0.00188065 +08:58:47.406 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 +08:58:47.406 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:58:47.654 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:58:47.655 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:58:47.655 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:58:47.656 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:58:47.656 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:58:47.881 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:58:47.911 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:58:47.966 SCRIPT : ERR SMOKE PASS: faction-catalog active authority available +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog native faction manager exists +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog mission retains US and USSR faction identities +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog mutual enemy and same-faction relations preserved +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog native radio encryption and frequencies preserved +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog native faction callsign configurations resolve +08:58:47.967 SCRIPT : ERR SMOKE PASS: faction-catalog US retains all six catalog types +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog US has exactly two supported vehicle entries +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.968 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.968 SCRIPT : ERR FACTION VEHICLE: faction=US prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:58:47.968 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists CHARACTER +08:58:47.969 SCRIPT : ERR FACTION RETAINED: faction=US type=CHARACTER entries=78 +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists GROUP +08:58:47.969 SCRIPT : ERR FACTION RETAINED: faction=US type=GROUP entries=25 +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists WEAPONS_TRIPOD +08:58:47.969 SCRIPT : ERR FACTION RETAINED: faction=US type=WEAPONS_TRIPOD entries=3 +08:58:47.969 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists ITEM +08:58:47.970 SCRIPT : ERR FACTION RETAINED: faction=US type=ITEM entries=187 +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog US non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:58:47.970 SCRIPT : ERR FACTION RETAINED: faction=US type=SUPPLY_CONTAINER_ITEM entries=0 +08:58:47.970 SCRIPT : ERR SMOKE PASS: faction-catalog USSR retains all six catalog types +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog USSR has exactly two supported vehicle entries +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.971 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={259EE7B78C51B624}Prefabs/Vehicles/Wheeled/UAZ469/UAZ469.et +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog vehicle entry exists +08:58:47.971 SCRIPT : ERR FACTION VEHICLE: faction=USSR prefab={DF5CCB7C0FF049F4}Prefabs/Vehicles/Helicopters/Mi8MT/Mi8MT_unarmed_transport.et +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog catalog lookup resolves both unique mission vehicles +08:58:47.971 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists CHARACTER +08:58:47.972 SCRIPT : ERR FACTION RETAINED: faction=USSR type=CHARACTER entries=120 +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists GROUP +08:58:47.972 SCRIPT : ERR FACTION RETAINED: faction=USSR type=GROUP entries=55 +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.972 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists WEAPONS_TRIPOD +08:58:47.972 SCRIPT : ERR FACTION RETAINED: faction=USSR type=WEAPONS_TRIPOD entries=4 +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists ITEM +08:58:47.973 SCRIPT : ERR FACTION RETAINED: faction=USSR type=ITEM entries=166 +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog retained native content catalog is initialized and nonempty +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog USSR non-vehicle catalog exists SUPPLY_CONTAINER_ITEM +08:58:47.973 SCRIPT : ERR FACTION RETAINED: faction=USSR type=SUPPLY_CONTAINER_ITEM entries=0 +08:58:47.973 SCRIPT : ERR SMOKE PASS: faction-catalog US native dressing saline and backpack radio remain catalogued +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog USSR native dressing saline and backpack radio remain catalogued +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog global catalog manager retains faction vehicle and inventory access +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog physical finite depot vehicle is supported UAZ +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog physical extraction aircraft is supported Mi8 +08:58:47.974 SCRIPT : ERR SMOKE PASS: faction-catalog physical aircraft still has required capacity +08:58:47.974 SCRIPT : ERR FACTION RESULT: successor faction catalog scope and retained native support; no driving or multiplayer claim +08:58:47.975 SCRIPT : ERR SMOKE PASS: discovery map native local controller and marker manager available +08:58:47.977 SCRIPT : ERR SMOKE PASS: discovery map native baseline label rendered in actual hidden marker layout +08:58:47.978 SCRIPT : ERR SMOKE PASS: discovery map native data-only setter reproduces stale already-open label +08:58:47.978 SCRIPT : ERR SMOKE PASS: discovery map plain local marker exposes native delete/edit/drag eligibility +08:58:47.978 SCRIPT : ERR SMOKE PASS: discovery map local insertion retains objective identity and disables native edit/drag/delete eligibility +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map objective first label rendered through actual native layout +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map identification refreshes existing native widget without recreating marker +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map label change creates no additional marker +08:58:47.980 SCRIPT : ERR SMOKE PASS: discovery map closed widget accepts data-only update safely +08:58:47.981 SCRIPT : ERR SMOKE PASS: discovery map new native widget renders latest saved label +08:58:47.982 SCRIPT : ERR SMOKE PASS: discovery map owned probe widgets and markers removed; mission markers preserved +08:58:47.982 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:47.984 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:47.985 SCRIPT : ERR SMOKE PASS: objective UI rebinding keeps one subscription to each native task event +08:58:47.985 SCRIPT : ERR SMOKE PASS: objective UI closing native widget uses production detach and releases its task +08:58:47.985 SCRIPT : ERR SMOKE PASS: objective UI closed native widget receives no task callbacks +08:58:48.470 SCRIPT : ERR SMOKE PASS: objective UI closed native widget has no delayed overflow callbacks +08:58:48.470 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:48.472 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:48.473 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:48.474 SCRIPT : ERR SMOKE PASS: objective UI details reopen through native layout and current objective binding +08:58:48.980 SCRIPT : ERR SMOKE PASS: admin settings native Core command service and settings ready +08:58:48.980 SCRIPT : ERR SMOKE PASS: admin settings actual unauthorized command cannot mutate discovery +08:58:48.980 SCRIPT : ERR SMOKE PASS: admin settings actual Core alias dispatches without Chat +08:58:48.981 SCRIPT : ERR SMOKE PASS: admin settings actual dispatch rejects out-of-range value with guidance +08:58:48.981 SCRIPT : ERR SMOKE PASS: admin settings actual Core help describes physical document progression +08:58:48.981 SCRIPT : ERR SMOKE PASS: admin settings disposable fixture filenames are unused +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 0 +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:58:48.983 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:58:48.984 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 100 +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:58:48.987 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:58:48.988 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings authorized setting handler accepts normalized value 15 +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings discovery probability survives native JSON reload +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: supportSquadLimit +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: reportIntervalSeconds +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: timeMultiplier +08:58:48.991 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: responseRadiusMetres +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: aiIntelChancePercent +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startTimeMinutes +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: startDateCode +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: weatherProfile +08:58:48.992 SCRIPT : ERR SMOKE PASS: admin settings unrelated setting preserved: radioDefenceSeconds +08:58:48.993 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: -1 +08:58:48.993 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 101 +08:58:48.993 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 1.5 +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 100junk +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings invalid input preserves live and stored value: 999999 +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings help explains exact versus rough discovery and apply timing +08:58:48.994 SCRIPT : ERR SMOKE PASS: admin settings existing radio alias and response remain intact +08:58:48.995 SCRIPT : ERR SMOKE PASS: admin settings fixture removed its files and never changed actual mission settings +08:58:48.995 SCRIPT : ERR SMOKE PASS: definition authored configuration resolves +08:58:48.995 SCRIPT : ERR SMOKE PASS: definition duplicate site identity rejected +08:58:48.995 SCRIPT : ERR SMOKE PASS: definition dangling document target rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition non-radio document target rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition insufficient guaranteed radio clues rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition unbounded stock rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition unguaranteed clue route rejected +08:58:48.996 SCRIPT : ERR SMOKE PASS: definition radio sources sharing one footprint rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition unnamed location rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition radio identification beyond eight metres rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition close physical radio identification allowed +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition escape cannot reveal the radio directly +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition unbounded scenery offset rejected +08:58:48.997 SCRIPT : ERR SMOKE PASS: definition valid configuration restored after isolated mutations +08:58:48.997 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:58:48.998 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:58:48.999 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:58:48.999 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:58:48.999 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:58:49.001 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:58:49.001 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:58:49.001 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:58:49.002 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:58:49.004 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:58:49.004 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:58:49.004 SCRIPT : ERR COVER GEOMETRY: low=<6738.99,140.839,7295.42> high=<6740.98,141.655,7296.62> trace=0.377114 +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:58:49.005 SCRIPT : ERR COVER GEOMETRY: low=<6735.42,140.901,7299.02> high=<6736.62,141.718,7301.01> trace=0.377114 +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier is upright +08:58:49.005 SCRIPT : ERR COVER GEOMETRY: low=<6743.42,140.214,7299.02> high=<6744.62,141.03,7301.01> trace=0.377114 +08:58:49.005 SCRIPT : ERR SMOKE PASS: base outpost barrier has physical collision +08:58:49.006 SCRIPT : ERR SMOKE PASS: base exactly three authored outpost barriers exist +08:58:49.006 SCRIPT : ERR SMOKE PASS: mission time clock parsing includes midnight and final minute +08:58:49.006 SCRIPT : ERR SMOKE PASS: mission time malformed clock commands rejected +08:58:49.006 SCRIPT : ERR SMOKE PASS: mission time isolated fixture paths unused +08:58:49.007 SCRIPT : ERR SMOKE PASS: mission time legacy fixture created +08:58:49.007 SCRIPT : ERR SMOKE PASS: mission time existing six-key settings preserved +08:58:49.007 SCRIPT : ERR SMOKE PASS: mission time only absent time settings receive defaults +08:58:49.008 SCRIPT : ERR SMOKE PASS: mission time loading does not rewrite legacy file +08:58:49.012 SCRIPT : ERR SMOKE PASS: mission time explicit save upgrades valid legacy settings +08:58:49.013 SCRIPT : ERR SMOKE PASS: mission time new keys and old values survive reload +08:58:49.013 SCRIPT : ERR SMOKE PASS: mission time present out-of-range time cannot silently default +08:58:49.014 SCRIPT : ERR SMOKE PASS: mission time fractional clock setting rejected +08:58:49.015 SCRIPT : ERR SMOKE PASS: mission time zero multiplier rejected +08:58:49.015 SCRIPT : ERR SMOKE PASS: mission time missing legacy setting remains invalid +08:58:49.016 SCRIPT : ERR SMOKE PASS: mission time partially upgraded file defaults only missing new field +08:58:49.017 SCRIPT : ERR SMOKE PASS: mission time valid saved backup recovers invalid primary +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time server starts world clock before prison phase +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time engine progression matches applied multiplier +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time unauthorized clock mutation rejected +08:58:49.018 SCRIPT : ERR SMOKE PASS: mission time invalid clock command preserves setting +08:58:49.027 SCRIPT : ERR SMOKE PASS: mission time authorized settings persist and test restores originals +08:58:49.027 SCRIPT : ERR SMOKE PASS: mission time saved changes and repeated start leave current clock and speed intact +08:58:49.027 SCRIPT : ERR SMOKE PASS: mission time admin sees current clock separately from next round settings +08:58:49.028 SCRIPT : ERR SMOKE PASS: base native prison objective exists +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:49.028 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:49.028 SCRIPT : ERR SMOKE PASS: base authored supply cache is a separate scavenging location +08:58:49.029 SCRIPT : ERR BASE STOCK: cache items=54 +08:58:49.029 SCRIPT : ERR SMOKE PASS: base cache holds finite physical equipment and objective documents +08:58:49.029 SCRIPT : ERR SMOKE PASS: base no companion HQ or support controller loaded +08:58:49.029 SCRIPT : ERR SMOKE PASS: base prisoner spawned in authored prison +08:58:49.029 SCRIPT : ERR SMOKE PASS: base gate, clues, radio and helicopter created by core +08:58:49.029 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:58:49.031 SCRIPT : ERR SMOKE PASS: base gate action begins escape +08:58:49.033 SCRIPT : ERR SMOKE PASS: base test defence duration accepted +08:58:49.034 SCRIPT : ERR SMOKE PASS: base previous native objective completes on phase change +08:58:49.034 SCRIPT : ERR SMOKE PASS: base search objective does not expose a hidden site +08:58:49.034 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:58:49.037 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:58:49.037 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:58:49.037 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:58:49.038 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:58:49.038 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:58:49.038 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:58:49.038 SCRIPT : ERR SMOKE PASS: base both named supply routes revealed after escape +08:58:49.038 SCRIPT : ERR SMOKE PASS: base optional sites remain hidden until approached +08:58:55.036 SCRIPT : ERR SMOKE PASS: base unconscious player cannot discover optional sites +08:59:01.106 SCRIPT : ERR SMOKE PASS: base distant player cannot discover optional sites +08:59:01.106 SCRIPT : ERR SMOKE PASS: base isolated visibility obstacle created +08:59:01.106 SCRIPT : ERR VISIBILITY OBSTACLE: low=<6338.5,174.97,7403.87> high=<6341.5,178.737,7404.13> observer=<6340.95,174.698,7466.71> target=<6340,175.788,7400> +08:59:07.155 SCRIPT : ERR SMOKE PASS: base physical wall prevents nearby site discovery +08:59:13.207 SCRIPT : ERR SMOKE PASS: base conscious nearby player visually discovers named medical stash once +08:59:13.208 SCRIPT : ERR SMOKE PASS: base distant medical-site discovery does not reveal the radio +08:59:13.715 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:59:14.017 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:59:16.249 SCRIPT : ERR SMOKE PASS: base physical clue recovered +08:59:17.027 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:59:18.771 SCRIPT : ERR SMOKE PASS: base objective guidance reacts to discovered radio +08:59:18.771 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:59:18.771 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:59:18.772 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:59:18.772 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:59:18.772 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +08:59:18.776 SCRIPT : ERR SMOKE PASS: base discovery ticks do not repeat the location event +08:59:18.776 SCRIPT : ERR SMOKE PASS: base documents identify radio without Intel addon +08:59:20.285 SCRIPT : ERR SMOKE PASS: radio service identified radio and real controlled prisoner available +08:59:20.286 SCRIPT : ERR SMOKE PASS: radio service controlled prisoner supports native state restoration +08:59:20.289 SCRIPT : ERR SMOKE PASS: radio service isolated thirty-second duration saved +08:59:20.296 SCRIPT : ERR SMOKE PASS: radio service second physical defender spawned +08:59:21.297 SCRIPT : ERR SMOKE PASS: radio service second physical defender settles with simulated connection membership +08:59:21.297 SCRIPT : ERR SMOKE PASS: radio service ordinary AI cannot tune even while alive and nearby +08:59:21.297 SCRIPT : ERR SMOKE PASS: radio service missing radio rejected +08:59:22.307 SCRIPT : ERR RADIO POSITION: outside tuning range after deferred teleport actor=<6506,159.313,7200> radio=<6500,159.756,7200> distanceXZ=6.00488 +08:59:22.308 SCRIPT : ERR SMOKE PASS: radio service tuning outside five metres rejected +08:59:23.319 SCRIPT : ERR RADIO POSITION: unconscious tuning range after deferred teleport actor=<6502.04,159.67,7200.05> radio=<6500,159.756,7200> distanceXZ=2.03959 +08:59:23.320 SCRIPT : ERR SMOKE PASS: radio service unconscious prisoner cannot tune +08:59:24.331 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.67,7200.05> +08:59:25.350 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.67,7200.05> +08:59:26.355 SCRIPT : ERR RADIO RECOVERY: tuning prisoner waiting step=4 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.04,159.53,7200.05> +08:59:26.862 SCRIPT : ERR RADIO RECOVERY: tuning prisoner ready step=4 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.04,159.53,7200.05> +08:59:26.862 SCRIPT : ERR RADIO AUTH: active=1 phase=2 registered=1 kind=1 knowledge=2 serviceState=0 distance=2.0391 +08:59:26.862 SCRIPT : ERR RADIO AUTH: playerId=1 connected=1 usedLife=1 sameActor=1 friendly=1 canFight=1 canBegin=1 +08:59:26.863 SCRIPT : ERR SMOKE PASS: radio service registered friendly conscious prisoner remains authorized +08:59:26.863 SCRIPT : ERR SMOKE PASS: radio service unregistered defender cannot start the isolated service +08:59:26.863 SCRIPT : ERR SMOKE PASS: radio service physical defender has native faction affiliation +08:59:27.865 SCRIPT : ERR SMOKE PASS: radio service hostile controlled defender cannot tune +08:59:28.883 SCRIPT : ERR SMOKE PASS: radio service start event emitted once and duplicate start rejected +08:59:28.883 SCRIPT : ERR SMOKE PASS: radio service two conscious physical defenders share one timer +08:59:29.906 SCRIPT : ERR SMOKE PASS: radio service hostile actor cannot defend even with simulated connection membership +08:59:30.916 SCRIPT : ERR SMOKE PASS: radio service elapsed countdown does not emit redundant progress events +08:59:31.931 SCRIPT : ERR SMOKE PASS: radio service second defender preserves progress while first is unconscious +08:59:32.936 SCRIPT : ERR SMOKE PASS: radio service all unconscious defenders reset accumulated time +08:59:33.953 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.667,7200.09> +08:59:34.977 SCRIPT : ERR RADIO RECOVERY: first defender waiting step=11 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6502.08,159.528,7200.09> +08:59:35.488 SCRIPT : ERR RADIO RECOVERY: first defender ready step=11 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6502.08,159.528,7200.09> +08:59:35.488 SCRIPT : ERR SMOKE PASS: radio service conscious recovery starts a fresh continuous interval +08:59:36.504 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.23> +08:59:37.512 SCRIPT : ERR RADIO RECOVERY: second defender waiting step=12 alive=1 canFight=0 unconscious=1 lifeState=0 origin=<6497.73,159.873,7199.23> +08:59:38.022 SCRIPT : ERR RADIO RECOVERY: second defender ready step=12 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6497.73,159.873,7199.23> +08:59:38.022 SCRIPT : ERR SMOKE PASS: radio service empty server resets despite remaining character bodies +08:59:39.034 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 +08:59:39.034 SCRIPT : ERR SMOKE PASS: radio service outside sixty metres excludes first defender without resetting second +08:59:40.040 SCRIPT : ERR SMOKE PASS: radio service dead defender cannot maintain transmission +08:59:41.047 SCRIPT : ERR RADIO POSITION: returned to radio after deferred teleport actor=<6502,159.532,7200.01> radio=<6500,159.756,7200> distanceXZ=2.00489 +08:59:41.047 SCRIPT : ERR SMOKE PASS: radio service survivor returns physically before final transmission samples +08:59:41.050 SCRIPT : ERR SMOKE PASS: radio service live duration increase saved +08:59:41.050 SCRIPT : ERR SMOKE PASS: radio service live duration increase preserves accumulated occupancy +08:59:41.052 SCRIPT : ERR SMOKE PASS: radio service live duration reduction saved +08:59:41.052 SCRIPT : ERR SMOKE PASS: radio service live duration reduction completes at exact continuous boundary +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service completed service cannot restart or emit duplicate completion after stop +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service isolated cancellation service begins +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service stop cancels progress and future starts without completing +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service isolated terminal-phase service begins +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service terminal phase event prevents later completion +08:59:41.053 SCRIPT : ERR SMOKE PASS: radio service isolated event tests leave live objective ready for normal tuning +08:59:42.061 SCRIPT : ERR RADIO RECOVERY: restored prisoner ready step=90 alive=1 canFight=1 unconscious=0 lifeState=0 origin=<6501.99,159.532,7199.98> +08:59:42.062 SCRIPT : ERR RADIO RESTORE: actual=<6501.99,159.532,7199.98> original=<6501.99,159.533,7199.98> distance=0.00162404 +08:59:42.062 SCRIPT : ERR SMOKE PASS: radio service isolated test restores live duration and physical player state after a world frame +08:59:42.062 SCRIPT : ERR SMOKE PASS: base radio feedback remains inactive before tuning +08:59:42.062 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:59:42.063 SCRIPT : ERR SMOKE PASS: base identified radio accepts transmission +08:59:42.063 SCRIPT : ERR SMOKE PASS: base radio feedback publishes waiting before first occupancy sample +08:59:47.115 SCRIPT : ERR SMOKE PASS: base depleted stock stays empty when preparation is queried again +08:59:47.115 SCRIPT : ERR SMOKE PASS: base native objective reports advancing radio progress +08:59:47.116 SCRIPT : ERR SMOKE PASS: base radio guide reports transmitting without querying a countdown +08:59:47.116 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +08:59:47.118 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +08:59:47.118 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +08:59:47.119 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +09:00:22.504 SCRIPT : ERR SMOKE PASS: base unconscious survivor does not trigger defeat after the full grace period +09:00:22.504 SCRIPT : ERR SMOKE PASS: base unconscious radio defender cannot advance transmission +09:00:22.504 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after unconsciousness +09:00:22.504 SCRIPT : ERR SMOKE PASS: base unconscious player retains their body and camera +09:00:28.567 SCRIPT : ERR SMOKE PASS: base regaining consciousness resumes transmission from zero +09:00:28.567 SCRIPT : ERR SMOKE PASS: base radio guide returns to transmitting after recovery +09:00:28.568 SCRIPT : ERR SMOKE PASS: base regaining consciousness does not grant another life +09:00:31.101 SCRIPT : ERR SMOKE PASS: base lost supply cache is not replaced +09:00:31.101 SCRIPT : ERR SMOKE PASS: base objective reports interruption and reset +09:00:31.101 SCRIPT : ERR SMOKE PASS: base radio guide reports interruption after leaving the area +09:00:31.101 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +09:00:31.101 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +09:00:31.101 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +09:00:31.102 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +09:00:31.102 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +09:01:01.577 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +09:01:04.521 SCRIPT : ERR SMOKE PASS: base radio defence reveals extraction +09:01:04.521 SCRIPT : ERR SMOKE PASS: mission time clock advancement remains enabled +09:01:04.521 SCRIPT : ERR SMOKE PASS: mission time progression sampled across at least ten engine seconds +09:01:04.522 SCRIPT : ERR SMOKE PASS: mission time native clock advances at configured rate without periodic resets +09:01:04.522 SCRIPT : ERR SMOKE PASS: base radio feedback clears after completion +09:01:04.522 SCRIPT : ERR SMOKE PASS: objective UI current native task exists +09:01:04.524 SCRIPT : ERR SMOKE PASS: objective UI native list and detail layouts created +09:01:04.524 SCRIPT : ERR SMOKE PASS: objective UI native handlers attached +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI open list and details contain current title and instructions +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI list-only task cannot expose an undiscovered map position +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI actual local player receives the active objective +09:01:04.525 SCRIPT : ERR SMOKE PASS: objective UI extraction instructions follow a nondefault boundary +09:01:04.525 SCRIPT : ERR SMOKE PASS: base player physically boards extraction helicopter +09:01:07.535 SCRIPT : ERR SMOKE PASS: base extraction requires real occupancy +09:01:07.598 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +09:01:07.598 SCRIPT : ERR SMOKE PASS: base escape and restart reached without companion services +09:01:07.599 SCRIPT : ERR SMOKE COMPLETE: core-only escape +09:01:07.709 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +09:01:07.711 SCRIPT (W): Slot_Chat Has no Content! +09:01:07.711 SCRIPT (W): Slot_VON Has no Content! +09:01:07.711 SCRIPT (W): Slot_GameVersion Has no Content! +09:01:07.711 SCRIPT (W): Slot_Notifications Has no Content! +09:01:09.752 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +09:01:09.752 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +09:01:09.752 SCRIPT : -- Stack trace -- +09:01:09.752 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +09:01:09.753 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +09:01:09.753 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +09:01:09.753 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +09:01:09.753 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +09:01:09.753 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +09:01:09.753 SCRIPT : ----------------- +09:01:09.753 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +09:01:09.753 SCRIPT : -- Stack trace -- +09:01:09.754 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +09:01:09.754 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +09:01:09.754 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +09:01:09.754 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +09:01:09.754 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +09:01:09.754 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +09:01:09.754 SCRIPT : ----------------- +09:01:09.757 SCRIPT (W): Slot_Chat Has no Content! +09:01:09.757 SCRIPT (W): Slot_VON Has no Content! +09:01:09.757 SCRIPT (W): Slot_GameVersion Has no Content! +09:01:09.757 SCRIPT (W): Slot_Notifications Has no Content! +09:01:09.757 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon diff --git a/docs/evidence/native-2026-09-19-085442/source-provenance.json b/docs/evidence/native-2026-09-19-085442/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-085442/source-sha256.json b/docs/evidence/native-2026-09-19-085442/source-sha256.json new file mode 100644 index 0000000..d8e3e4f --- /dev/null +++ b/docs/evidence/native-2026-09-19-085442/source-sha256.json @@ -0,0 +1,168 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "86425bf8c609fc2030d5b972da30b921da506650f98fc309f8c7491f94e4e7d2", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "3d20f2cf40be0f2891bb7e071cd838c891a8fb7677c235930fe290f581bb8b4c", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "0fdc087f57afbbe785cdea12810d9c63060d88a778dc90c470733c13e86da94f", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "4ed67e10029f549f4519975e320198614587f89b5d0cc2c3c725154453baf476", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "0b2f115a7a7f817fde50f4bd0d8d89d7a9d5a83a3d6ae9c2723ce30e7bc41a6c", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "5a06f63e63c739ed4dbb81064491d0d259813a2052d40d30a95f67f71c966b82", + "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": "d7cc2a908df6a34897951a09f1edc4a90495fd1206840dc74e920edb8e4a6843", + "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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "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": "f524f33d460bb72602f60b473f0c0d59f8a60f3e1e20d70d60d664fb85373837", + "addons/core/Scripts/Game/ERR/ERR_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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/finite-mortar-operations.md b/docs/finite-mortar-operations.md new file mode 100644 index 0000000..3a5af78 --- /dev/null +++ b/docs/finite-mortar-operations.md @@ -0,0 +1,38 @@ +# Finite mortar readiness and ammunition operations + +This patch completes missing lifecycle behavior in the existing HQ-owned mortar path. It adds no gun/crew response spawn, depot, convoy or aircraft. Existing physical projectiles, firing safety and stock behavior outside the successor's registered battery remain native. Local tests pass; native compilation and new runtime behavior still require verification. + +## Startup + +The authored one-gun/four-member battery is still created once by `ERR_MortarSystem.Prepare`. A new battery-owned readiness object polls before runtime Operational checks, so an initially empty group remains pending until its bounded deadline rather than bypassing initialization forever. Within 90 seconds it requires native `IsExpandComplete`, exactly three distinct configured mortar crew and one configured manpack operator, live correct-faction actors, initialized inventories and a valid native gun registration. The existing minimum ten-second startup delay remains, but no longer means readiness. + +The original nine-shell budget per gunner is allocated once after the complete original population is present. Initial shell counts outside 0..9 fail. Each missing shell request receives a distinct retained completion callback; the allocation latch is set before the first native request. A rejection/partial failure permanently closes allocation, without a new budget or retry. All callbacks must finish successfully and each original gunner must actually carry nine unique HE entities, with zero on the RTO and 27 unique group shells, before `StartupActivated` becomes true. Stolen/consumed/missing initialization items are observed until the same deadline and never replenished. Optional short-range crew handsets retain their existing one-time attempt; the actual RTO manpack is mandatory. + +The support owner does not replace injured, lost or substituted crew. Stop or failed pending initialization disables only its owned group's `SetSpawnImmediately` intent, empties only that group's initial prefab list, and purges its queued native requests. Existing physical actors, gun and items remain owned by the existing mission cleanup; the helper neither deletes them nor changes their health. Successfully initialized Stop retains asset references and readable inventory diagnostics. + +## Exact shell transfers + +`SupplyState(now)` explicitly returns FAILED/PENDING/READY. `SupplyGunner()` remains a compatibility wrapper and only returns true for READY. The old request-accepted-as-supplied behavior is removed. + +A transaction captures the exact shell, donor, gunner, source/destination managers, destination storage, gun, group and HQ order number. Native `TryMoveItemToStorage` is issued once; callback methods only record completion/failure and never launch an activity. Authorization is checked on the server against the still-active HQ battery/order, original delivered report timestamp, original gun/group, conscious current crew, factions, distance and turret occupant. Supply READY requires a successful callback **and** the exact shell absent from the donor inventory, present in the gunner inventory and attached to the requested storage. Callback `GetItem()` is deliberately not used because its installed contract excludes Move operations. + +Each shell identity is attempted at most once for this battery during the round, including rejected/ambiguous attempts. A canceled operation cannot authorize fire. An accepted unresolved operation stays reserved and blocks another battery transfer even after its order is canceled. A late successful callback can resolve physical ownership, but cannot make the canceled/expired current order ready. No native retry, shell clone, replacement or health change is used to resolve uncertainty. A successful callback without physical ownership proof remains ambiguous; at the eight-second deadline that order fails, and further supply remains blocked until there is a definite outcome. This is deliberately conservative and can leave a battery unavailable rather than risk overlapping inventory mutations. + +Once a transfer has genuinely completed for its current order, its transaction is released so later rounds can request a different existing shell. The attempted shell identity remains excluded from another move request. Ammo already physically in the current gunner remains usable; no new supply entity is spawned during firing. + +## Order and native shot counter integration + +The system retains the radio-delivered snapshot in `PendingSupplyReport` while supply is pending, checks its unchanged observation age and eligibility every tick, and creates the stock artillery activity only once when READY. The scheduler excludes a pending supply report/unresolved transfer from new assignments. + +The native ShootingLogic superclass increments its behavior shot counter. The successor hook therefore waits **before** calling super: first for a confirmed physical projectile, then for actual next-round supply. Pending ticks return RUNNING without incrementing; supply failure returns FAIL and closes authorization through the existing HQ rejection path. Once READY, super runs once and the next aim is requested. The final confirmed salvo round does not require an extra shell. Real `OnWeaponFired` remains the independent authoritative projectile count; no node success is relabeled as a shot. + +## Files and validation + +New production helpers: + +- `addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c` +- `addons/ai/Scripts/Game/ERR/ERR_MortarSupplyTransfer.c` + +`mortar-finite-operations.patch` contains only Battery/System/Firing edits. No native probe, shared staging, Core source, resources or `check.py` was edited. New `tests/test_mortar_transactions.py` executes actual extracted population/allocation/order/ownership/cycle policies and the actual transfer Poll/Acknowledge control flow against narrow API fakes. Cases include zero/late/duplicate population, callback without inventory, wrong destination storage, simultaneous source/destination claims, stale order, cancellation, exact timeout, late completion, missing shell and repeated pending ticks without duplicate shot-counter increment. Source contracts additionally constrain allocation latching, single native move, cleanup and Firing's pre-super wait. Native inventory/expansion/firing remain separate qualification tasks. + +Primary installed API references and hashes are in `vanilla-reference-sha256.json`. The native first-projectile fixture prepared separately by the other agent continues using existing public Gun, Group, StartupActivated, SpawnFailure, CountShells, OrderShots and TotalShots. Its first shot alone does not exercise donor transfer; a separate exact-item transfer/interruption test is still needed before claiming resupply acceptance. diff --git a/docs/initial-extraction-placement.md b/docs/initial-extraction-placement.md index 27b1b2e..68189d6 100644 --- a/docs/initial-extraction-placement.md +++ b/docs/initial-extraction-placement.md @@ -19,6 +19,6 @@ Primary installed-source references inspected read-only: Local validation: `python3 tests/test_extraction_placement_policy.py` passes actual extracted production timing policies and focused integration/source contracts. Enforce compilation and actual settling remain unverified until the parent runs the native scenario. No prior failed evidence is relabeled as passing. -Merge the new `ERR_ExtractionPlacement.c` and `tests/test_extraction_placement_policy.py`, then apply `initial-placement-integration.patch`. The patch touches only SiteService integration, GroundSupport diagnostics and the existing native ground probe. Preserve concurrent SiteService guard cancellation changes. This note can be merged as `docs/initial-extraction-placement.md`. +SiteService owns `ERR_ExtractionPlacement.c`; the ground probe inspects its actual one-shot wake and readiness state. `tools/check.py` includes `tests/test_extraction_placement_policy.py`. Initial guard cancellation remains separately owned and verified. Native observations in [074655](evidence/native-2026-09-19-074655/report.json) confirm one initial wake, actual dynamic settling, all three wheel support traces within millimetres of terrain, native contact, fuel and one-second readiness before spawning. The raised/tilted/moving negatives also pass. The full casualty case fails later on a separate fixture health setup, so this is scoped placement evidence rather than a passing complete run. The diagnostic simulation-transform query returned identity despite the correctly moving entity; it is not used for readiness or support decisions. diff --git a/docs/local-singleplayer-admission.md b/docs/local-singleplayer-admission.md new file mode 100644 index 0000000..2b9fac5 --- /dev/null +++ b/docs/local-singleplayer-admission.md @@ -0,0 +1,30 @@ +# Ordinary offline single-player admission + +The ordinary native diagnostic `logs_2026-09-19_08-13-59/console.log:295–296` reports authority, RplMode.None, one local controller, and a 36-character all-zero UUID sentinel. The value is syntactically valid but null. Installed `SCR_PlayerIdentityUtils.GetPlayerIdentityId` tests raw `IsEmpty()`, so this initialized null string bypasses its PeerTool empty-string fallback and previously made successor roster binding fail. + +`ERR_LocalAdmission` supplies a successor-owned round key only inside a mode created as RplMode.None. It is selected from the existing real native `OnPlayerAuditSuccess_S` callback. The context must be authoritative, retain the current successor mode, have exactly one connected player, and match that player's positive ID and current manager controller to the actual local controller. If the native helper returns a non-null identity, that value is retained. Otherwise native `UUID.GenV4()` supplies one local-round key. This is life/result bookkeeping, not a Bohemia/platform identity or authentication assertion. No identifier/name bytes are logged. In the explicit ordinary diagnostic only (`-errOrdinaryScenario core` or `chat`), the first context refusal records boolean authority/controller checks, session mode and player count so native standalone API timing can be distinguished from an invalid context without relaxing admission. + +The helper pins mode, controller, connection and selected key. Repeated callbacks do not reset spawn attempts, replace the body or bind another life. A backend identity appearing later does not replace the pinned key. The existing roster's used-life and extraction result rules continue to operate on that same value. A disconnect, replaced controller, extra connection or changed session context latches failure. Pending assignment checks reject immediately; the existing mode tick also detects context changes after spawning. The mode reports an explicit preparation failure or normal defeat, rather than adopting another controller into that local identity. Returning the context to its previous values cannot reopen the old helper. A new mode owns a fresh helper/key; terminal cleanup clears the old key/controller while retaining its closed state. + +A helper constructed in Listen/Dedicated is inert: it always returns the native identity unchanged, including null, and its validation cannot block that mode. The existing native reconnect path is unchanged for those modes. A generated offline key skips native reconnect restoration; it is never written into the native reconnect map, global identity utility, backend, persistence IDs or role state. Controller replacement within the offline round requires a new scenario rather than claiming account continuity. Existing WORKBENCH-only fixture identity handling remains unchanged. + +No new audit callback, login request, permission grant, persistent setting, command or repeating timer is introduced. Admin authorization still uses the existing native player-role check. The native base spawn callback remains called unchanged, including its own persistence behavior. This change does not fix or suppress unrelated ordinary-game GUI errors. + +## Source/API evidence + +Read-only installed sources: + +- `scripts/Game/Utilities/SCR_PlayerIdentityUtils.c:20–45`: cached native identity read and empty-string-only PeerTool fallback. +- `scripts/Core/generated/Types/UUID.c:12–27,67,106–131`: null includes empty/all-zero/invalid strings; `IsNull()` is the prescribed check; `GenV4()` is the native random UUID API. +- `scripts/Game/generated/Network/PlayerManager.c`: connected count, current controller, connection state and player-role APIs are separate. +- `scripts/Game/Respawn/Logic/SCR_AutoSpawnLogic.c:15–18` and `SCR_SpawnLogic.c:294–300`: native audit callback starts load/spawn; unavailable persistence can proceed to ordinary spawning. + +The detailed design audit and inspected-source hashes were prepared under `/tmp/erri-offline-identity-design`; no original Escapists implementation or platform account data was used. + +## Validation and remaining limits + +`python3 tests/test_local_admission.py` executes the actual context/resolver/failure/cleanup method bodies with substituted opaque native handles and UUID generation. It covers strict None-only context, missing/mismatched/replaced controllers, counts/IDs, one-time generation, repeated callbacks, late backend values, sticky failure, fresh mode and unchanged network pass-through even after Stop. It does not prove native UUID entropy/format or network authentication. Existing admission rules still check phase, used life, reserved position, exact request/controller and owned preload cleanup; the new context check runs at request and finalization boundaries. + +Native compilation and the corrected ordinary player spawn are pending for this patch. Required next checks: actual generated non-null key and controlled prisoner in the ordinary header scenario, death without another local life, terminal result attribution, fresh-round reset, and unchanged Core/companion/lifecycle fixtures. Context-change and replacement-controller fault tests must use disposable local state without altering a real network session or fabricating backend/audit success. Manual input, clean ordinary runtime and real multi-client reconnect/permissions remain separate acceptance requirements. + +Native `game-2026-09-19-082733` compiles this helper in the regular game, observes the actual backend null sentinel, creates its local-round key once and completes normal prisoner admission. No context refusal occurs; the real controller/roster marker and 15-second ready interval pass with no errors. Repeated callback/context-failure behavior has source-policy coverage; remote sessions and native failure injection remain separate. diff --git a/docs/mortar-aim-renewal-sources.json b/docs/mortar-aim-renewal-sources.json new file mode 100644 index 0000000..666abd1 --- /dev/null +++ b/docs/mortar-aim-renewal-sources.json @@ -0,0 +1,8 @@ +{ + "scope": "read-only installed vanilla source and original failing native run; no original Escapists code reused", + "sha256": { + "/tmp/erri-vanilla/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIGetArtilleryAimDistanceCompensation.c": "9a715a73007bdedbaf87817c14c312cf42fab5b345658461a559efb9560631f4", + "/tmp/erri-vanilla/scripts/Game/AI/ScriptedNodes/Weapons/SCR_AIShootStaticArtillery.c": "f58b56fbb6208bc8a6d85d63f57c273ebc108d99c94ba4aace328e80e888bec8", + "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-21-23/rereintroduced-hq.log": "a7f36739b855ab90cc03003f1d0e03e0e6abea73b54e0b59cd94fb08d5368c07" + } +} diff --git a/docs/mortar-aim-renewal.md b/docs/mortar-aim-renewal.md new file mode 100644 index 0000000..a8fb37b --- /dev/null +++ b/docs/mortar-aim-renewal.md @@ -0,0 +1,15 @@ +# Revalidating a slow native mortar aim + +The native run `logs_2026-09-19_08-21-23/rereintroduced-hq.log` records the initial ballistic solution at mission time 32.9s (event 44) and the native shooting node at 57.2s (events 53–54). The gun took approximately 24.3 seconds to reach that node; the successor's 10-second authorization lease therefore rejected an otherwise still-fresh stationary delivered observation before any shot. The report was observed around 17.8 seconds, so this failure was distinct from the unchanged 60-second observation expiry. + +`ERR_MortarFiring.c` now uses one ballistic solver body for initial aim and later authorization. It still calls the original node's installed `GetAmmoInitialSpeedCoefficients(ResourceName, notnull array)`, `GetVerticalAimLimits(notnull IEntity, out float, out float)` and the native `BallisticTable.GetAimHeightOfProjectileAltitudeFromSource`. Native coefficient order, elevation checks, moving-intercept iterations, terrain, range and safety checks are preserved. Only initial aiming writes native aim/charge output ports; revalidation never changes those outputs or the physical barrel. + +Each successful initial aim retains its commanded geometry and a weak reference to the native solver node. An expired 10-second lease can be renewed only after verifying that the same node still addresses the same gun/ammunition and that the gun, delivered-report object, order and shot match the original command. A new solve must use the same charge, remain within 0.05 m of the original gun origin, within 0.1 m of the original impact and aim target in three dimensions, and within 0.05 seconds of the original flight time. The original solution remains the comparison reference across every renewal; repeated small target movements cannot accumulate into permission to fire somewhere the barrel never aimed. + +The report's observation time is never changed. Deleted/replaced nodes, superseded reports/orders/shots, expired observations, failed prediction, changed charge/geometry or safety rejection still withhold the shot and use the existing next-HQ-tick cancellation. Physical projectile confirmation and cancellation both clear the retained command/node binding. Player-operated and unrelated artillery retain their native behavior. + +The existing firing authorization runs before the native shooting action and again immediately before physical shell transfer. A renewal is not evidence of a shot: only the existing non-null native projectile event counts ammunition fired. Finite shell supply, native loading/alignment, projectile creation and airspace reservation remain unchanged. + +`tests/test_mortar_aim_renewal.py` executes the actual equivalence, report freshness, command matching and renewal control-flow bodies with synthetic API inputs. It covers repeated recomputation, unchanged report age, expiry/future time, lost/replaced node inputs, wrong report/order/shot, failed solver, charge/origin/height/flight changes, non-finite flight values and cumulative drift against the original command. The ballistic output is deliberately a fake test boundary; these checks do not demonstrate native aim or firing. Installed source and failing-run hashes are recorded in `mortar-aim-renewal-sources.json`. + +Native follow-up must rerun the real stationary-report firing fixture: require `AIM REVALIDATED`, unchanged report source/observation age, and a real projectile event before expiry, with complete raw logs and no engine/script errors. A moving report or changed gun/charge must still be withheld, and later reports must continue to arrive by physical radio delivery. Full salvo completion is subject to report freshness and finite physical supply; the change does not guarantee eight rounds from one expired report. diff --git a/docs/mortar-expiry-evidence.md b/docs/mortar-expiry-evidence.md new file mode 100644 index 0000000..9341b63 --- /dev/null +++ b/docs/mortar-expiry-evidence.md @@ -0,0 +1,11 @@ +# Mortar expiry evidence boundaries + +The WORKBENCH fixture observes the existing production commitment boundary by overriding `ERR_MortarBattery.ReserveShellAirspace(float now)` and delegating unchanged to `super` before recording evidence. Production calls this immediately after setting `Released`, following successful final authorization, and before invoking native shell transfer. The record therefore exists even if native transfer emits its projectile callback synchronously. No production authorization, timestamp, shell or barrel state is modified by the observer. + +Each commit must retain the original report message and exact `ObservedAt`, current order/shot, open/released state and fresh aim, and occur within the original 60-second observation lifetime. A native projectile must match one outstanding recorded commit and its current order/shot. Report freshness is checked at commitment: a projectile emerging after expiry is legitimate if its commitment was fresh. The observer adds no second expiry or retraction policy to a committed physical shell; its existing overall scenario deadline still bounds the test. + +A WORKBENCH `Cancel(string reason)` wrapper records the first active order closure before unchanged native/successor cancellation clears its report. The expiry case requires either all eight physical salvo projectiles or an explicit expired-report authorization failure after the original expiry boundary. An unrelated early activity failure, premature battery Stop, changed observation timestamp or later projectile lacking a recorded commit fails the fixture. The HQ continues normally through the post-expiry observation interval and is explicitly stopped only at successful cleanup. + +Closure classification currently recognizes the existing production diagnostics `delivered target report expired` and `observation older than 60s`. A different generic failure is deliberately insufficient evidence of expiry; investigate a failing native run rather than broadening this to every canceled order. Completion checks also require commitments equal observed projectile events and no outstanding committed shell. + +`tests/test_native_mortar_probe.py` executes the actual commit, event and closure policy/method bodies with synthetic native inputs. It tests immutable timestamps, the exact 60-second boundary, late but legitimately committed emission, duplicate/missing commits, changed order/shot, native event identity, unrelated closure, premature Stop and full finite completion. These are observer-policy regressions, not proof of actual engine projectile timing. Native `mortar-fire` and `mortar-expiry` runs remain required after integration. diff --git a/docs/mortar-report-deduplication.md b/docs/mortar-report-deduplication.md new file mode 100644 index 0000000..c81511c --- /dev/null +++ b/docs/mortar-report-deduplication.md @@ -0,0 +1,9 @@ +# One mortar response per delivered observation + +The first firing experiment exposed a second order for the same unchanged observation after the native activity was cancelled. A cooldown alone does not make a report new. Each physical battery now owns a bounded ledger of attempted report message IDs, retained through cancellation and activity completion. + +Scheduling checks report eligibility before creating a downlink; `BeginRequest` claims it before cancelling an older order or incrementing the order ID. A failed/interrupted delivery consumes that battery's attempt at that observation. A newly observed and actually delivered report has a new HQ message ID and can authorize a later attempt; the code never renews observation timestamps. Different batteries maintain independent histories, although the current authored mission has one battery. + +Entries expire only after the original report is older than the unchanged 60-second report lifetime. The ledger rejects future, negative and stale observation times, invalid message IDs and excessive live entries. Its 128-entry bound exceeds the HQ's 64 retained contacts; a full ledger fails closed until entries expire. Each new mission owns a fresh ledger. + +`test_mortar_report_ledger.py` executes the actual availability/claim bodies, including repeated reads without a claim, A/B/A replay, attempted timestamp renewal, exact freshness boundary, expiry pruning, capacity and fresh-round ownership. Scheduler ordering is also checked. The new native `mortar-expiry` fixture retains an unchanged report while HQ continues running; its native result is still pending at this document's initial checkpoint. This is not full salvo, hit accuracy or multiplayer qualification. diff --git a/docs/mortar-transactions-source-sha256.json b/docs/mortar-transactions-source-sha256.json new file mode 100644 index 0000000..e0840a7 --- /dev/null +++ b/docs/mortar-transactions-source-sha256.json @@ -0,0 +1,7 @@ +{ + "scripts/Game/generated/InventorySystem/InventoryStorageManagerComponent.c": "7cc07d44ee75e10434e844f5c81044042255f2188963991b134a12a772feabbc", + "scripts/Game/generated/InventorySystem/InventoryTask/ScriptedInventoryOperationCallback.c": "d5de8fba8a6a3a3a3d3eb55b7b69f3835e845763b45f6131b248b6895454a9c1", + "scripts/Game/AI/Behavior/SCR_AIStaticArtilleryBehavior.c": "ce0875438ac419f352e28e8c9ae6d1f0eed6a124d93ca98bd5a8d5be18409866", + "scripts/Game/AI/Group/SCR_AIGroupVehicleManager.c": "f12f465fa5445aac737f1597b514fe0440bc36e6617eb948d4cff717a702506f", + "scripts/Game/Entities/SCR_AIGroup.c": "afb923ea5c78a56d4111d7261fa16fa6da5323ce43d865f7bf5534304e9ff54f" +} diff --git a/docs/native-casualty-remove.md b/docs/native-casualty-remove.md index 0b66730..637b588 100644 --- a/docs/native-casualty-remove.md +++ b/docs/native-casualty-remove.md @@ -22,7 +22,7 @@ Merge: - New `addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c`. - New `tests/test_casualty_remove_probe.py`. -- `casualty-remove-integration.patch`: minimal existing base-probe exit hooks, Core smoke selection, and three runner choice/set additions. No casualty-service/placement hooks are touched. +- Core smoke and the hidden runner expose `casualty-remove`; base-probe exit hooks preserve the earlier independent `casualty-bench` mechanism case. - This note may become `docs/native-casualty-remove.md`. Installed primary source hashes are recorded in `vanilla-reference-sha256.json`. Source inspection was read-only and no original Escapists content was reused. diff --git a/docs/native-hq-response-proof.md b/docs/native-hq-response-proof.md new file mode 100644 index 0000000..21d037f --- /dev/null +++ b/docs/native-hq-response-proof.md @@ -0,0 +1,13 @@ +# Binding the existing HQ response fixture to real perception + +The existing Chat `hq-response` case already exercised actual native perception; it did not seed reports or call the order-delivery method directly. Historical archive `native-2026-09-19-012234/rereintroduced-hq.log.txt` records report M1 at 17.9 seconds, HQ receipt at 20.9 seconds and delivery to different groups at 26 seconds, with a second round following the same route. That historical run predates current sources and includes engine errors, so it is not current clean qualification. The previous fixture accepted any delivered assignment and did not bind all original physical identities. + +`ERR_NativeHQResponseProof.c` strengthens that same case. Before arranging sight, it waits for the existing six squads and initial mortar crew, captures the original HQ-unit/group/actor/vehicle identities and physical manpack carriers, and verifies the real controlled prisoner's canonical roster/life/controller relation. It moves only that prisoner 20 m ahead in world Z of the first registered infantry group's origin, preserving the previous disclosed arrangement. It temporarily disables damage handling on that player and restores the original flag at probe stop. No guard, RTO or response force is spawned or teleported. No perception target, report or order is inserted by this observer; AI cadence, native perception and radio timing remain production behavior. + +WORKBENCH-only wrappers delegate unchanged to the production Observe, Accept, DeliverOrder and journal Write methods. After an actual observation, the proof identifies the original soldier whose own native enemy-perception list contains the canonical prisoner with a matching visible sample. It records the exact report ID, source group, observer, original RTO, actual uplink and immutable observation position/time. Accepted contact evidence requires that retained real uplink to have completed. Delivered response evidence requires a different original recipient group/RTO, the same accepted report and observed coordinates/time, and its actual completed downlink and Search waypoint. + +The bounded journal observer separately requires the report, transmission and HQ-receive events on the source message ID and HQ-transmission, unit-receive and delivered-order events on the captured downlink ID. It does not write or advance a route. Completion also requires an original recipient soldier to move at least 3 m while the native Search waypoint is current, reducing distance to the observed target by more than 1 m. Every check retains the complete original physical-force set and group membership, preventing a newly spawned replacement force from satisfying the assertion. + +The helper bounds evidence to 32 source reports and 128 journal message records and preserves the existing scenario timeout. Failure retains normal diagnostics and restores only the player's prior damage flag. On success, the existing Chat fixture continues its already established explicit death/spectator/defeat sequence. This remains an arranged local integration test, not manual visibility/navigation quality, multiplayer, performance or live-user acceptance. + +Integration adds the new helper to Chat and applies `native-smoke-integration.patch`: one owned helper field, cleanup, replacement of the existing 110/111 polling path, and transfer of temporary damage protection into the helper. No new runner case, production code or resource identity is needed. Full isolated repository checks pass. Native compilation and a new `--project chat --smoke hq-response` run remain required; preserve its source manifest and complete journal/engine logs. diff --git a/docs/native-local-admission-probe.md b/docs/native-local-admission-probe.md new file mode 100644 index 0000000..8561011 --- /dev/null +++ b/docs/native-local-admission-probe.md @@ -0,0 +1,13 @@ +# Local admission lifecycle probe + +Select `--project core --smoke local-admission` after integrating the runner choice and BaseSmoke case 1700. The new file is entirely WORKBENCH-only and requires `-errBaseSmoke 1 -errSmokeOutcome local-admission` plus server authority. It starts only after the real native standalone controller has its controlled prisoner and spent roster life. No additional player entity, backend identity, account, permission or native connection is created. + +The probe captures the exact existing roster object, key, controlled body and participant count. It explicitly replays `OnPlayerAuditSuccess_S` twice for that already admitted controller, then waits 1.5 seconds and verifies that no new roster event, actor, life, request, retry or reservation appeared. This is callback replay in the native runtime, not evidence that another backend audit occurred. + +Separate disposable helpers use the actual current controller/mode with the already-selected non-null round key. They verify that a late opaque alternate input does not replace the key, unrelated disconnect arguments do not close the helper, a matching disconnect argument latches failure, Stop cannot reopen it, and a null controller argument before selection cannot later repair itself. These are method-level fault injections: no genuine network disconnect or replacement controller is claimed. + +Finally, an invalid controller argument is submitted to the existing live helper. The existing production context guard must close admissions and perform the real defeat transition with its specific reason. The callback checks the original spent life and controlled actor remain bound after synchronous service teardown. Completion is emitted only after these checks, not merely on receiving a terminal event. No state is restored to reopen the failed round. + +The WORKBENCH path can already have its established editor fixture identity. This probe therefore does not prove ordinary UUID generation, entropy, authentication or remote reconnect. Actual ordinary Core and companion admission are separate previously recorded runs. Listen/Dedicated helper pass-through remains covered by `tests/test_local_admission.py` with explicitly substituted native context; this standalone probe neither changes native session mode nor manufactures multiplayer evidence. + +Run existing local-admission policy tests and repository checks before native compilation. Then run the new bounded scenario, retaining complete raw logs and source-manifest evidence. Required untested acceptance remains genuine two-client lifecycle/authentication, real disconnect/reconnect and an ordinary new-round reset. diff --git a/docs/native-mortar-firing.md b/docs/native-mortar-firing.md new file mode 100644 index 0000000..4fff23d --- /dev/null +++ b/docs/native-mortar-firing.md @@ -0,0 +1,21 @@ +# Native mortar first shot and cancellation fixture + +`ERR_NativeMortarFiringProbe` is opt-in WORKBENCH code for `--project chat --smoke mortar-fire --rounds 1`. It observes one real HQ-authorized shot, then explicitly stops support and watches for duplicate orders/shots or replacement ammunition. This is not a full eight-shot salvo, hit-accuracy, real enemy perception, remote-client or FPS test. The [083352 native run](evidence/2026-09-19-mortar-first-shot/report.json) passes this first-shot and cancellation case with 48 assertions and zero captured errors. + +The probe waits for the existing authored gun/four-person crew, native expansion, operational state and physical manpack route. It snapshots exactly 27 unique inventory shells. A bounded eight-point terrain survey checks no characters/vehicles in a 400m square and applies the production settlement/friendly safety checks to the target and all prospective salvo offsets. An inert fixture-owned vanilla intel folder supplies target identity. The observation describing that identity as a stationary contact is explicitly synthetic; it is queued on the existing battery RTO's actual uplink. There is no direct contact-list insertion or battery Order call. Normal HQ acceptance, mortar scheduling, real downlink, native artillery activity, aim, final shell transfer and native OnWeaponFired remain unchanged. No report is refreshed or retimestamped to make firing pass. + +The independent native-event hook records only a non-null projectile from this gun. It rejects duplicate entity callbacks and requires this report/order, an open committed shot and fresh aim with positive flight time. Later polling requires matching battery projectile counts and exactly one original inventory shell consumed. It stops support only on that later tick, never inside the firing callback, and verifies unchanged order/projectile/ammunition counts for another twelve seconds. Already-fired projectiles remain engine-owned; cleanup does not delete or move them. Inventory loss and actual projectile origin are recorded, but impact/flight accuracy is not measured. + +Cleanup removes only the test report and orders referring to its target, cancels its battery order if still present, deletes the inert target and detaches the static observer. It leaves mission guns/crew, inventory and physics alone. Success intentionally stops the support service, so the parent fixture must end/reset this disposable mission. On failure, stop the probe and end the fixture; do not continue ordinary gameplay with the test report. Existing contacts or an already-tasked battery cause a diagnostic refusal rather than erasing unrelated reports. Begin this case immediately after the real initial player is admitted. If actual perception has already produced competing reports, diagnose and choose a disclosed fixture arrangement; do not suppress production observation or relax report freshness. + +The startup wait is bounded to 180 seconds, report-to-first-shot to 90 seconds, and stopped observation to 12 seconds. Battery status/failure/route/activity/aim diagnostics are emitted every 5 seconds. A native failure is useful evidence; successful node or inventory-request returns never substitute for a projectile. + +## Running the integrated probe + +Use `tools/headless_workbench.py --project chat --smoke mortar-fire --rounds 1 --timeout 400` with the documented private prefix/profile. The Chat fixture owns polling and cleanup and emits completion only after the probe succeeds and the disposable mission resets. The Core-only configuration rejects this companion mechanism test. + +The separate `mortar-expiry` case keeps the actual HQ service running after the first shot. It supplies no fresh observation, waits beyond the original 60-second report lifetime and verifies natural activity closure, bounded actual projectile consumption and no second order for the unchanged message. After an additional twelve-second unchanged observation period, it explicitly stops and resets. That case is newly implemented and awaits its native run; it does not promise an eight-shot salvo can finish before a report becomes stale. + +## Further required cases + +After a real first-shot pass, qualify the complete eight-shot salvo under unchanged 60-second contact freshness, finite donor-to-gunner transfer, receiver-radio loss before delivery, stale report during supply/aim, crew/gun loss, depletion, and Stop during an accepted but unfinished shell transfer. The fixture's first shot may not require resupply because the native gunner already owns shells; do not claim transfer-race coverage from this result. Real visual perception→radio→HQ→fire and multiplayer need separate evidence. diff --git a/docs/native-mortar-transfer.md b/docs/native-mortar-transfer.md new file mode 100644 index 0000000..9c2c856 --- /dev/null +++ b/docs/native-mortar-transfer.md @@ -0,0 +1,33 @@ +# Native mortar transfer fixture + +`-errSmoke 1 -errSmokeOutcome mortar-transfer` is an opt-in WORKBENCH-only inventory mechanism fixture. Compilation and native execution are pending. No first-release/manual/multiplayer acceptance is asserted by the source checks. + +It waits for the production battery's completed finite startup (four physical crew, 27 original HE shell entities), captures each shell's original owner, and holds only this system's automatic scheduler through a WORKBENCH override. It uses the real mortar turret occupant, or seats an original gunner through native `GetInVehicle` and waits for actual occupancy. Two unchanged vanilla empty boxes receive the gunner's original nine shells through individual `TryMoveItemToStorage` operations. The boxes are not attached to the gunner's inventory manager. + +The first fresh synthetic `PendingSupplyReport`/`BeginRequest` bypasses radio delivery explicitly. Production `SupplyState` must start one exact donor-to-gunner operation. Accepted requests remain pending until the real callback and destination parent slot prove completion. Repeated supply checks must reuse the physical shell without another request. The fixture stashes this supplied shell, starts a second fresh order and cancels it immediately after acceptance. Repeated checks must stay failed with the same order and exactly two production attempts. The accepted native move may still physically complete; cancellation withdraws authorization and does not promise to retract an inventory operation. + +The fixture records callback state before canceling. Only an initially pending callback that later succeeds prints the late-completion assertion. If native completion was synchronous, the fixture prints `late callback timing not exercised`; that run establishes accepted-operation cancellation, not delayed-callback coverage. No delays or fake callbacks are injected into production to manufacture timing. + +Every completed move verifies all 27 original identities occur exactly once across the four real crew and fixture boxes, with no additional HE identities. The fixture never spawns or deletes shell resources, modifies ammunition counters, creates an artillery activity or authorizes firing. Production `TotalShots` must remain unchanged, with `Activity`, `RadioOrder` and `Released` absent. This is not an independent projectile observer or a firing/radio test; `mortar-fire` owns that separate evidence. + +Successful cleanup returns foreign shells from the gunner first, then all stored shells to their original owners using the same real native inventory operation. It verifies all exact owners, 27 shells, and empty boxes before deleting boxes. `Stop()` cancels and stops the battery/system and is idempotent. On failure, it retains boxes with borrowed shells or an outstanding operation for diagnostics and normal round-owned cleanup, rather than deleting those shells or issuing speculative retries. This case must finish with an explicit fixture round reset; the seated original gunner and stopped scheduler are deliberately not restored to ordinary gameplay. + +The probe has a 180-second overall limit and eight-second per-operation limits. It makes no player health changes; the optional host integration can use the same explicit real-player damage protection as the other mortar smoke cases. Crew death, donor distance, unavailable storage or native rejection fails the fixture without bypassing the production checks. + +## Installed vanilla API evidence + +Read-only extracted installed sources: + +- `scripts/Game/generated/InventorySystem/InventoryStorageManagerComponent.c`: `TryMoveItemToStorage(IEntity, BaseInventoryStorageComponent, int=-1, InventoryOperationCallback=null)` and `FindStorageForItem`. +- `scripts/Game/generated/InventorySystem/BaseInventoryStorageComponent.c`: `Contains`, `GetAll`, `GetEstimatedCountFitForItem`. +- Native item parent slot gives actual destination storage; no callback `GetItem()` is used for moves. +- `{EBBC859CCD94D96D}Prefabs/Props/EmptyStorages/USSR_AmmoBox_empty.et`: native storage, 10,000 cumulative volume; no inventory manager. Two boxes accommodate ten temporarily stored 1,600-volume shells. +- `{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et`: existing production HE shell, volume 1,600. + +The source API allows a manager to request an explicit external-storage move. Returning a shell from a box without its own inventory manager uses the original recipient's manager; this exact route still requires native validation. An accepted request is never treated as completion. + +## Local verification + +`python3 -m unittest discover -s tests -p test_native_mortar_transfer.py -v` + +Four tests pass. Two execute extracted production-fixture methods as C++ against bounded inputs/native metadata fakes: exact identity conservation and callback/slot/deadline move completion. The remaining source checks guard opt-in hooks, cancellation generation, one-call moves, no shell creation/health mutation and safe storage deletion. They do not compile Enforce or simulate native inventory/replication. diff --git a/docs/native-powered-flight.md b/docs/native-powered-flight.md new file mode 100644 index 0000000..d57037d --- /dev/null +++ b/docs/native-powered-flight.md @@ -0,0 +1,30 @@ +# Native powered flight feasibility + +This new WORKBENCH-only experiment uses the fixture pilot's **native CharacterInputContext** collective/cyclic/anti-torque inputs. It does not move an aircraft by setting velocity, angular velocity, transforms or angles, and does not copy original Escapists flight code. Native compilation and actual powered flight remain unverified. + +This supersedes the earlier aircraft audit's overly broad suggestion that no direct flight controls were exposed. A search confined to vehicle controllers missed the character input layer. There is still no demonstrated stock helicopter route/landing AI activity, but actual script-callable flight inputs exist: + +- Installed `scripts/Game/generated/Character/CharacterInputContext.c:94–107`: vehicle throttle, collective, cyclic forward/aside, anti-torque setters and getters. +- `scripts/Game/generated/Components/CharacterControllerComponent.c:82,473`: `GetInputContext` and `OnPrepareControls(owner, ActionManager, dt, player)`. +- `scripts/Game/Character/SCR_CharacterControllerComponent.c:1009`: real script override of that native preparation callback. The opt-in hook calls its superclass first, then writes only the exact fixture-owned AI pilot's inputs. Whether that native AI preparation phase occurs and its values survive until vehicle simulation is a central feasibility assertion, not an assumption. +- `scripts/GameCode/Vehicle/SCR_HelicopterControllerComponent.c:72–94`: native script callback normally reapplies global device preferences. A second opt-in hook calls its superclass, then changes **only the exact fixture aircraft** to `CollectiveMode.Direct`. It never changes global input/preferences. Its prior mode is restored when releasing an unclaimed test aircraft. +- `scripts/Game/generated/Vehicle/BaseVehicleControllerComponent.c:46–65`: normal `StartEngine` and `StopEngine`; force-start/stop are cinematics-only and excluded. `VehicleControllerComponent.OnEngineStart/OnEngineStop` connects/disconnects native fuel consumption; actual fuel decrease is required. +- `VehicleHelicopterSimulation`: real rotor state/RPM/target; `VehicleBaseSimulation`: actual internal transform/velocity/ground contact. These are read-only feedback, not substitutes for control inputs. + +## Experiment + +Core-only opt-in outcome `powered-flight`, `-errBaseSmoke 1`. A separate real vanilla unarmed Mi8 is spawned once on one of twelve bounded clear/flat candidate pads 120 m from the registered extraction aircraft. The real extraction aircraft and player are untouched. One stock USSR character (the already-resolved vanilla mortar crew character resource, not a claim of pilot-specific clothing) is created through the actual pilot seat's native `SpawnCharacterInCompartment` mechanism into its own initially empty USSR group. No HQ response system is involved in this flight-mechanism test. + +Initial physics wakes once and must settle naturally. The probe waits for actual original pilot ownership/seat/one-agent group, real finite fuel and strict grounded readiness. It then requires both real native preparation hooks to run and native input readback to match. Only then it makes **one normal engine-start request**, waits for real engine/rotor spin and observed fuel use, and applies a conservative newly authored height/velocity feedback controller to native inputs. + +The target is 8 m above the aircraft's initial resting origin; success requires 7–9 m altitude, no ground contact, bounded speed/tilt/drift continuously for five seconds, then descent through inputs only. Landing requires native ground contact plus low speed/angular velocity/upright attitude continuously for two seconds, followed by normal engine shutdown. Input bounds and feedback signs are experimental; wrong input mapping, missing callbacks, ineffective input application, drift or failed hover must produce a retained failure, never a physics-position correction. Native setters do not document full numeric/direct-mode semantics, so both response and tuning require native evidence. + +The controller revalidates server/explicit opt-in, exact unclaimed pilot/group/active seat, conscious pilot, engine/rotor/airframe health and native fuel before writing. Any player aboard prevents writes. Terminal/failure cleanup clears hooks and only the same unclaimed pilot's controls, restores that aircraft's local collective mode without a crew lock. Leaving the seat fails authority. It never kills the engine in midair, deletes an airborne actor, stabilizes a falling aircraft, restores health, changes fuel or creates replacements. Test entities remain mode-owned for the explicit fixture reset/diagnostic inspection. Normal engine shutdown is requested only after actual landing. Capture/fuel/health gates exist but deliberate destructive variants and multiplayer ownership are not exercised in this first probe. + +The run is bounded to 240 s after fixture creation (30 s preparation, 5 s callbacks, 65 s startup, 65 s climb/hover, 65 s landing, 15 s shutdown are subordinate maxima; total still wins). A fixture whose native startup consumes most of the total budget may fail rather than overrun. Base runner should allow 420 s including mission preparation. No UI/input emulation is used, and all scripts are excluded outside WORKBENCH. + +## Evidence limits and next work + +Four local tests pass: exhaustive actual authority gate, actual bounded input/height/hover/contact-landing policies, and source guards against physical driving/global input/force-start/fuel-health mutation. They do not compile Enforce or prove native input persistence, cyclic signs, throttle/collective mapping or a flyable control law. + +A native failure at the callback/input stage would identify a real integration blocker; a native failure during lift/hover requires reviewing logged actual inputs, RPM, internal position, fuel and motion, not relaxing success. No successful gate should be described as a full autopilot, route following, obstacle avoidance, HQ delivery, aircraft support acceptance or multiplayer proof. If takeoff/hover/landing works, the next independent layer is bounded attitude/position control and explicit loss tests before radio/HQ sortie integration. diff --git a/docs/ordinary-game-startup.md b/docs/ordinary-game-startup.md index f1f848d..2514892 100644 --- a/docs/ordinary-game-startup.md +++ b/docs/ordinary-game-startup.md @@ -91,3 +91,5 @@ The ordinary runner now starts the normal main menu and explicitly requests `-er The exact installed API is `GameStateTransitions.RequestScenarioChangeTransition(ResourceName missionOrWorld, ResourceName worldSystemsConfig, string addonList)`: its documentation accepts a mission header or world. Vanilla `game.c:1246` uses it in `PlayGameConfig`. Core passes `{AD62322D5213C440}Missions/ERR_Everon_Base.conf`; Chat passes `{C1E20667DCE324ED}Missions/ERR_Everon.conf`; both specify `{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf`. Once a successor world starts, the diagnostic only inspects its active header and actual `GetSystemsConfig()`; the runner requires that verification plus ordinary module/phase/settle evidence. Existing splash errors still permanently fail the run, even if downstream header verification succeeds. 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. diff --git a/docs/ordinary-identity-diagnostics.md b/docs/ordinary-identity-diagnostics.md new file mode 100644 index 0000000..d26cf2f --- /dev/null +++ b/docs/ordinary-identity-diagnostics.md @@ -0,0 +1,18 @@ +# Ordinary offline identity diagnosis + +Installed `RplMode` values are None=0, Client=1, Listen=2 and Dedicated=3. The observed regular offline run's mode=0 therefore does not enter the dedicated-server branch of `SCR_PlayerIdentityUtils`. A native local controller exists; the remaining issue is identity conversion/binding, not absence of a player object. + +The installed utility calls `BackendApi.GetPlayerIdentityId` and only attempts its non-dedicated PeerTool name fallback when the returned string is **empty**. A nonempty null UUID sentinel or malformed string bypasses that fallback. The later native sample below confirms this explanation. The installed UUID type remains a string: invalid-format strings are considered null, and both empty and all-zero strings are null despite not being string-equal. The installed `int.ToString(8, true)` uses hexadecimal formatting (the boolean means `hex`), so decimal width growth is not a supported explanation for the fallback result. + +The optional admission diagnostic now records raw cached identity string length, emptiness, UUID null/format status, equality to the null UUID sentinel, returned helper length/format status and the actual Dedicated comparison. Raw length=-1 denotes an unavailable backend API object. It is compiled outside WORKBENCH and executes only for the explicit `errOrdinaryScenario core/chat` diagnostic. It logs neither identity contents nor player name contents, does not call authentication/initialization methods, creates no replacement identity and leaves strict `Players().Bind` behavior unchanged. + +Interpretation of the next native sample: + +- rawLength>0, rawNullSentinel=1: native backend supplied the initialized null UUID; vanilla's empty-string test bypasses its fallback. +- rawLength>0, rawNull=1, rawNullSentinel=0: a nonempty invalid/native sentinel value bypasses fallback. +- rawEmpty=1, dedicated=0, helperLength>0, helperFormatValid=0: vanilla returned its fallback string, but UUID validation rejected its format. +- rawEmpty=1, dedicated=0, helperLength=0: the expected fallback did not produce a string; inspect native/local initialization rather than inferring from player-name length. + +These diagnostic observations do not establish an account identity or network reconnect guarantee. The subsequent [standalone admission implementation](local-singleplayer-admission.md) supplies an internal round-local roster key only for the verified sole local controller in `RplMode.None`; it does not substitute a platform identity. Network modes retain native identity handling. + +Native `game-2026-09-19-081359` confirms the first case: `rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0`. The normal local audit callback occurred; the helper returned the native null sentinel unchanged. The scoped standalone round-local roster key subsequently passed real ordinary Core and Chat admission in archived runs 082733 and 082938; network identity behavior remains unchanged. diff --git a/docs/original-feature-coverage.json b/docs/original-feature-coverage.json index 3dd6484..7e91895 100644 --- a/docs/original-feature-coverage.json +++ b/docs/original-feature-coverage.json @@ -109,7 +109,7 @@ "addons/core/Scripts/Game/ERR/ERR_Actors.c", "addons/core/Scripts/Game/ERR/ERR_GameMode.c" ], - "remaining": "Vanilla health/casualty systems are the basis. Verify unconsciousness, revival, transport, bleedout and their mission consequences." + "remaining": "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." }, { "id": "enemy_coordination", @@ -177,7 +177,7 @@ "id": "ambient", "title": "Ambient patrols, vehicles and civilians", "scope": "first-release", - "status": "pending", + "status": "partial", "original_scripts": [ "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_AmbientEventBase.c", "Scripts/Game/AmbientEvents/AmbientEventTypes/ESCT_HeliFlybyEvent.c", @@ -197,7 +197,7 @@ "Scripts/Game/Systems/ESCT_AmbientVehicleSystem.c" ], "replacement_files": [], - "remaining": "Author bounded initial population and routes, integrate reports with HQ, and measure runtime cost; no alert-driven population duplication." + "remaining": "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." }, { "id": "factions", @@ -226,7 +226,7 @@ "addons/core/Scripts/Game/ERR/ERR_FactionCatalog.c", "addons/core/Configs/ERR/VanillaFactions.conf" ], - "remaining": "Validate injected vanilla catalog and asset affiliation. Alternative faction packs remain later scope." + "remaining": "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." }, { "id": "prison", @@ -270,7 +270,7 @@ "addons/core/Scripts/Game/ERR/ERR_PlayerEscapeResult.c", "addons/core/Configs/ERR/GameOverScreens.conf" ], - "remaining": "Physical twelve-character occupancy, isolated identity/partial results and local native result-widget checks pass. Manual piloting/boarding, real remote reconnect and empty-server flight, casualty loading and network loss/restart acceptance remain." + "remaining": "Physical twelve-character occupancy, local identity/results, initial aircraft settling, ground loading and vanilla casualty removal have native evidence. Manual piloting/boarding, real reconnect, empty-server flight, remote rescue contention and loss/restart acceptance remain." }, { "id": "objectives_intel", @@ -477,7 +477,7 @@ "addons/core/Scripts/Game/ERR/ERR_AdminService.c", "addons/core/Scripts/Game/ERR/ERR_Settings.c" ], - "remaining": "Core commands and startup status need native and remote validation; complete player-facing pre-round setup and environment/difficulty choices." + "remaining": "Core administration/settings and saved environment changes pass local native checks, including two restart rounds. Complete ordinary startup/admission, remote authorization, player-facing pre-round setup and difficulty choices." }, { "id": "mission", diff --git a/docs/original-feature-coverage.md b/docs/original-feature-coverage.md index 9c912bd..47c3c32 100644 --- a/docs/original-feature-coverage.md +++ b/docs/original-feature-coverage.md @@ -10,18 +10,18 @@ The first release remains vanilla Everon, prison start and twelve players. Alter | Spectators and follow cameras | partial (first-release) | 10 | Verify remote streaming, target changes, death/reconnect and camera presentation on real clients. | | 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 | Vanilla health/casualty systems are the basis. Verify unconsciousness, revival, transport, bleedout and their mission consequences. | +| 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. Complete support scheduling, mortar firing, aircraft, transport/rearming and losses without spawning responses. | -| Ambient patrols, vehicles and civilians | pending (first-release) | 16 | Author bounded initial population and routes, integrate reports with HQ, and measure runtime cost; no alert-driven population duplication. | -| Faction, group and asset catalogs | partial (first-release) | 16 | Validate injected vanilla catalog and asset affiliation. Alternative faction packs remain later scope. | +| 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. | -| Extraction vehicle and round results | partial (first-release) | 5 | Physical twelve-character occupancy, isolated identity/partial results and local native result-widget checks pass. Manual piloting/boarding, real remote reconnect and empty-server flight, casualty loading and network loss/restart acceptance remain. | +| Extraction vehicle and round results | partial (first-release) | 5 | Physical twelve-character occupancy, local identity/results, initial aircraft settling, ground loading and vanilla casualty removal have native evidence. Manual piloting/boarding, real reconnect, empty-server flight, remote rescue contention and loss/restart acceptance remain. | | Radio objectives, tasks and discovery | partial (first-release) | 21 | Independent radio defence and native task-detail refresh are implemented. Validate visible task/map usability, simultaneous real clients, discovery replication and complete manual objective route. | | 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. | -| Mission setup, configuration and administration | partial (first-release) | 16 | Core commands and startup status need native and remote validation; complete player-facing pre-round setup and environment/difficulty choices. | +| Mission setup, configuration and administration | partial (first-release) | 16 | Core administration/settings and saved environment changes pass local native checks, including two restart rounds. Complete ordinary startup/admission, 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/release-qualification.md b/docs/release-qualification.md index b6272ec..c70d25f 100644 --- a/docs/release-qualification.md +++ b/docs/release-qualification.md @@ -30,7 +30,7 @@ Both `cases.independent_native_build` and `development_checks.clean_native_runti This is an illustrative shape, not an acceptance update; the placeholder files do not exist. Only record passed status after the corresponding acceptance work has actually passed. -The report and manifest must belong to the same evidence archive. Future native qualification also requires the fixed `source-provenance.json`, `launch-source-sha256.json`, `launch-source.json`, `runner.json.txt` and `console.log.txt` files beside them. The explicit paths must also appear in that entry's evidence list. The report must name a nonempty raw native log in the same archive. The checker independently analyzes that log with the shared native report parser and rejects missing metrics, type changes, fabricated counters or error lists that disagree with the raw log. Qualification requires every round requested by the successfully completed runner and at least one passing assertion, with no captured script/runtime, engine-severity `(E)` or missing end-screen errors. These are local native prerequisites; the separate multiplayer, gameplay, workload and packaging cases remain mandatory. +The report and manifest must belong to the same evidence archive. Future native qualification also requires the fixed `source-provenance.json`, `launch-source-sha256.json`, `launch-source.json`, `runner.json.txt` and `console.log.txt` files beside them. The explicit paths must also appear in that entry's evidence list. The report must name a nonempty raw native log in the same archive. The checker independently analyzes that log with the shared native report parser and rejects missing metrics, type changes, fabricated counters or error lists that disagree with the raw log. Qualification requires every round requested by the successfully completed runner and at least one passing assertion, with no captured script/runtime, engine-severity `(E)` or `(F)` or missing end-screen errors. These are local native prerequisites; the separate multiplayer, gameplay, workload and packaging cases remain mandatory. The source manifest must match the complete current authored addon file set and each SHA-256 hash. Changed files, added files, missing files and extra stale manifest entries all invalidate qualification. The shared `tools/source_manifest.py` helper is also used by `tools/archive_native.py`, so archival and qualification use the same inventory. Unknown resource file formats are included automatically. Generated addon-root resource databases, `.pak`/`.log` files, and `.build`, `.local`, `__pycache__`, `profiles` directories are excluded; these locations are build/runtime state and must not contain authored source resources. Source symlinks are refused. diff --git a/docs/validation.md b/docs/validation.md index 75f48a4..f292983 100644 --- a/docs/validation.md +++ b/docs/validation.md @@ -234,3 +234,37 @@ At this checkpoint, repository policy/resource checks, 15 synthetic performance- [080058](evidence/native-2026-09-19-080058/report.json) passes 66 native casualty-removal assertions with zero engine or script/VM errors. The existing `SCR_RemoveCasualtyUserAction` resolves the occupied Mi8 child bench, exterior `door_l01_door` context and native authored exit. The actual conscious caller passes action visibility/permission, then one direct completion call uses the stock `KickFromVehicle` path. A native exit event clears vehicle and seat occupancy; the still-living incapacitated test body settles within the unchanged observation bounds beside the exit, and the bench is accessible. Root horizontal error is 0.710329m and terrain clearance is 0.862961m after an earlier observation correctly fails the clearance bound. No post-boarding teleport, recovery or retry is introduced. Pre-removal isolated extraction occupancy passes; post-removal evidence concerns physical vacancy, not recalculating a frozen outcome. This fixture ends through its own reset and does not exercise held input, remote action transit or multiplayer. + +[080226](evidence/native-2026-09-19-080226/report.json) passes 37 companion-loaded native assertions with zero engine or script/VM errors. The actual mortar initializes four physical crew, a manpack operator and exactly 27 unique HE shells. Deleting that stock leaves it empty with zero confirmed shots; deleting the gun and crew leaves support permanently unavailable. This qualifies inventory identity deduplication and loss retention at the recorded source, not firing or later readiness/transfer changes. + +[game080528](evidence/game-2026-09-19-080528/report.json) verifies the narrowly gated diagnostic no-splash path, ordinary Game compilation, matching Core mission header/MissionSystems and preparation reaching PRISON without the earlier GUI errors or a captured crash. It remains failed on native offline identity binding: server, mode and local controller exist, but the returned identity is null. No identity bypass is applied. Normal visible splash UI and player input are not exercised. + +[080656](evidence/native-2026-09-19-080656/report.json) passes two complete Core escape/restart rounds, 564 assertions and zero engine or script/VM errors. This source includes the one-shot physical extraction-aircraft settling and the casualty service; normal base progression, inventory/discovery, radio interruption/recovery feedback, objective UI, boarding and result cleanup pass. It does not exercise held-input rescue, later ordinary admission diagnostics, later mortar changes or remote clients. + +[game081359](evidence/game-2026-09-19-081359/report.json) confirms the ordinary admission blocker precisely: native backend data is the well-formed 36-character all-zero UUID sentinel, which vanilla returns unchanged because it checks only string emptiness before its fallback. Mode is standalone None, a real local controller exists, and the unchanged strict roster rejects the null identity. The strengthened local-participant observer compiles without Workbench but correctly produces no pass marker. No authentication, identifier contents or name contents are logged. + +[081601](evidence/native-2026-09-19-081601/report.json) passes 89 native Core lifecycle assertions with zero engine or script/VM errors against revised prison placement and canonical participant checks. It remains a local fixture, not real remote preload/reconnect evidence. + +[081837](evidence/native-2026-09-19-081837/report.json) compiles the revised finite mortar readiness/transaction/firing code and new native firing probe with all companions. All 37 inventory/loss assertions pass with zero engine or script/VM errors. The journal confirms four original physical members and 27 completed shell requests before readiness; depletion and permanent loss remain correct. Actual transfer and projectile tests remain separate. + +[082123](evidence/native-2026-09-19-082123/report.json) proves real test uplink, HQ scheduling, downlink, native artillery activity and ballistic solution, but no physical shot. The native gun takes about24s to finish aiming, exceeding the ten-second solution lease; final authorization correctly withholds. A later retry of the same still-fresh report triggers the probe's single-order assertion. This remains failed and motivates equivalent-solution revalidation, not relaxed report freshness or fabricated firing. + +[game082733](evidence/game-2026-09-19-082733/report.json) is the first clean ordinary Core startup: regular Game compiles without Workbench, the correct header and MissionSystems load, actual guards/stock prepare, and the real local controller receives a living canonical roster participant in PRISON through native admission. A native-generated standalone round key handles the confirmed backend null sentinel without changing network identity or permissions. Fifteen seconds of continuous ready state pass with no captured engine/script failures and confirmed process cleanup. Diagnostic no-splash is active; held input, full escape, normal splash UI and multiplayer remain untested. + +[082938 ordinary Chat](evidence/game-2026-09-19-082938/game-startup-report.json.txt) passes regular-game startup with all five successor addons. Native audit/finalization binds the actual sole local controller to a living canonical prisoner; the fifteen-second ready interval and owned cleanup complete without captured errors. This shares the standalone-admission source snapshot with the clean Core startup. No held input, full route, normal splash or multiplayer claim. + +[083352 mortar firing](evidence/2026-09-19-mortar-first-shot/report.json) passes 48 native assertions with zero errors. The earlier aiming timeout is resolved by recomputing native ballistics against the immutable original command and delivered report, renewing only an equivalent aiming solution. The real gun fires one physical projectile through the actual report uplink/HQ/downlink/native activity path; exactly one of the original 27 HE shells is consumed. Explicit Stop closes the order, followed by twelve seconds without another order, projectile or ammunition replacement. Synthetic observation and unmeasured impact remain explicit limits; full salvos and multiplayer are separate. + +[083213 dedicated diagnostic](evidence/dedicated-2026-09-19-083213/review.json) compiles the native Linux regular-server Game module, loads the authored Core header/MissionSystems and reaches prison phase with zero players and 36 physical AI. Mandatory no-route network isolation and owned cleanup are verified. Four raw installed editor-helper resource errors remain, so this is partial dedicated startup, not clean runtime or multiplayer acceptance. The frozen source and binary/command/log records are retained separately from Workbench archives. + +[083810 exact mortar transfer](evidence/native-2026-09-19-083810/report.json) passes 119 native assertions with zero errors. A disclosed scheduler/radio-bypass fixture moves existing shell entities between the actual crew inventories, requires callback plus exact physical ownership, cancels a second accepted operation without permitting another request/readiness, conserves all 27 shells and restores each original owner before deleting empty fixture boxes. The observed callback completed synchronously before cancellation; this does not qualify late callback timing. No ammunition is minted or discarded. + +[084040 vanilla-only dedicated control](evidence/dedicated-2026-09-19-084040-vanilla/review.json) loads only the installed core and ArmaReforger addons and reproduces all four resource errors from the successor dedicated run. The installed Game Master Everon header and its GameMasterSystems reach GAME with zero players. Twenty-one total vanilla errors remain preserved, including the four matching errors; this is a control, not a clean successor or multiplayer pass. [Source diagnosis](dedicated-resource-audit.md) identifies missing Workbench assets referenced by installed Calvary and blast-trigger prefabs. No successor gameplay/resource patch is justified by this result. + +[084026 companion restart](evidence/native-2026-09-19-084026-restart-station-error/report.json) reaches two scripted victories and 96 passing assertions on the standalone-admission/mortar-readiness source snapshot. It is a failed runtime result: two native support-station missing-catalog errors occur between rounds. The clean first-shot and transfer mechanism runs do not erase this restart failure. + +[084543 admission probe integration](evidence/native-2026-09-19-084543-local-admission-failure/report.json) preserves an unknown spawn-container class and consequent native respawn failures. The WORKBENCH modded test layer needed the original BaseContainerProps metadata. [084919](evidence/native-2026-09-19-084919-flight-compile-failure/report.json) then preserves an unrelated powered-flight probe compile failure: LockInVehicle was an extension-added method, not a native character method. Those calls were removed; actual seat ownership is checked instead. + +[085048 local admission](evidence/native-2026-09-19-085048/report.json) passes 54 native assertions without errors. Replayed callbacks preserve the actual local prisoner, key, roster object and spent life without new spawn work. Disposable helper fault inputs latch failure, and a deliberate invalid-controller method argument makes the real production context guard end the round while preserving the original body/life. This is method injection and callback replay in a standalone native session, not a genuine network disconnect or authentication test. + +[085302 discovery probe integration](evidence/native-2026-09-19-085302-map-probe-compile-failure/report.json) retains missing native map-marker serializer methods caused by modding the replicated vanilla base class for test access. The probe now uses separate owned plain/objective subclasses and preserves the native RPC type. The production discovery-marker fix is separate from this test access correction; native widget verification remains pending. diff --git a/tests/mortar_salvo_regression.py b/tests/mortar_salvo_regression.py index 588f874..b866b84 100644 --- a/tests/mortar_salvo_regression.py +++ b/tests/mortar_salvo_regression.py @@ -18,4 +18,4 @@ int main(){for(int site=0;site<4;site++)for(int order=0;order<10;order++){ } }} ''') -print('PASS: migrated salvo offsets are deterministic, spread and bounded (firing controller pending)') +print('PASS: migrated salvo offsets are deterministic, spread and bounded (native firing and complete salvo qualification are separate)') diff --git a/tests/test_dedicated_native.py b/tests/test_dedicated_native.py new file mode 100644 index 0000000..b8e3579 --- /dev/null +++ b/tests/test_dedicated_native.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +import contextlib +import importlib.util +import io +from pathlib import Path +import sys +import tempfile +import unittest +from unittest.mock import patch + +spec = importlib.util.spec_from_file_location('dedicated_native', Path(__file__).parents[1] / 'tools/dedicated_native.py') +runner = importlib.util.module_from_spec(spec) +spec.loader.exec_module(runner) + +class DedicatedNativeTests(unittest.TestCase): + def probe(self, namespace='isolated', interfaces=None, routes=None, ipv6=''): + interfaces = interfaces if interfaces is not None else [(1, 'lo')] + routes = routes if routes is not None else 'Iface Destination Gateway\n' + def content(path, *args): + return io.StringIO(ipv6 if path.endswith('ipv6_route') else routes) + with patch('os.readlink', return_value=namespace), patch('socket.if_nameindex', return_value=interfaces), patch('builtins.open', side_effect=content), patch.object(sys, 'argv', ['probe', 'host', '/server']), patch('os.execv') as launch, contextlib.redirect_stdout(io.StringIO()): + try: + exec(runner.PROBE, {}) + except AssertionError: + self.assertFalse(launch.called) + return False + launch.assert_called_once_with('/server', ['/server']) + return True + + def test_isolation_gate_executes_only_private_loopback(self): + self.assertTrue(self.probe()) + self.assertFalse(self.probe(namespace='host')) + self.assertFalse(self.probe(interfaces=[(1, 'lo'), (2, 'eth0')])) + self.assertFalse(self.probe(routes='Iface Destination\neth0 00000000\n')) + self.assertFalse(self.probe(ipv6='0000 eth0\n')) + self.assertTrue(self.probe(ipv6='0000 lo\n')) + + def test_vanilla_control_has_no_successor_or_custom_systems(self): + args=runner.engine_args('vanilla-everon') + self.assertNotIn('-addons',args) + self.assertNotIn('-addonsDir',args) + self.assertNotIn('-worldSystemsConfig',args) + self.assertEqual(args[-2:],['-server','Missions/21_GM_Eden.conf']) + self.assertEqual(args[0],'/tmp/runtime/ArmaReforgerServer') + + 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') + old=runner.manifest(root); target.write_text('second') + self.assertNotEqual(old,runner.manifest(root)) + (root/'linked').symlink_to(target) + with self.assertRaises(ValueError): runner.manifest(root) + + def test_routes_do_not_mix_public_config_or_client_flags(self): + for route in ['header','diag-world','vanilla-everon']: + args=runner.engine_args(route) + self.assertNotIn('-config',args) + self.assertNotIn('-client',args) + self.assertIn('-noBackend',args) + self.assertNotIn('-rpl-validation-rdb-disable',args) + normal=runner.engine_args('header') + self.assertEqual(normal[0],'/tmp/runtime/ArmaReforgerServer') + self.assertTrue(normal[normal.index('-server')+1].endswith('ERR_Everon_Base.conf')) + self.assertNotIn('-worldSystemsConfig',normal) + self.assertIn('-worldSystemsConfig',runner.engine_args('diag-world')) + +if __name__ == '__main__': unittest.main() diff --git a/tests/test_dedicated_preflight.py b/tests/test_dedicated_preflight.py new file mode 100644 index 0000000..6425bc0 --- /dev/null +++ b/tests/test_dedicated_preflight.py @@ -0,0 +1,104 @@ +"""Synthetic files test no-launch planning; never execute a server or client.""" +import json +from pathlib import Path +import sys +import tempfile +import unittest +from unittest.mock import patch +sys.path.insert(0, str(Path(__file__).resolve().parents[1]/'tools')) +import dedicated_preflight as tool + + +class DedicatedPreflightTests(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory() + self.addCleanup(self.tmp.cleanup) + root = Path(self.tmp.name) + self.source, self.runtime = root/'source', root/'runtime' + self.runtime.mkdir() + for project, header in tool.HEADERS.items(): + addon = self.source/'addons'/project + path = addon/header + path.parent.mkdir(parents=True) + (addon/'addon.gproj').write_text('GameProject { GUID "2528466DE220D91C" }') + path.write_text('SCR_MissionHeader { World "'+tool.WORLD+'" SystemsConfig "'+tool.SYSTEMS+'" }') + path.with_suffix('.conf.meta').write_text('MetaFileClass { Name "{AD62322D5213C440}'+header+'" }') + (self.runtime/'runtime-origin.json').write_text(json.dumps({'app_id':1874900,'purpose':'private anonymous Reforger dedicated server preparation; no server launched'})) + + def plan(self, **kwargs): + return tool.build_plan(self.source,self.runtime,**kwargs) + + def installed(self, app='1874900', architecture=62): + directory=self.runtime/'server';directory.mkdir(exist_ok=True) + binary=directory/'ArmaReforgerServer' + data=bytearray(20);data[:6]=b'\x7fELF\x02\x01';data[18:20]=architecture.to_bytes(2,'little') + binary.write_bytes(data);binary.chmod(0o700) + manifests=directory/'steamapps';manifests.mkdir(exist_ok=True) + (manifests/'appmanifest_1874900.acf').write_text('"AppState" { "appid" "'+app+'" "buildid" "synthetic-build" "StateFlags" "4" }') + return binary + + def test_missing_runtime_still_prepares_strict_loopback_review(self): + result,config,_=self.plan() + self.assertFalse(result['launch_allowed']);self.assertFalse(result['multiplayer_passed']) + self.assertEqual(result['genuine_clients_verified'],0) + self.assertIn('missing or incomplete',result['blockers'][0]) + self.assertEqual(config['bindAddress'],'127.0.0.1') + self.assertEqual(config['publicAddress'],'127.0.0.1') + self.assertFalse(config['game']['visible']) + self.assertTrue(config['game']['gameProperties']['fastValidation']) + self.assertTrue(config['game']['gameProperties']['battlEye']) + self.assertTrue(config['operating']['disableCrashReporter']) + self.assertNotIn('rcon',config);self.assertNotIn('a2s',config) + + def test_binary_is_inspected_never_executed_and_cannot_establish_mp(self): + self.installed() + with patch('subprocess.run',side_effect=AssertionError('must not run')),patch('subprocess.Popen',side_effect=AssertionError('must not spawn')): + result,_,_=self.plan() + runtime=result['runtime'] + self.assertTrue(runtime['binary_elf_x86_64']);self.assertTrue(runtime['install_complete']) + self.assertEqual(runtime['steam_build_id'],'synthetic-build') + self.assertIsNone(runtime['engine_version']);self.assertFalse(runtime['native_runtime_executed']) + self.assertFalse(result['launch_allowed']);self.assertTrue(result['blockers']) + + def test_wrong_app_rejected_wrong_arch_incomplete(self): + self.installed(app='1890870') + with self.assertRaisesRegex(ValueError,'stable dedicated'):self.plan() + self.installed(architecture=183) + result,_,_=self.plan();self.assertFalse(result['runtime']['binary_elf_x86_64']) + self.assertIn('missing or incomplete',result['blockers'][0]) + + def test_symlink_to_existing_server_rejected(self): + binary=self.installed();target=self.runtime/'other-server';binary.rename(target);binary.symlink_to(target) + with self.assertRaisesRegex(ValueError,'symlink'):self.plan() + + def test_header_and_port_validation(self): + for port in (0,1023,65536): + with self.assertRaisesRegex(ValueError,'unprivileged'):self.plan(port=port) + header=self.source/'addons/core'/tool.HEADERS['core'] + header.write_text(header.read_text().replace(tool.SYSTEMS,'wrong')) + with self.assertRaisesRegex(ValueError,'SystemsConfig'):self.plan() + + def test_project_selection_and_source_snapshot_change(self): + before,config,_=self.plan(project='chat') + self.assertEqual(before['scenario']['project'],'chat') + self.assertTrue(config['game']['scenarioId'].endswith(tool.HEADERS['chat'])) + (self.source/'addons/core/new.c').write_text('// independent new source') + after,_,_=self.plan(project='chat') + self.assertNotEqual(before['source_manifest_sha256'],after['source_manifest_sha256']) + + def test_write_new_private_review_only_preserves_existing_evidence(self): + result,config,manifest=self.plan();destination=self.runtime/'review' + tool.write_plan(destination,result,config,manifest) + self.assertEqual(json.loads((destination/'server-config.review.json').read_text()),config) + self.assertFalse(json.loads((destination/'preflight.json').read_text())['listener_started']) + self.assertEqual(tool.digest(destination/'source-manifest.json'),result['source_manifest_sha256']) + with self.assertRaisesRegex(ValueError,'never overwritten'):tool.write_plan(destination,result,config,manifest) + with self.assertRaisesRegex(ValueError,'direct child'):tool.write_plan(self.source/'review',result,config,manifest) + + def test_unmarked_runtime_and_source_overlap_refused(self): + result,config,manifest=self.plan();(self.runtime/'runtime-origin.json').unlink() + with self.assertRaisesRegex(ValueError,'origin marker'):tool.write_plan(self.runtime/'review',result,config,manifest) + with self.assertRaisesRegex(ValueError,'separate'):tool.build_plan(self.source,self.source/'runtime') + + +if __name__=='__main__':unittest.main() diff --git a/tests/test_headless_game_runner.py b/tests/test_headless_game_runner.py index 59b4855..7a39599 100644 --- a/tests/test_headless_game_runner.py +++ b/tests/test_headless_game_runner.py @@ -179,7 +179,7 @@ class GameRunnerTests(unittest.TestCase): 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\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' self.assertTrue(runner.game_evidence(module+phase)['ready']) self.assertFalse(runner.game_evidence(phase)['ready']) self.assertFalse(runner.game_evidence(module)['ready']) @@ -190,8 +190,8 @@ class GameRunnerTests(unittest.TestCase): def test_startup_requires_selected_header_and_actual_systems_marker(self): module = 'SCRIPT : Module: Game; defines: "PLATFORM_WINDOWS"; CRC32: a\n' phase = 'SCRIPT : Rereintroduced [mission]: phase 0 -> 1\n' - core = 'SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems\n' - chat = 'SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems\n' + core = 'SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems\nSCRIPT : ERR ORDINARY: local participant verified project=core phase=prison\n' + chat = 'SCRIPT : ERR ORDINARY: header verified project=chat systems=MissionSystems\nSCRIPT : ERR ORDINARY: local participant verified project=chat phase=prison\n' self.assertFalse(runner.game_evidence(module+phase, 'core')['ready']) self.assertFalse(runner.game_evidence(module+phase+core, 'chat')['ready']) self.assertTrue(runner.game_evidence(module+phase+chat, 'chat')['ready']) @@ -202,6 +202,18 @@ class GameRunnerTests(unittest.TestCase): self.assertTrue(result['failed']) self.assertFalse(result['ready']) + def test_world_without_normal_local_admission_is_not_ready(self): + world = ('SCRIPT : Module: Game; defines: "PLATFORM_WINDOWS"; CRC32: a\n' + 'SCRIPT : Rereintroduced [mission]: phase 0 -> 1\n' + 'SCRIPT : ERR ORDINARY: header verified project=core systems=MissionSystems\n') + result = runner.game_evidence(world, 'core') + self.assertTrue(result['scenario_header_verified']) + self.assertFalse(result['local_participant_verified']) + self.assertFalse(result['ready']) + self.assertFalse(result['failed']) # incomplete admission may still arrive + self.assertFalse(runner.game_evidence(world+'ERR ORDINARY: local participant verified project=chat phase=prison\n', 'core')['ready']) + self.assertTrue(runner.game_evidence(world+'ERR ORDINARY: local participant verified project=core phase=prison\n', 'core')['ready']) + def test_no_engine_or_audio_spawn_during_import_and_process_refusal(self): with patch.object(runner, 'assert_no_game', side_effect=ValueError('existing game')): with patch.object(runner.subprocess, 'Popen') as spawn, patch.object(runner.subprocess, 'run') as commands: diff --git a/tests/test_local_admission.py b/tests/test_local_admission.py new file mode 100644 index 0000000..07d887e --- /dev/null +++ b/tests/test_local_admission.py @@ -0,0 +1,89 @@ +"""Execute actual resolver/context/latch bodies with opaque native handles. +UUID generation/nullness and native session/controller APIs are substituted; +this is not authentication, native GenV4 or multiplayer evidence. +""" +from policy_harness import ROOT, body, run +import re +source=ROOT/'addons/core/Scripts/Game/ERR/ERR_LocalAdmission.c' +s=source.read_text().split('\nmodded class ERR_GameMode')[0] +s=s[s.index('class ERR_LocalAdmissionRules'):] +s=s.replace('class ERR_LocalAdmissionRules','struct ERR_LocalAdmissionRules').replace('class ERR_LocalAdmission\n','struct ERR_LocalAdmission\n') +s=s.replace('\n}\n','\n};\n').replace('protected ','') +s=s.replace('void ERR_LocalAdmission(', 'ERR_LocalAdmission(') +s=s.replace('ERR_GameMode', 'Mode').replace('SCR_PlayerController', 'Controller').replace('PlayerManager', 'Manager') +s=re.sub(r'\b(Mode|Controller|Manager) (mode|controller|manager|m_Mode|m_Controller)\b',r'\1* \2',s) +s=s.replace('Mode.Get()', 'Mode::Get()').replace('RplMode.None','0') +s=s.replace('Replication.IsServer()', 'isServer').replace('RplSession.Mode()', 'sessionMode') +s=s.replace('GetGame().', 'GetGame()->').replace('manager.', 'manager->').replace('controller.', 'controller->') +s=s.replace('System.GetCLIParam', 'System::GetCLIParam').replace('string project;', 'std::string project;') +s=s.replace('bool connected, sameManager;', 'bool connected=false, sameManager=false;').replace('int controllerId;', 'int controllerId=0;') +s=s.replace('ERR_LocalAdmissionRules.', 'ERR_LocalAdmissionRules::') +s=s.replace('UUID.NULL_UUID','UUID::NULL_UUID').replace('UUID.GenV4()', 'UUID::GenV4()').replace('null','nullptr') +# Enforce initializes managed fields; retain that contract in this C++ model. +s=s.replace('Mode* m_Mode;', 'Mode* m_Mode=nullptr;').replace('Controller* m_Controller;', 'Controller* m_Controller=nullptr;') +s=re.sub(r'\b(bool|int) (m_\w+);',r'\1 \2=0;',s) +run('''#include +#include +int generated=0;bool isServer=true;int sessionMode=0; +struct UUID {int value=0;bool IsNull(){return value<=0;}bool operator==(UUID other){return value==other.value;}static UUID NULL_UUID;static UUID GenV4(){return UUID{++generated+100};}}; +UUID UUID::NULL_UUID{0}; +struct Controller {int id=1;int GetPlayerId(){return id;}}; +struct Manager {int count=1;bool connected=true;Controller* controller=nullptr;int GetPlayerCount(){return count;}bool IsPlayerConnected(int id){return connected;}Controller* GetPlayerController(int id){return controller;}}; +struct Mode {static Mode* current;static Mode* Get(){return current;}};Mode* Mode::current=nullptr; +struct Game {Manager* manager=nullptr;Controller* local=nullptr;Manager* GetManager(){return manager;}Controller* GetPlayerController(){return local;}}; +Game* game=nullptr;Game* GetGame(){return game;}void Print(const char*){} +namespace System {bool GetCLIParam(const char*,std::string&){return false;}} +template void PrintFormat(Args... args) {} +'''+s+''' +int main(){ + // Exact None only; every context condition independently matters. + for(int mode=-1;mode<5;++mode)for(int count=0;count<3;++count)for(int flags=0;flags<16;++flags) + assert(ERR_LocalAdmissionRules::Context(flags&1,mode,count,flags&2,flags&4,flags&8,1,1)==(mode==0&&count==1&&flags==15)); + assert(!ERR_LocalAdmissionRules::Context(true,0,1,true,true,true,0,0)); + assert(!ERR_LocalAdmissionRules::Context(true,0,1,true,true,true,1,2)); + Mode round,nextRound;Mode::current=&round;Controller owner,replacement;Manager manager;manager.controller=&owner;Game world{&manager,&owner};game=&world; + ERR_LocalAdmission admission(&round); + UUID selected=admission.Resolve(&round,1,&owner,UUID{0});assert(!selected.IsNull()&&admission.LocalKey()&&generated==1); + assert(admission.Resolve(&round,1,&owner,UUID{0})==selected&&generated==1); + assert(admission.Resolve(&round,1,&owner,UUID{55})==selected&&generated==1); // late BI arrival cannot make fresh life + assert(admission.Validate()); + assert(!admission.Disconnected(2));assert(admission.Validate()); + assert(admission.Disconnected(1));assert(!admission.Validate()); + assert(admission.Resolve(&round,1,&owner,UUID{55}).IsNull()); // irreversible within this mode + ERR_LocalAdmission native(&round);assert(native.Resolve(&round,1,&owner,UUID{55})==UUID{55}); + assert(!native.LocalKey()&&native.Resolve(&round,1,&owner,UUID{0})==UUID{55}&&generated==1); + native.Stop();assert(native.Resolve(&round,1,&owner,UUID{0}).IsNull());assert(!native.Validate()); + // Replacement, mode switch, manager/local mismatch and additional connections latch. + for(int fault=0;fault<6;++fault){ + sessionMode=0;Mode::current=&round;manager.controller=&owner;world.local=&owner;manager.count=1;manager.connected=true; + ERR_LocalAdmission a(&round);assert(!a.Resolve(&round,1,&owner,UUID{0}).IsNull()); + if(fault==0)sessionMode=1; + if(fault==1)manager.controller=&replacement; + if(fault==2)world.local=&replacement; + if(fault==3)manager.count=2; + if(fault==4)manager.connected=false; + if(fault==5)Mode::current=&nextRound; + assert(!a.Validate()); + sessionMode=0;Mode::current=&round;manager.controller=&owner;world.local=&owner;manager.count=1;manager.connected=true; + assert(!a.Validate());assert(a.Resolve(&round,1,&owner,UUID{88}).IsNull()); + } + // A newly created round owns a fresh key. Old resolver cannot be reused. + Mode::current=&nextRound;ERR_LocalAdmission next(&nextRound);UUID nextKey=next.Resolve(&nextRound,1,&owner,UUID{0});assert(!(nextKey==selected)); + assert(admission.Resolve(&nextRound,1,&owner,UUID{0}).IsNull()); + // Fresh network modes remain native even on an absent controller/local world, + // after Stop, on null backend data, and with changing native identities. + for(int mode: {1,2,3}){ + sessionMode=mode;int before=generated;ERR_LocalAdmission network(&nextRound);game=nullptr; + assert(network.Resolve(&nextRound,9,nullptr,UUID{41})==UUID{41}); + assert(network.Resolve(&nextRound,9,nullptr,UUID{0}).IsNull()); + network.Stop();assert(network.Validate()); + assert(network.Resolve(&nextRound,9,nullptr,UUID{42})==UUID{42}); + assert(!network.Selected()&&!network.LocalKey()&&generated==before);game=&world; + } + // Incomplete local context cannot generate a key and cannot later self-repair. + sessionMode=0;manager.count=0;int before=generated;ERR_LocalAdmission invalid(&nextRound); + assert(invalid.Resolve(&nextRound,1,&owner,UUID{0}).IsNull()&&generated==before); + manager.count=1;assert(invalid.Resolve(&nextRound,1,&owner,UUID{0}).IsNull()); +} +''') +print('PASS: actual local admission context/selection/latch, same-round late identity, replacement/mode failure, fresh round and untouched network path') diff --git a/tests/test_mortar_aim_renewal.py b/tests/test_mortar_aim_renewal.py new file mode 100644 index 0000000..54ec7ad --- /dev/null +++ b/tests/test_mortar_aim_renewal.py @@ -0,0 +1,83 @@ +"""Execute actual aim-equivalence and renewal control flow with synthetic API data. + +No fake native ballistic result is represented as a measured firing result. +""" +import re +from policy_harness import ROOT, body, run +r=ROOT/'addons/ai/Scripts/Game/ERR' +solution=r/'ERR_MortarAimSolution.c'; firing=r/'ERR_MortarFiring.c' +eq=body(solution,'static bool Equivalent(').replace('vector.Distance','vector::Distance').replace('Math.AbsFloat','std::fabs') +matches=body(solution,'bool Matches(').replace('ERR_MortarBattery battery','ERR_MortarBattery* battery').replace('ERR_HQReport report','ERR_HQReport* report').replace('battery.','battery->') +fresh=body(r/'ERR_MortarPrediction.c','static bool Fresh(').replace('ERR_HQReport report','ERR_HQReport* report').replace('report.','report->') +renew=body(firing,'bool ERR_RevalidateAim(') +for typ in ['ERR_MortarBattery','ERR_MortarSystem','ERR_HQReport','ERR_MortarAimSolution']: + renew=re.sub(r'\b'+typ+r' (battery|system|report|commanded|updated)\b',typ+r'* \1',renew) +renew=renew.replace('IEntity gun;','IEntity gun=nullptr;').replace('ResourceName ammo;','std::string ammo;') +for name in ['battery','system','report','commanded','updated']:renew=renew.replace(name+'.',name+'->') +for name in ['ERR_MortarBattery','ERR_MortarAimRules','ERR_MortarPrediction']:renew=renew.replace(name+'.',name+'::') +# Native trace formatting is deliberately inert. Authorization branches remain +# the production method body, and every solver invocation is counted below. +renew=re.sub(r', string\.Format\([^\n]*\)\);',');',renew) +run('''#include +#include +#include +#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));}}; +using IEntity=void*; +struct ERR_HQReport {IEntity Target=this;bool Distress=false;float ObservedAt=0;std::string TravelMode="foot";}; +struct ERR_MortarPrediction {static constexpr float MAX_REPORT_AGE_MS=60000; +'''+fresh+'''}; +struct ERR_MortarAimRules { +'''+eq+'''}; +struct Node;struct ERR_MortarAimSolution; +struct ERR_MortarBattery {static inline std::string SHELL="nativeHE";IEntity Gun=this;ERR_MortarAimSolution* AimSolution=nullptr;Node* AimSolver=nullptr;int OrderId=1,OrderShots=0;float AimedAt=1000; void Trace(const char*,const char*){}}; +struct ERR_MortarAimSolution {IEntity Gun=nullptr;ERR_HQReport* Report=nullptr;int OrderId=1,Shot=0,Charge=0;vector GunOrigin{},Impact{500,0,0},AimTarget{500,500,0};float FlightTime=30; +'''+matches+'''}; +struct ERR_MortarSystem {int rejects=0;bool Withhold(ERR_MortarBattery*,const char*){rejects++;return false;}const char* ContactFailure(ERR_MortarBattery*){return "stale";}}; +struct Node { + static constexpr int PORT_ARTILLERY_ENTITY=1,PORT_AMMO_PREFAB=2; + IEntity portGun=nullptr;std::string portAmmo=ERR_MortarBattery::SHELL;ERR_MortarAimSolution* calculated=nullptr;int solves=0; + void GetVariableIn(int,IEntity& out){out=portGun;}void GetVariableIn(int,std::string& out){out=portAmmo;} + ERR_MortarAimSolution* ERR_Solve(ERR_MortarBattery*,ERR_MortarSystem* system,ERR_HQReport*,float){solves++;if(!calculated)system->rejects++;return calculated;} +'''+renew+'''}; +struct Fixture { + ERR_MortarBattery battery;ERR_HQReport report;ERR_MortarAimSolution original,next;ERR_MortarSystem system;Node node; + Fixture(){original.Gun=battery.Gun;original.Report=&report;next=original;battery.AimSolution=&original;battery.AimSolver=&node;node.portGun=battery.Gun;node.calculated=&next;} + bool attempt(float now=25000){return node.ERR_RevalidateAim(&battery,&system,&report,now);} +}; +int main(){ + Fixture stable; assert(stable.attempt()); assert(stable.node.solves==1&&stable.battery.AimedAt==25000); + assert(stable.report.ObservedAt==0&&stable.battery.AimSolution==&stable.original); + assert(stable.attempt(45000)&&stable.node.solves==2); // fresh recomputation every renewal + assert(!stable.attempt(60001)&&stable.node.solves==2&&stable.battery.AimedAt==45000); // observation never renewed + Fixture limit;assert(limit.attempt(60000)); + Fixture future;future.report.ObservedAt=26000;assert(!future.attempt()&&future.node.solves==0); + Fixture gone;gone.battery.AimSolver=nullptr;assert(!gone.attempt()&&gone.node.solves==0); + Fixture wrongGun;wrongGun.node.portGun=&wrongGun.report;assert(!wrongGun.attempt()&&wrongGun.node.solves==0); + Fixture wrongAmmo;wrongAmmo.node.portAmmo="other";assert(!wrongAmmo.attempt()&&wrongAmmo.node.solves==0); + Fixture newReport;ERR_HQReport different;newReport.original.Report=&different;assert(!newReport.attempt()&&newReport.node.solves==0); + Fixture nextOrder;nextOrder.battery.OrderId++;assert(!nextOrder.attempt()&&nextOrder.node.solves==0); + Fixture nextShot;nextShot.battery.OrderShots++;assert(!nextShot.attempt()&&nextShot.node.solves==0); + Fixture solverFail;solverFail.node.calculated=nullptr;assert(!solverFail.attempt()&&solverFail.battery.AimedAt==1000); + Fixture charge;charge.next.Charge++;assert(!charge.attempt()&&charge.battery.AimedAt==1000); + Fixture gunMove;gunMove.next.GunOrigin.y=.051f;assert(!gunMove.attempt()); + Fixture impactMove;impactMove.next.Impact.y=.101f;assert(!impactMove.attempt()); + Fixture aimMove;aimMove.next.AimTarget.y+=.101f;assert(!aimMove.attempt()); + Fixture flight;flight.next.FlightTime+=.051f;assert(!flight.attempt()); + Fixture invalid;invalid.next.FlightTime=std::numeric_limits::quiet_NaN();assert(!invalid.attempt()); + Fixture slowDrift;slowDrift.next.Impact.x+=.06f;assert(slowDrift.attempt()); + slowDrift.next.Impact.x+=.06f;assert(!slowDrift.attempt(35000)); // compare original, not last accepted approximation + assert(slowDrift.battery.AimSolution==&slowDrift.original&&slowDrift.original.Impact.x==500); +} +''') +# The tested renewal is used at both existing pre-shot and physical-transfer +# gates; it may neither emit a replacement barrel command nor change a report. +source=firing.read_text();system=(r/'ERR_MortarSystem.c').read_text() +assert source.count('system.AllowShot(battery)')==2 +assert 'SetVariableOut' not in body(firing,'bool ERR_RevalidateAim(') +assert 'ObservedAt =' not in source +assert 'now - battery.AimedAt > 10000' in system +assert 'battery.AimSolver.ERR_RevalidateAim(battery, this, report, now)' in system +assert source.count('BallisticTable.GetAimHeightOfProjectileAltitudeFromSource(')==1 +assert 'GetAmmoInitialSpeedCoefficients(ammo, coefficients)' in body(firing,'protected ERR_MortarAimSolution ERR_Solve(') +print('PASS: actual aim renewal requires fresh same-report solve and original-command equivalence; native firing untested') diff --git a/tests/test_mortar_report_ledger.py b/tests/test_mortar_report_ledger.py new file mode 100644 index 0000000..11f5dee --- /dev/null +++ b/tests/test_mortar_report_ledger.py @@ -0,0 +1,39 @@ +"""Execute the production report ledger; native scheduler coverage is separate.""" +from pathlib import Path +from policy_harness import body, run +r=Path(__file__).resolve().parents[1] +p=r/'addons/ai/Scripts/Game/ERR/ERR_MortarReportLedger.c' +a=body(p,'bool Available(').replace('m_Attempts.', 'm_Attempts.') +c=body(p,'bool Claim(') +run('''#include +#include +#include +struct Entries {std::map entries; int Count(){return entries.size();} + int GetKey(int i){return std::next(entries.begin(),i)->first;} + float GetElement(int i){return std::next(entries.begin(),i)->second;} + void Remove(int key){entries.erase(key);} bool Contains(int key){return entries.count(key);} + void Insert(int key,float time){entries.emplace(key,time);}}; +struct ERR_MortarPrediction {static constexpr float MAX_REPORT_AGE_MS=60000;}; +struct Ledger {Entries m_Attempts; +'''+a.replace('ERR_MortarPrediction.', 'ERR_MortarPrediction::')+c+'''}; +int main(){ + Ledger a; assert(a.Available(1,0,0));assert(a.Available(1,0,10)); // unavailable radio must not claim + assert(a.Claim(1,0,100));assert(!a.Available(1,0,200));assert(!a.Claim(1,0,50000)); + assert(!a.Claim(1,10000,50000)); // rewritten timestamp cannot refresh same message + assert(a.Claim(2,200,300));assert(!a.Claim(1,0,60000)); // A/B/A replay + assert(!a.Available(1,0,60001));assert(a.Claim(3,60001,60001)); + assert(a.m_Attempts.Count()==2);assert(a.Claim(4,60300,60300));assert(a.m_Attempts.Count()==2); + assert(!a.Claim(0,0,0));assert(!a.Claim(-1,0,0));assert(!a.Claim(5,-1,0)); + assert(!a.Claim(5,100,99));assert(!a.Claim(5,0,60001)); + Ledger bounded;for(int i=1;i<=128;i++)assert(bounded.Claim(i,0,0)); + assert(!bounded.Claim(129,1,1));assert(bounded.Claim(130,60001,60001));assert(bounded.m_Attempts.Count()==1); + Ledger nextRound;assert(nextRound.Claim(1,0,0)); +} +''') +b=r/'addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c';s=r/'addons/ai/Scripts/Game/ERR/ERR_MortarSystem.c' +request=body(b,'bool BeginRequest(') +assert request.index('m_ReportLedger.Claim(') +enum class ERR_MortarSupplyState {FAILED=-1,PENDING,READY}; +'''+policy+''' +int main(){ + using S=ERR_MortarSupplyState; + assert(Population(0,0,0,false,false)==S::PENDING); + assert(Population(3,3,0,true,false)==S::PENDING); + assert(Population(4,3,1,false,false)==S::PENDING); + assert(Population(4,3,1,true,false)==S::READY); + assert(Population(4,3,1,true,true)==S::FAILED); + assert(Population(0,0,0,false,true)==S::FAILED); + assert(Population(5,3,2,true,false)==S::FAILED); + assert(Population(4,4,0,true,false)==S::FAILED); + assert(AllocationValid(0)&&AllocationValid(9)); + assert(!AllocationValid(-1)&&!AllocationValid(10)); + assert(Authority(true,false,1,1)); + assert(!Authority(false,false,1,1)); + assert(!Authority(true,true,1,1)); + assert(!Authority(true,false,1,2)); + for(int bits=0;bits<16;bits++) { + bool callback=bits&1, source=bits&2, destination=bits&4, exact=bits&8; + assert(Proven(callback,source,destination,exact)==(bits==13)); + } + int counter=0; + assert(CycleGate(true,0,counter,8,1)==0); // no physical projectile, no count + for(int i=0;i<1000;i++) if(CycleGate(true,1,counter,8,0)==1) counter++; + assert(counter==0); // pending supply never invokes native super + assert(CycleGate(true,1,counter,8,-1)==-1); + if(CycleGate(true,1,counter,8,1)==1) counter++; + assert(counter==1 && CycleGate(true,1,counter,8,1)==0); // same event not counted twice + assert(CycleGate(false,2,counter,8,1)==-1); + assert(CycleGate(true,8,7,8,-1)==1); // final confirmed round needs no ninth shell +} +''') +# Retain actual control flow; translate only native member/type syntax and the +# component lookup into a directly supplied fake item component. +poll=body(transfer,'ERR_MortarSupplyState Poll(') +poll=poll.replace('ERR_MortarSupplyState.','ERR_MortarSupplyState::').replace('Replication.IsServer()','Replication::IsServer()').replace('InventoryItemComponent item;','InventoryItemComponent* item=nullptr;').replace('if (m_Shell) item = InventoryItemComponent.Cast(m_Shell.FindComponent(InventoryItemComponent));','if (m_Shell) item = m_Shell;').replace('item.GetParentSlot().GetStorage()','item->GetParentSlot()->GetStorage()').replace('item.GetParentSlot()','item->GetParentSlot()') +ack=body(transfer,'void Acknowledge(') +run('''#include +enum class ERR_MortarSupplyState {FAILED=-1,PENDING,READY}; +struct Replication { static bool IsServer(){return true;} }; +struct Slot { void* storage; void* GetStorage(){return storage;} }; +struct InventoryItemComponent { Slot* slot; Slot* GetParentSlot(){return slot;} }; +'''+body(transfer,'static bool Proven(')+''' +struct Transfer { + bool valid=true,source=true,destination=false,m_Accepted=true,m_Invalidated=false,m_Resolved=false,m_Ready=false; + int m_Source=1,m_Destination=2,m_Acknowledgement=0; + float m_Deadline=8000; + void* m_Storage=this; + Slot slot{this}; InventoryItemComponent item{&slot}; InventoryItemComponent* m_Shell=&item; + bool Valid(float){return valid&&!m_Invalidated;} + bool Contains(int which){return m_Shell && (which==1 ? source : destination);} +'''+ack+poll+''' +}; +int main(){ + using S=ERR_MortarSupplyState; + Transfer t; assert(t.Poll(0)==S::PENDING && !t.m_Resolved); + t.Acknowledge(true); t.Acknowledge(false); assert(t.m_Acknowledgement==1); + assert(t.Poll(1)==S::PENDING && !t.m_Resolved); // callback alone cannot supply + t.destination=true; assert(t.Poll(2)==S::PENDING); // source still claims ownership + t.source=false; t.slot.storage=nullptr; assert(t.Poll(3)==S::PENDING); // wrong storage + t.slot.storage=t.m_Storage; assert(t.Poll(4)==S::READY && t.m_Resolved); + Transfer stopped; stopped.m_Invalidated=true; stopped.source=false; stopped.destination=true; stopped.Acknowledge(true); + assert(stopped.Poll(5)==S::FAILED && !stopped.m_Ready && stopped.m_Resolved); + Transfer timeout; assert(timeout.Poll(8000)==S::FAILED && !timeout.m_Resolved && timeout.m_Invalidated); + timeout.source=false;timeout.destination=true;timeout.Acknowledge(true); + assert(timeout.Poll(9000)==S::FAILED && timeout.m_Resolved && !timeout.m_Ready); // late success cannot authorize + Transfer late;late.source=false;late.destination=true;late.Acknowledge(true); + assert(late.Poll(8000)==S::FAILED); // no deadline-boundary success bypass + Transfer failed;failed.Acknowledge(false);failed.Acknowledge(true); + assert(failed.Poll(1)==S::FAILED && failed.m_Acknowledgement==-1 && failed.m_Resolved); + Transfer gone;gone.m_Shell=nullptr;gone.Acknowledge(true); + assert(gone.Poll(1)==S::PENDING && !gone.m_Resolved); // ambiguous until deadline, never another move + Transfer unauthorized;unauthorized.valid=false; + assert(unauthorized.Poll(0)==S::FAILED && !unauthorized.m_Resolved); +} +''') +# Source contract checks constrain integration that cannot run without the engine. +b=battery.read_text();sys=(r/'ERR_MortarSystem.c').read_text();f=(r/'ERR_MortarFiring.c').read_text();rd=readiness.read_text();tr=transfer.read_text() +update=body(battery,'void Update(float now)') +assert update.index('m_Readiness.Poll(now)') < update.index('if (!Operational())') +assert 'm_Allocated = true;' in rd and rd.count('TrySpawnPrefabToStorage(ERR_MortarBattery.SHELL')==1 +assert rd.index('m_Allocated = true;') < rd.index('TrySpawnPrefabToStorage(ERR_MortarBattery.SHELL') +assert 'm_aUnitPrefabSlots = new array()' in rd and 'PurgeSpawnRequestsForGroup(group)' in rd +assert 'DeleteSpawned' not in body(readiness,'void Stop(') +assert 'battery.Stop();' in body(r/'ERR_MortarSystem.c','void Stop(') +assert tr.count('TryMoveItemToStorage(')==1 and 'GetItem()' not in tr.replace('callback.GetItem()','') +assert 'm_AttemptedShells.Insert(item)' in b and 'm_AttemptedShells.Contains(item)' in b +assert 'm_Transfer.CapturedOrder() == OrderId' in b +assert 'battery.PendingSupplyReport' in sys and 'supply == ERR_MortarSupplyState.PENDING) return;' in sys +shoot=f[f.index('modded class SCR_AIStaticArtilleryBehavior_ShootingLogic'):] +assert shoot.index('battery.SupplyState(')') +for name in ['m_Mode','m_Controller','m_Life','m_Logic']: + s=s.replace(name+'.',name+'->') +s=s.replace('Players().','Players()->').replace('GetPlayerManager().','GetPlayerManager()->') +run('''#include +using IEntity=void*; +struct UUID {int value=1; bool operator==(UUID o){return value==o.value;}}; +struct Life {UUID AccountId;bool Connected=true,UsedLife=true;IEntity Actor=nullptr;}; +struct Controller {IEntity actor=nullptr;IEntity GetControlledEntity(){return actor;}}; +struct Roster {Life* life=nullptr;Life* current=nullptr;bool canEnter=false;Life* Get(int){return life;}Life* CurrentActor(IEntity){return current;}bool CanEnter(int,int){return canEnter;}}; +struct Mode {Roster roster;Roster* Players(){return &roster;}}; +struct Manager {Controller* controller=nullptr;Controller* GetPlayerController(int){return controller;}}; +struct Game {Manager manager;Manager* GetPlayerManager(){return &manager;}};Game game;Game* GetGame(){return &game;} +struct Logic {bool idle=true;bool ERR_LocalProbeIdle(int){return idle;}}; +struct Probe { + Mode mode;Life life,other;Controller controller;Logic logic;int actor=0; + Mode* m_Mode=&mode;Life* m_Life=&life;Controller* m_Controller=&controller;Logic* m_Logic=&logic;IEntity m_Actor=&actor; + UUID m_Key;int m_Connection=1,m_Participants=1,participants=1; + Probe(){life.Actor=m_Actor;controller.actor=m_Actor;mode.roster.life=&life;mode.roster.current=&life;game.manager.controller=&controller;} + int Participants(){return participants;} +'''+s+'''}; +int main(){ + Probe baseline;assert(baseline.Unchanged()); + for(int fault=0;fault<13;++fault){ + Probe p; + if(fault==0)p.m_Controller=nullptr; + if(fault==1)p.m_Actor=nullptr; + if(fault==2)p.m_Life=nullptr; + if(fault==3)p.mode.roster.life=&p.other; + if(fault==4)p.mode.roster.current=nullptr; + if(fault==5)p.life.AccountId.value=2; + if(fault==6)p.life.Connected=false; + if(fault==7)p.life.UsedLife=false; + if(fault==8)p.life.Actor=nullptr; + if(fault==9)p.controller.actor=nullptr; + if(fault==10)game.manager.controller=nullptr; + if(fault==11)p.participants=2; + if(fault==12)p.logic.idle=false; + assert(!p.Unchanged()); + } + Probe spent;spent.mode.roster.canEnter=true;assert(!spent.Unchanged()); +} +''') +source=p.read_text() +assert source.startswith('#ifdef WORKBENCH') +assert 'UUID.GenV4' not in source and 'OnPlayerDisconnected_S(' not in source +assert 'm_Logic.OnPlayerAuditSuccess_S(m_Connection);' in source +assert 'm_Logic.ERR_LocalProbeRefuseController(m_Connection)' in source +print('PASS: native local-admission snapshot rejects changed life/key/body/participant/pending state; authentication is not simulated') diff --git a/tests/test_native_mortar_probe.py b/tests/test_native_mortar_probe.py new file mode 100644 index 0000000..5b81b3c --- /dev/null +++ b/tests/test_native_mortar_probe.py @@ -0,0 +1,81 @@ +"""Execute actual fixture commit/event/closure gates; not native artillery simulation.""" +from policy_harness import ROOT, body, run +p=ROOT/'addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c' +policies='\n'.join(body(p, sig) for sig in ['static bool CommitFresh(', 'static bool EventBound(', 'static bool ExpiredClosure(']) +policies=policies.replace('ERR_MortarPrediction.', 'ERR_MortarPrediction::').replace('string failure', 'Text failure') +methods='\n'.join(body(p,sig) for sig in ['void NativeCommit(', 'void NativeClosing(', 'void NativeProjectile(']) +methods=methods.replace('ERR_MortarBattery battery','Battery* battery').replace('IEntity gun, IEntity projectile','Entity* gun, Entity* projectile').replace('string reason, string failure','Text reason, Text failure') +methods=methods.replace('m_Battery.', 'm_Battery->').replace('battery.', 'battery->').replace('Report.', 'Report->').replace('projectile.GetOrigin()', 'projectile->GetOrigin()') +methods=methods.replace('GetGame().GetWorld().GetWorldTime()', 'clockNow').replace('ERR_NativeMortarEvidenceRules.', 'ERR_NativeMortarEvidenceRules::').replace('ERR_MortarSalvo.', 'ERR_MortarSalvo::') +run('''#include +#include +#include +#include +float clockNow=20000; +struct Text:std::string {using std::string::string;bool Contains(const char* part){return find(part)!=npos;}}; +struct ERR_MortarPrediction {static constexpr float MAX_REPORT_AGE_MS=60000;}; +struct ERR_MortarSalvo {static constexpr int ROUNDS=8;}; +struct ERR_NativeMortarEvidenceRules { +'''+policies+'''}; +struct Entity {int GetOrigin(){return 0;}}; +struct Report {int MessageId=7;float ObservedAt=1000;}; +struct Battery {bool CommandOpen=true,Released=true,stopped=false;int SourceId=7,OrderId=1,OrderShots=0;float AimedAt=19000,FlightTime=20;struct Report report;struct Report* Report=&report;bool Stopped(){return stopped;}}; +struct Items {std::vector values;bool Contains(Entity* p){return std::find(values.begin(),values.end(),p)!=values.end();}void Insert(Entity* p){values.push_back(p);}}; +templatevoid PrintFormat(Args...args){} +struct Probe { + bool m_Stopped=false,m_BadProjectile=false,m_WaitForExpiry=true,m_CommitPending=false,m_ClosureSeen=false,m_ClosureComplete=false,m_ClosureExpired=false; + Battery* m_Battery;Entity* m_Gun;Items m_Projectiles;int m_Events=0,m_Step=1,m_Source=7,m_Order=1,m_Commits=0,m_CommitOrder=0,m_CommitShot=0;float m_ObservedAt=1000,m_CommittedAt=0;std::string m_BadReason; +'''+methods+''' +}; +int main(){ + using Rules=ERR_NativeMortarEvidenceRules; + assert(Rules::EventBound(true,1,1,0,0,60999,90000)); // original fresh commit survives delayed native emission + assert(Rules::CommitFresh(1000,1000,61000));assert(!Rules::CommitFresh(1000,1000,61001)); + assert(!Rules::CommitFresh(1100,1000,20000));assert(!Rules::CommitFresh(1000,1000,999)); + assert(Rules::ExpiredClosure(1000,61001,"aim: delivered target report expired or invalid")); + assert(!Rules::ExpiredClosure(1000,61000,"aim: delivered target report expired or invalid")); + assert(!Rules::ExpiredClosure(1000,65000,"native artillery activity FAILED")); + Entity gun,other,projectile;Battery b;Probe p;p.m_Battery=&b;p.m_Gun=&gun; + p.NativeProjectile(&other,&projectile);assert(!p.m_BadProjectile&&p.m_Events==0); + p.NativeCommit(&b,clockNow);assert(p.m_CommitPending&&p.m_Commits==1&&!p.m_BadProjectile); + p.NativeProjectile(&gun,&projectile);assert(p.m_Events==1&&!p.m_BadProjectile&&!p.m_CommitPending); + p.NativeProjectile(&gun,&projectile);assert(p.m_BadProjectile&&p.m_Events==1); + Probe nullEvent;nullEvent.m_Battery=&b;nullEvent.m_Gun=&gun;nullEvent.NativeProjectile(&gun,nullptr);assert(nullEvent.m_BadProjectile&&nullEvent.m_Events==0); + Probe stoppedObserver;stoppedObserver.m_Battery=&b;stoppedObserver.m_Gun=&gun;stoppedObserver.m_Stopped=true;stoppedObserver.NativeCommit(&b,20000);stoppedObserver.NativeProjectile(&gun,&projectile);assert(stoppedObserver.m_Commits==0&&stoppedObserver.m_Events==0&&!stoppedObserver.m_BadProjectile); + // Physical launch after report expiry is legitimate if its commit was fresh. + b=Battery();b.Report=&b.report;b.AimedAt=60500;Probe delayed;delayed.m_Battery=&b;delayed.m_Gun=&gun;delayed.m_Step=3; + delayed.NativeCommit(&b,60999);clockNow=62999;delayed.NativeProjectile(&gun,&projectile); + assert(delayed.m_Events==1&&!delayed.m_BadProjectile); + for(int fault=0;fault<10;++fault){ + b=Battery();b.Report=&b.report;clockNow=20000;Probe q;q.m_Battery=&b;q.m_Gun=&gun; + if(fault==0)b.CommandOpen=false; + if(fault==1)b.Released=false; + if(fault==2)b.SourceId=8; + if(fault==3)b.AimedAt=-1; + if(fault==4)b.AimedAt=9999; + if(fault==5)b.FlightTime=0; + if(fault==6)q.m_Step=2; + if(fault==7)b.report.ObservedAt=1001; + if(fault==8)b.OrderId=2; + if(fault==9){clockNow=61001;b.AimedAt=61000;} + q.NativeCommit(&b,clockNow);assert(q.m_BadProjectile&&!q.m_CommitPending&&q.m_Commits==0); + } + b=Battery();b.Report=&b.report;clockNow=20000;Probe missing;missing.m_Battery=&b;missing.m_Gun=&gun; + missing.NativeProjectile(&gun,&projectile);assert(missing.m_BadProjectile); + Probe duplicate;duplicate.m_Battery=&b;duplicate.m_Gun=&gun;duplicate.NativeCommit(&b,20000);duplicate.NativeCommit(&b,20000);assert(duplicate.m_BadProjectile&&duplicate.m_Commits==1); + for(int fault=0;fault<3;++fault){ + b=Battery();b.Report=&b.report;clockNow=20000;Probe changed;changed.m_Battery=&b;changed.m_Gun=&gun;changed.NativeCommit(&b,20000); + if(fault==0)b.OrderId++; + if(fault==1)b.OrderShots++; + if(fault==2)clockNow=19999; + + changed.NativeProjectile(&gun,&projectile);assert(changed.m_BadProjectile); + } + b=Battery();b.Report=&b.report;clockNow=65000;Probe expired;expired.m_Battery=&b;expired.m_Gun=&gun; + expired.NativeClosing(&b,"native aim or firing authorization rejected","aim: delivered target report expired or invalid");assert(expired.m_ClosureSeen&&expired.m_ClosureExpired&&!expired.m_BadProjectile); + Probe unrelated;unrelated.m_Battery=&b;unrelated.NativeClosing(&b,"native activity FAILED","");assert(unrelated.m_BadProjectile); + Probe stopped;stopped.m_Battery=&b;b.stopped=true;stopped.NativeClosing(&b,"HQ stopped","aim: delivered target report expired or invalid");assert(stopped.m_BadProjectile); + b.stopped=false;b.OrderShots=8;Probe complete;complete.m_Battery=&b;complete.m_Events=8;clockNow=50000;complete.NativeClosing(&b,"native artillery activity COMPLETED","");assert(complete.m_ClosureComplete&&!complete.m_BadProjectile); +} +''') +print('PASS: actual probe binds native events to fresh immutable commits, permits delayed emission, rejects unrelated expiry closure and premature stop') diff --git a/tests/test_native_mortar_transfer.py b/tests/test_native_mortar_transfer.py new file mode 100644 index 0000000..9b470ec --- /dev/null +++ b/tests/test_native_mortar_transfer.py @@ -0,0 +1,84 @@ +"""Source policy and actual fixture completion checks; not an engine test.""" +from pathlib import Path +import unittest +from policy_harness import body, run +ROOT = Path(__file__).resolve().parents[1] +SOURCE = ROOT/'addons/ai/Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c' + +class NativeMortarTransferChecks(unittest.TestCase): + def test_original_identity_conservation_policy(self): + method = body(SOURCE, 'static bool Conservation(') + run(method + ''' +#include +int main() { + for(int original=0;original<30;original++) for(int actual=0;actual<30;actual++) + for(int all=0;all<2;all++) for(int unique=0;unique<2;unique++) + assert(Conservation(original,actual,all,unique)==(original==27 && actual==27 && all && unique)); +} +''') + def test_actual_move_completion_requires_callback_slot_and_deadline(self): + method=body(SOURCE, 'protected int MoveResult(').replace('protected int','int').replace('InventoryItemComponent item;', 'InventoryItemComponent* item;').replace('InventoryItemComponent item =', 'InventoryItemComponent* item =').replace('InventoryItemComponent.Cast','InventoryItemComponent::Cast').replace('FindComponent(InventoryItemComponent)','FindComponent(0)').replace('null','nullptr') + for name in ('m_MoveCallback','m_MoveShell','m_MoveDestination','item'): + method=method.replace(name+'.',name+'->') + method=method.replace('GetParentSlot().', 'GetParentSlot()->') + run(''' +#include +struct Entity; +struct Storage { bool has=false; bool Contains(Entity*) { return has; } }; +struct Slot { Storage* storage=nullptr; Storage* GetStorage() { return storage; } }; +struct InventoryItemComponent { + Slot* slot=nullptr; + static InventoryItemComponent* Cast(InventoryItemComponent* x) { return x; } + Slot* GetParentSlot() { return slot; } +}; +struct Entity { InventoryItemComponent* item=nullptr; InventoryItemComponent* FindComponent(int) { return item; } }; +struct Callback { int Result=0; }; +struct Probe { + Callback* m_MoveCallback=nullptr; Entity* m_MoveShell=nullptr; + Storage* m_MoveDestination=nullptr; float m_MoveDeadline=100; +''' + method + ''' +}; +int main() { + Probe p; Callback cb; Entity shell; Storage target,wrong; Slot slot; InventoryItemComponent item; + p.m_MoveCallback=&cb; p.m_MoveShell=&shell; p.m_MoveDestination=⌖ + assert(p.MoveResult(99)==0); // acceptance alone is not completion + cb.Result=1; assert(p.MoveResult(99)==0); // callback alone is insufficient + target.has=true; assert(p.MoveResult(99)==0); // exact item metadata required + shell.item=&item; item.slot=&slot; slot.storage=&wrong; + assert(p.MoveResult(99)==0); // apparent membership in wrong storage is insufficient + slot.storage=⌖ assert(p.MoveResult(100)==-1); // bounded deadline + assert(p.m_MoveCallback==&cb); // failure retains pending operation and borrowed shell + cb.Result=-1; assert(p.MoveResult(99)==-1); + cb.Result=1; assert(p.MoveResult(99)==1); + assert(!p.m_MoveCallback && !p.m_MoveShell && !p.m_MoveDestination); + assert(p.MoveResult(99)==1); // completion cannot replay an inventory operation +} +''') + def test_no_shell_creation_or_mutation_and_safe_cleanup(self): + source=SOURCE.read_text() + self.assertEqual(source.count('ERR_Actors.Spawn('),1) + self.assertIn('ERR_Actors.Spawn(STORE,',source) + for forbidden in ('TrySpawnPrefab', 'SetHealth(', 'ForceUnconsciousness', 'DeleteRplEntity', 'TotalShots++', 'LoadMagazine', 'GetShootingLogic'): + self.assertNotIn(forbidden,source) + self.assertNotRegex(source,r'TotalShots\s*=(?!=)') + stop=body(SOURCE,'void Stop()') + self.assertIn('if (!m_MoveCallback)',stop) + self.assertIn('storage && items.IsEmpty()',stop) + self.assertIn('m_System.Stop()',stop) + self.assertEqual(source.count('ERR_Actors.DeleteSpawned('),1) + def test_scoped_hook_cancel_and_exact_request_capture(self): + source=SOURCE.read_text() + self.assertTrue(source.startswith('#ifdef WORKBENCH')) + self.assertIn('outcome == "mortar-transfer"',source) + self.assertIn('if (m_ERRTransferFixture) return;',source) + self.assertIn('super.Tick(now);',source) + self.assertIn('m_CallbackAtCancel = m_ObservedTransfer.ERR_CallbackState()',source) + self.assertIn('m_ObservedTransfer.CapturedOrder() == m_Battery.OrderId',source) + self.assertIn('m_Battery.OrderId != m_CancelOrder',source) + self.assertIn('m_Battery.ERR_TransferAttempts() != m_AttemptsAtStart + 2',source) + self.assertIn('late callback timing not exercised',source) + self.assertIn('Has(entry.OriginalOwner, entry.Shell)',source) + self.assertEqual(body(SOURCE,'protected bool BeginMove(').count('TryMoveItemToStorage('),1) + self.assertIn('return BeginMove(shell, storage, now)',body(SOURCE,'protected bool Stash(')) + +if __name__=='__main__': unittest.main() diff --git a/tests/test_powered_flight_policy.py b/tests/test_powered_flight_policy.py new file mode 100644 index 0000000..3c31d10 --- /dev/null +++ b/tests/test_powered_flight_policy.py @@ -0,0 +1,63 @@ +"""Run actual extracted fixture rules; no native flight or Enforce claims.""" +from pathlib import Path +import unittest +from policy_harness import body, run +SOURCE=Path(__file__).resolve().parents[1]/'addons/core/Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c' +class PoweredFlightPolicy(unittest.TestCase): + def test_actual_authority_all_inputs(self): + method=body(SOURCE,'static bool Authority(') + run('#include \n'+method+''' +int main(){for(int mask=0;mask<256;mask++) { + bool server=mask&1, enabled=mask&2, stopped=mask&4, pilot=mask&8, seat=mask&16, player=mask&32, alive=mask&64, fuel=mask&128; + assert(Authority(server,enabled,stopped,pilot,seat,player,alive,fuel)==(server&&enabled&&!stopped&&pilot&&seat&&!player&&alive&&fuel)); +}} +''') + def test_actual_hover_landing_and_bounded_input_rules(self): + methods='\n'.join(body(SOURCE,key).replace('Math.','Math::') for key in ['static float ClampInput(', 'static float DesiredVertical(', 'static bool Hover(', 'static bool Landed(']) + run(''' +#include +#include +#include +struct Math { static float Clamp(float x,float low,float high){return std::clamp(x,low,high);} static float AbsFloat(float x){return std::abs(x);} }; +'''+methods+''' +int main(){ + assert(ClampInput(3)==1 && ClampInput(-3)==-1); + assert(ClampInput(0.8f,0.15f)==0.15f); + assert(DesiredVertical(0,false)==1.5f && DesiredVertical(8,false)==0); + assert(DesiredVertical(8,true)==-0.8f && DesiredVertical(0,true)==0); + assert(Hover(8,0.2f,0.1f,1,1)); + assert(!Hover(0,0,0,1,0) && !Hover(11,0,0,1,0)); + assert(!Hover(8,2,0,1,0) && !Hover(8,0,0.6f,1,0)); + assert(!Hover(8,0,0,0.9f,0) && !Hover(8,0,0,1,9)); + assert(Landed(true,0.1f,0.1f,0.01f,1)); + assert(!Landed(false,0,0,0,1)); // low stationary hover is never landing + assert(!Landed(true,2,0,0,1) && !Landed(true,0,1,0,1)); + assert(!Landed(true,0,0,0.2f,1) && !Landed(true,0,0,0,0.8f)); +} +''') + def test_native_input_only_and_local_hooks(self): + source=SOURCE.read_text() + for forbidden in ('SetVelocity(', 'SetAngularVelocity(', 'SetWorldTransform(', 'SetOrigin(', 'SetAngles(', '.Teleport(', 'ForceStartEngine(', '.EngineStart(', 'RotorSetForce', 'RotorSetTorque', 'SetHealth(', 'SetFuel(', 'SetGlobalFuelConsumptionScale', 'GetInputManager('): + self.assertNotIn(forbidden,source) + self.assertTrue(source.startswith('#ifdef WORKBENCH')) + self.assertIn('outcome == "powered-flight"',source) + self.assertIn('controller != m_Character || owner != m_Pilot',source) + self.assertIn('controller != m_Controller',source) + self.assertIn('super.OnPrepareControls(owner, am, dt, player)',source) + self.assertEqual(source.count('.StartEngine()'),1) + self.assertEqual(source.count('physics.SetActive('),1) + self.assertIn('m_Wakes == 0',source) + for control in ('Collective','CyclicForward','CyclicAside','AntiTorque'): + self.assertIn('m_Input.SetVehicle'+control+'(',source) + self.assertIn('m_Input.GetVehicle'+control+'()',source) + def test_stop_and_engine_shutdown_are_bounded(self): + source=SOURCE.read_text();stop=body(SOURCE,'void Stop()') + self.assertIn('OwnPilot() && !PlayerPresent()',stop) + self.assertIn('s_Current = null',stop) + self.assertNotIn('StopEngine',stop) # no engine kill on midair fail/capture + self.assertNotIn('DeleteSpawned',stop) + self.assertIn('m_Stage >= 4 && m_Stage <= 6 && !m_Controller.IsEngineOn()',source) + self.assertIn('m_Fuel.GetTotalFuel() < m_InitialFuel - 0.05',source) + self.assertIn('m_Controller.StopEngine(false)',source) + self.assertIn('ERR_PoweredFlightRules.Landed(m_Simulation.HasAnyGroundContact()',source) +if __name__=='__main__': unittest.main() diff --git a/tools/check.py b/tools/check.py index 1d632a3..2a32c83 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_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_site_discovery_policy.py','test_faction_catalog_scope.py','test_mission_rules.py','test_admin_setting_policy.py', 'test_player_admission_policy.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_powered_flight_policy.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_site_discovery_policy.py','test_faction_catalog_scope.py','test_mission_rules.py','test_admin_setting_policy.py', 'test_player_admission_policy.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 new file mode 100644 index 0000000..b7793cf --- /dev/null +++ b/tools/dedicated_native.py @@ -0,0 +1,139 @@ +#!/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'] + + +def engine_args(route): + 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'] + 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'] + + +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('--seconds', type=int, default=90) + args = parser.parse_args() + 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)[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) + record = {'command': command, 'engine': engine_args(args.route), 'seconds':args.seconds, + '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'} + (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/tools/dedicated_preflight.py b/tools/dedicated_preflight.py new file mode 100644 index 0000000..c833c67 --- /dev/null +++ b/tools/dedicated_preflight.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +"""Prepare reviewable private dedicated-server inputs; never launch or download.""" +import argparse +import hashlib +import json +import os +from pathlib import Path +import re +import shutil + +from source_manifest import addon_manifest + +APP_ID = '1874900' +HEADERS = {'core': 'Missions/ERR_Everon_Base.conf', 'chat': 'Missions/ERR_Everon.conf'} +SYSTEMS = '{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf' +WORLD = '{B6C516F86302C679}Worlds/ERR_Everon.ent' + + +def digest(path): + value = hashlib.sha256() + with path.open('rb') as stream: + for chunk in iter(lambda: stream.read(1024 * 1024), b''): + value.update(chunk) + return value.hexdigest() + + +def selected_scenario(source, project): + addon = source / 'addons' / project + text = (addon / 'addon.gproj').read_text() + guid = re.search(r'\bGUID "([A-F0-9]{16})"', text) + if not guid: + raise ValueError('Selected addon has no exact GUID') + relative = HEADERS[project] + header = addon / relative + meta = header.with_suffix('.conf.meta').read_text() + resource = re.search(r'\bName "(\{[A-F0-9]{16}\}[^"\n]+)"', meta) + if not resource or resource[1][18:] != relative: + raise ValueError('Selected header resource identity/path mismatch') + data = header.read_text() + for key, expected in [('World', WORLD), ('SystemsConfig', SYSTEMS)]: + match = re.search(r'\b' + key + r' "([^"\n]+)"', data) + if not match or match[1] != expected: + raise ValueError('Selected header has unexpected ' + key) + return {'project': project, 'addon_guid': guid[1], 'header': resource[1], + 'world': WORLD, 'systems_config': SYSTEMS, + 'addon_directory': str(source / 'addons')} + + +def inspect_runtime(runtime): + binary = runtime / 'server' / 'ArmaReforgerServer' + manifest = runtime / 'server' / 'steamapps' / ('appmanifest_' + APP_ID + '.acf') + result = {'runtime_directory': str(runtime), 'binary': str(binary), + 'app_id': APP_ID, 'platform': 'linux', 'branch': 'public', + 'binary_present': binary.is_file(), 'binary_elf_x86_64': False, + 'binary_executable': False, 'steam_build_id': None, + 'install_complete': False, 'engine_version': None, + 'native_runtime_executed': False} + if manifest.is_file(): + values = dict(re.findall(r'"(appid|buildid|StateFlags)"\s+"([^"]*)"', manifest.read_text())) + if values.get('appid') != APP_ID: + raise ValueError('Runtime manifest is not the stable dedicated-server app') + result.update(steam_build_id=values.get('buildid'), + install_complete=values.get('StateFlags') == '4', + manifest_sha256=digest(manifest)) + if binary.is_file(): + if binary.is_symlink(): + raise ValueError('Private runtime binary must not be a symlink to another installation') + with binary.open('rb') as stream: + header = stream.read(20) + result['binary_elf_x86_64'] = len(header) == 20 and header[:6] == b'\x7fELF\x02\x01' and int.from_bytes(header[18:20], 'little') == 62 + result['binary_executable'] = os.access(binary, os.X_OK) + result['binary_sha256'] = digest(binary) + return result + + +def build_plan(source, runtime, project='core', port=2001): + source, runtime = source.resolve(), runtime.resolve() + if not 1024 <= port <= 65535: + raise ValueError('Use an unprivileged port in 1024..65535') + if source == runtime or source in runtime.parents or runtime in source.parents: + raise ValueError('Runtime must be separate from the authored source tree') + manifest = addon_manifest(source) + scenario = selected_scenario(source, project) + installation = inspect_runtime(runtime) + config = { + 'bindAddress': '127.0.0.1', 'bindPort': port, + 'publicAddress': '127.0.0.1', 'publicPort': port, + 'game': {'name': 'Rereintroduced private validation', 'scenarioId': scenario['header'], + 'maxPlayers': 2, 'visible': False, + 'gameProperties': {'fastValidation': True, 'battlEye': True}, 'mods': []}, + 'operating': {'disableCrashReporter': True}, + } + blockers = [] + if not (installation['install_complete'] and installation['binary_elf_x86_64'] and installation['binary_executable']): + blockers.append('Stable native Linux dedicated-server installation is missing or incomplete.') + blockers.extend([ + 'Server binary dependencies and exact engine-version compatibility have not been validated by a native run.', + 'Unpublished local-addon loading with authenticated server configuration/header selection needs native verification; do not combine -config and -addons.', + 'Loopback server configuration must be reviewed before any listener is started.', + 'Two genuine accepted native client identities/controllers are not available as evidence; copied profiles and synthetic actors do not qualify.', + 'Existing ordinary runner refuses concurrent game instances; it is not a multi-client supervisor.', + ]) + result = {'schema': 1, 'scope': 'no-launch dedicated preparation only', 'launch_allowed': False, + 'listener_started': False, 'genuine_clients_verified': 0, 'multiplayer_passed': False, + 'source_directory': str(source), 'scenario': scenario, 'runtime': installation, + 'network': {'bind': '127.0.0.1', 'port': port, 'public_listing': False, + 'rcon_configured': False, 'a2s_configured': False}, + 'source_manifest_sha256': hashlib.sha256((json.dumps(manifest, indent=2, sort_keys=True) + '\n').encode()).hexdigest(), + 'disk_free_bytes': shutil.disk_usage(runtime if runtime.exists() else runtime.parent).free, + 'blockers': blockers, + 'evidence_required': [ + 'Server and both clients: exact version, role, source/addon manifest and complete sealed raw logs.', + 'Server: native dedicated mode, selected header and actual MissionSystems config, two distinct accepted connections/current controlled prisoners.', + 'Client1 and Client2: separate native ownership/local controller and actual replicated state; record no account credentials.', + 'Both clients: JIP, same-account reconnect/reservation expiry, death/unconsciousness, spectator and extraction lifecycle.', + 'No synthetic-client substitution and no multiplayer/FPS claim from headless startup alone.', + ]} + return result, config, manifest + + +def write_plan(destination, result, config, manifest): + destination = destination.absolute() + runtime = Path(result['runtime']['runtime_directory']) + if destination.is_symlink() or destination.exists(): + raise ValueError('Plan directory must be new; existing evidence is never overwritten') + if not destination.parent.is_dir() or destination.parent.resolve() != runtime: + raise ValueError('Plan directory must be a new direct child of the private runtime') + marker = runtime / 'runtime-origin.json' + if not marker.is_file() or marker.is_symlink(): + raise ValueError('Private runtime origin marker is required before writing plans') + origin = json.loads(marker.read_text()) + if origin.get('app_id') != int(APP_ID) or origin.get('purpose') != 'private anonymous Reforger dedicated server preparation; no server launched': + raise ValueError('Runtime origin marker is not the authorized private preparation') + destination.mkdir(mode=0o700) + for filename, value in [('preflight.json', result), ('server-config.review.json', config), ('source-manifest.json', manifest)]: + (destination / filename).write_text(json.dumps(value, indent=2, sort_keys=True) + '\n') + # A human-readable plan is deliberately not an executable launch script. + (destination / 'REVIEW.txt').write_text('NO SERVER STARTED. DO NOT LAUNCH BEFORE CONFIGURATION REVIEW.\n' + 'server-config.review.json binds loopback and preserves native fast validation/BattlEye.\n' + 'Local unpublished-addon/config compatibility, engine dependencies/version and two genuine clients remain unverified.\n' + 'Do not add -addons to a -config command or treat this plan as runtime/MP evidence.\n') + + +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')) + parser.add_argument('--project', choices=HEADERS, default='core') + parser.add_argument('--port', type=int, default=2001) + parser.add_argument('--write-plan', type=Path, help='Write review files into a NEW direct child of the private runtime; never launch') + args = parser.parse_args() + try: + result, config, manifest = build_plan(args.source, args.runtime, args.project, args.port) + if args.write_plan: + write_plan(args.write_plan, result, config, manifest) + print(json.dumps(result, indent=2, sort_keys=True)) + return 0 # success means inspection completed, never launch/MP qualification + except (OSError, ValueError) as error: + parser.error(str(error)) + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/tools/headless_game.py b/tools/headless_game.py index 9f0fd19..627b5c0 100644 --- a/tools/headless_game.py +++ b/tools/headless_game.py @@ -138,13 +138,15 @@ def game_evidence(content, project=None): non_workbench = bool(defines) and all(not {'WORKBENCH', 'ENF_WB'}.intersection(value.split(',')) for value in defines) headers = re.findall(r'ERR ORDINARY: header verified project=(core|chat) systems=MissionSystems', content) header_verified = bool(headers) and (project is None or project in headers) - ready = header_verified and 'Rereintroduced [mission]: phase 0 -> 1' in content + participants = re.findall(r'ERR ORDINARY: local participant verified project=(core|chat) phase=prison', content) + participant_verified = bool(participants) and (project is None or project in participants) + ready = header_verified and participant_verified and 'Rereintroduced [mission]: phase 0 -> 1' in content unexpected_fixture = 'ERR SMOKE ' in content failed = (bool(report['engine_errors'] or report['script_or_runtime_failures']) or 'Rereintroduced: scenario preparation failed' in content or 'Can\'t compile "Game"' in content or unexpected_fixture or any({'WORKBENCH', 'ENF_WB'}.intersection(value.split(',')) for value in defines)) - return {**report, 'scenario_header_verified': header_verified, 'verified_header_projects': headers, 'game_module_defines': defines, 'workbench_undefined': non_workbench, + return {**report, 'local_participant_verified': participant_verified, 'scenario_header_verified': header_verified, 'verified_header_projects': headers, 'game_module_defines': defines, 'workbench_undefined': non_workbench, 'normal_mission_ready': ready, 'unexpected_smoke_fixture': unexpected_fixture, 'failed': failed, 'ready': non_workbench and ready and not failed, 'scope': 'ordinary local game startup only; no player input, full escape, multiplayer or FPS proof'} diff --git a/tools/headless_workbench.py b/tools/headless_workbench.py index 278a4e1..dd95e97 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=['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=['powered-flight', '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('--rounds', type=int, default=2) p.add_argument('--timeout', type=int, default=360) @@ -20,6 +20,9 @@ a = p.parse_args() steam, compat, profile = a.steam.resolve(), a.compat.resolve(), a.profile.resolve() if not 1 <= a.rounds <= 10 or not 60 <= a.timeout <= 1800: p.error('Use 1..10 rounds and a 60..1800 second timeout') +if a.smoke in {'mortar-expiry', 'mortar-transfer', 'mortar-fire'} and (a.project != 'chat' or a.rounds != 1 or a.timeout < 400): + p.error('mortar-expiry/mortar-transfer/mortar-fire requires --project chat --rounds 1 --timeout at least 400') +if a.smoke == 'powered-flight' and (a.project != 'core' or a.rounds != 1 or a.timeout < 420): p.error('powered-flight requires Core, one round, and at least 420 seconds') if a.smoke == 'environment-restart': if a.project != 'core' or a.rounds != 2: p.error('environment-restart requires --project core --rounds 2') fixture_names = ['erri-environment-restart.json', 'erri-environment-restart.json.bak', 'erri-environment-restart.json.tmp', 'erri-environment-restart-round.json'] @@ -56,10 +59,10 @@ for proc in Path('/proc').iterdir(): command = ['gamescope', '--backend', 'headless', '-W', '1280', '-H', '720', '-w', '1280', '-h', '720', '-r', '30', '--', str(proton), 'run', str(wb/'ArmaReforgerWorkbenchSteamDiag.exe'), '-gproj', 'Z:'+str(ROOT/'addons'/a.project/'addon.gproj'), '-addonsDir', 'Z:'+str(ROOT/'addons'), '-profile', profile_arg, '-logconsole', '-wbModule=WorldEditor', '-load', 'Worlds/ERR_Everon.ent', '-plugin=ERR_ValidateWorldPlugin', '-errPlay', '1', '-errSmoke', '1', '-errSmokeOutcome', a.smoke, '-noThrow', '-disableCrashReporter'] if a.station_teardown_diagnostics: command += ['-errStationTeardownDiag', '1'] if a.project == 'core': - if a.smoke not in {'victory', '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'}: p.error('Unsupported Core-only fixture') + if a.smoke not in {'powered-flight', 'local-admission', 'victory', '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'}: p.error('Unsupported Core-only fixture') command[command.index('-plugin=ERR_ValidateWorldPlugin')] = '-plugin=ERR_ValidateBaseWorldPlugin' command[command.index('-errSmoke')] = '-errBaseSmoke' -if a.smoke in {'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'} and a.project != 'core': p.error('This fixture requires --project core') +if a.smoke in {'powered-flight', 'local-admission', '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'} and a.project != 'core': p.error('This fixture requires --project core') if a.smoke in {'startup-failure', 'site-survey', 'transport-survey', 'extraction-startup-failure', 'extraction-boundary-failure'} and (a.project != 'core' or a.rounds != 1): p.error('This diagnostic requires --project core --rounds 1') env = os.environ.copy() env.update(STEAM_COMPAT_DATA_PATH=str(compat), STEAM_COMPAT_CLIENT_INSTALL_PATH=str(steam), WINEPREFIX=str(compat/'pfx'))

qlP11 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 IM6N<$f@Kj1+5i9m literal 0 HcmV?d00001 diff --git a/docs/evidence/native-2026-09-19-081837/error.log.txt b/docs/evidence/native-2026-09-19-081837/error.log.txt new file mode 100644 index 0000000..c646845 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/error.log.txt @@ -0,0 +1,118 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-18-37\error.log started at 2026-09-19 08:18:38 (2026-09-19 06:18:38 UTC) + +08:18:38.888 INIT : Workbench startup +08:18:38.888 INIT : Workbench Init Engine +08:18:38.888 RESOURCES : ResourceDB: full scan +08:18:38.888 RESOURCES : processing files... +08:18:38.888 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:18:38.888 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:18:38.888 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:18:43.855 INIT : Workbench Create Game +08:18:43.855 SCRIPT : Compiling Game scripts +08:18:43.855 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:18:43.855 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:18:43.997 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.125 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:18:44.157 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:18:44.310 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:18:44.374 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:18:44.374 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:18:44.375 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:18:44.421 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.421 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.422 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:18:44.422 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:18:44.447 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.483 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:18:53.905 WORLD : CreateEntities +08:18:53.905 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" +08:18:53.906 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:18:53.906 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:19:10.515 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:19:15.357 WORLD : Game::LoadEntities +08:19:15.357 WORLD : CreateEntities +08:19:15.357 WORLD : CreateEntities +08:19:15.357 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" +08:19:15.357 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:19:15.357 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:19:16.874 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:19:16.874 ENTITY : CreateComponent 'Hierarchy' +08:19:16.874 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>') +08:19:16.874 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:19:16.874 ENTITY : CreateComponent 'Hierarchy' +08:19:16.874 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>') +08:19:16.875 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:19:16.875 ENTITY : CreateComponent 'Hierarchy' +08:19:16.875 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>') +08:19:16.880 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:19:16.880 ENTITY : CreateComponent 'Hierarchy' +08:19:16.880 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>') +08:19:16.880 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:19:16.880 ENTITY : CreateComponent 'Hierarchy' +08:19:16.880 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>') +08:19:16.880 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:19:16.880 ENTITY : CreateComponent 'Hierarchy' +08:19:16.880 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>') +08:19:16.885 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:19:16.885 ENTITY : CreateComponent 'Hierarchy' +08:19:16.885 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>') +08:19:16.885 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:19:16.885 ENTITY : CreateComponent 'Hierarchy' +08:19:16.885 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>') +08:19:16.885 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:19:16.885 ENTITY : CreateComponent 'Hierarchy' +08:19:16.885 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>') +08:19:24.426 WORLD : InitEntities 'world' +08:19:24.426 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:19:24.426 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:19:24.923 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:19:24.923 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:19:24.923 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:19:24.924 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! +08:19:24.924 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! +08:19:24.925 SCRIPT (W): Can't open config file "" +08:19:24.931 WORLD : InitEntities 'world' +08:19:24.931 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:19:24.931 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:19:24.931 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:19:24.931 SCRIPT (W): Slot_Chat Has no Content! +08:19:24.931 SCRIPT (W): Slot_VON Has no Content! +08:19:24.932 SCRIPT (W): Slot_AvailableActions Has no Content! +08:19:24.932 SCRIPT (W): Slot_Vehicle Has no Content! +08:19:24.932 SCRIPT (W): Slot_GameVersion Has no Content! +08:19:24.932 SCRIPT (W): Slot_Notifications Has no Content! +08:19:24.932 SCRIPT (W): Slot_Hints Has no Content! +08:19:24.943 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:19:24.943 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:19:24.943 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:19:24.943 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. +08:19:24.944 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. +08:19:24.947 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:19:25.198 WORLD : UpdateEntities +08:19:25.198 WORLD : PostFrame +08:19:25.198 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:19:25.198 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:19:25.247 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:19:25.247 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:19:25.247 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:19:25.248 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:19:27.687 WORLD : UpdateEntities +08:19:27.687 WORLD : AfterPostSimulate +08:19:27.688 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:20:41.748 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:20:41.748 SCRIPT (W): Slot_Chat Has no Content! +08:20:41.748 SCRIPT (W): Slot_VON Has no Content! +08:20:41.748 SCRIPT (W): Slot_GameVersion Has no Content! +08:20:41.748 SCRIPT (W): Slot_Notifications Has no Content! +08:20:43.795 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:20:43.797 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:20:43.800 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:20:43.800 SCRIPT (W): Slot_Chat Has no Content! +08:20:43.800 SCRIPT (W): Slot_VON Has no Content! +08:20:43.800 SCRIPT (W): Slot_GameVersion Has no Content! +08:20:43.800 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-081837/headless-launch.log.txt b/docs/evidence/native-2026-09-19-081837/headless-launch.log.txt new file mode 100644 index 0000000..b2e8a3a --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/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: 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. +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555787d8250 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555787d8250 +[Gamescope WSI] Destroyed swapchain: 0x5555787d8250 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555787d8250 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x5555787d8250 +[Gamescope WSI] Destroyed swapchain: 0x5555787d8250 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x5555787d8250 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-081837/launch-source-sha256.json b/docs/evidence/native-2026-09-19-081837/launch-source-sha256.json new file mode 100644 index 0000000..bc9ae22 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/launch-source-sha256.json @@ -0,0 +1,161 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-081837/launch-source.json b/docs/evidence/native-2026-09-19-081837/launch-source.json new file mode 100644 index 0000000..7eb7e43 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "a63f83cc-e660-4f34-896f-3a7895bf460a", + "captured_unix": 1789798715.4962764, + "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", + "mortar-inventory", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "d03cbe8e65c511c957aa1efefb20313975dd3b5e425d43f86211d7a628f7947c" +} diff --git a/docs/evidence/native-2026-09-19-081837/report.json b/docs/evidence/native-2026-09-19-081837/report.json new file mode 100644 index 0000000..38b80f0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-081837/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-081837/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-081837/rereintroduced-hq.log.txt new file mode 100644 index 0000000..07939dd --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/rereintroduced-hq.log.txt @@ -0,0 +1,10 @@ +#1 t=6.6s M0 REGISTER group 1 [session=1789798764-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=1789798764-1] +#3 t=8.6s M0 REGISTER group 2 [session=1789798764-1] +#4 t=8.6s M0 REGISTER group 3 [session=1789798764-1] +#5 t=8.6s M0 REGISTER group 4 [session=1789798764-1] +#6 t=8.6s M0 REGISTER group 5 [session=1789798764-1] +#7 t=8.6s M0 REGISTER group 6 [session=1789798764-1] +#8 t=8.6s M0 REGISTER group 7 [session=1789798764-1] +#9 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=1789798764-1] +#10 t=76.1s M0 STOP HQ stopped; tactical orders released [session=1789798764-1] diff --git a/docs/evidence/native-2026-09-19-081837/runner.json.txt b/docs/evidence/native-2026-09-19-081837/runner.json.txt new file mode 100644 index 0000000..c92632c --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789798848.6805117, + "console_sha256": "1750d1fed4db97dd0463fa68e89f58c7c57ee55909fe1c99b6b6e0db310ceeaf", + "end_source_sha256": "d03cbe8e65c511c957aa1efefb20313975dd3b5e425d43f86211d7a628f7947c", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "a63f83cc-e660-4f34-896f-3a7895bf460a", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "d03cbe8e65c511c957aa1efefb20313975dd3b5e425d43f86211d7a628f7947c", + "started_unix": 1789798715.4963543, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-18-37", + "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-081837/script.log.txt b/docs/evidence/native-2026-09-19-081837/script.log.txt new file mode 100644 index 0000000..92779aa --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/script.log.txt @@ -0,0 +1,290 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-18-37\script.log started at 2026-09-19 08:18:40 (2026-09-19 06:18:40 UTC) + +08:18:40.120 SCRIPT : SCRIPT : Initializing scripts +08:18:40.120 SCRIPT : SCRIPT : ScriptProjectManager init +08:18:42.491 SCRIPT : SCRIPT : Compiling GameLib scripts +08:18:42.564 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 +08:18:42.564 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 +08:18:42.565 SCRIPT : SCRIPT : Compiling Game scripts +08:18:43.855 SCRIPT : Compiling Game scripts +08:18:43.855 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:18:43.855 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:18:43.997 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.125 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:18:44.157 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:18:44.272 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:18:44.310 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:18:44.374 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:18:44.374 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:18:44.375 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:18:44.421 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.421 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.422 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:18:44.422 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:18:44.447 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:18:44.483 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:18:44.771 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: e963af0e +08:18:44.778 SCRIPT : Module: Game; loaded 5756x files; 11291x classes; used 33115K 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: 9a825aa0 +08:18:45.796 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:18:45.796 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:19:07.142 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:19:07.142 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:19:07.143 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:19:07.144 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:19:07.145 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:19:07.145 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:19:07.167 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:19:10.510 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:19:10.511 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:19:24.426 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:19:24.452 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:19:24.924 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! +08:19:24.924 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! +08:19:24.925 SCRIPT (W): Can't open config file "" +08:19:24.931 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:19:24.931 SCRIPT (W): Slot_Chat Has no Content! +08:19:24.931 SCRIPT (W): Slot_VON Has no Content! +08:19:24.932 SCRIPT (W): Slot_AvailableActions Has no Content! +08:19:24.932 SCRIPT (W): Slot_Vehicle Has no Content! +08:19:24.932 SCRIPT (W): Slot_GameVersion Has no Content! +08:19:24.932 SCRIPT (W): Slot_Notifications Has no Content! +08:19:24.932 SCRIPT (W): Slot_Hints Has no Content! +08:19:24.943 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. +08:19:24.944 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. +08:19:24.947 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:19:25.000 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:19:25.013 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:19:25.198 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:19:26.730 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:19:26.753 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:19:26.754 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:19:26.782 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:19:26.785 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:19:26.837 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:19:26.838 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:19:26.845 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:19:26.896 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:19:26.896 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:19:26.899 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:19:26.899 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:19:26.903 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:19:26.904 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:19:26.904 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:19:26.906 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:19:26.906 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:19:26.906 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:19:26.906 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:19:26.906 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:19:26.907 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:19:26.907 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 +08:19:26.907 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:19:26.907 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:19:26.907 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 +08:19:26.908 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:19:26.908 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:19:26.908 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 +08:19:26.908 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.908 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.908 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.909 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.909 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:26.909 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:19:27.758 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:27.758 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:27.758 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:27.759 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:28.016 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5269,7499.7> up=0.995673 +08:19:28.016 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.286983 angularSpeed=0.0801588 +08:19:28.016 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:28.016 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6171,7501.97> +08:19:28.017 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3171,7501.97> terrainY=63.3166 tireTerrainGap=0.00050354 +08:19:28.017 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6171,7501.97> radius=0.3 bottom=<7012.06,63.3171,7501.97> fraction=0.457143 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.000572205 +08:19:28.017 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6048,7497.71> +08:19:28.017 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1548,7497.71> terrainY=64.1556 tireTerrainGap=-0.000816345 +08:19:28.017 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6048,7497.71> radius=0.45 bottom=<7009.88,64.1548,7497.71> fraction=0.450925 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.000793457 +08:19:28.018 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2648,7497.75> +08:19:28.018 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8148,7497.75> terrainY=63.8178 tireTerrainGap=-0.00299454 +08:19:28.018 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2648,7497.75> radius=0.45 bottom=<7014.42,63.8148,7497.75> fraction=0.440833 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00301743 +08:19:28.018 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:28.271 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:28.271 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:28.272 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:28.272 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:19:28.779 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:28.780 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:28.780 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:29.091 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5349,7499.71> up=0.994337 +08:19:29.092 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:19:29.092 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:29.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.619,7501.99> +08:19:29.092 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.319,7501.99> terrainY=63.3145 tireTerrainGap=0.00447845 +08:19:29.092 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.619,7501.99> radius=0.3 bottom=<7012.07,63.319,7501.99> fraction=0.47507 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0045166 +08:19:29.092 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6022,7497.71> +08:19:29.093 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1522,7497.71> terrainY=64.149 tireTerrainGap=0.00311279 +08:19:29.093 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6022,7497.71> radius=0.45 bottom=<7009.93,64.1522,7497.71> fraction=0.468873 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00315094 +08:19:29.093 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.265,7497.78> +08:19:29.093 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.815,7497.78> terrainY=63.8155 tireTerrainGap=-0.000522614 +08:19:29.093 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.265,7497.78> radius=0.45 bottom=<7014.47,63.815,7497.78> fraction=0.452097 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000537872 +08:19:29.094 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:19:29.094 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.588 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:29.589 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:19:30.095 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5312,7499.74> up=0.994218 +08:19:30.095 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0403679 angularSpeed=0.0725902 +08:19:30.096 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:30.096 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +08:19:30.096 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3115 tireTerrainGap=0.00211716 +08:19:30.096 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 +08:19:30.096 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5945,7497.72> +08:19:30.096 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1445,7497.72> terrainY=64.1427 tireTerrainGap=0.00178528 +08:19:30.097 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 +08:19:30.097 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2599,7497.83> +08:19:30.097 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8099,7497.83> terrainY=63.8127 tireTerrainGap=-0.00284195 +08:19:30.097 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2599,7497.83> radius=0.45 bottom=<7014.51,63.8099,7497.83> fraction=0.441667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00283432 +08:19:30.097 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.098 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:30.606 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:30.606 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:30.607 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:30.607 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:19:31.109 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:19:31.109 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:19:31.110 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:31.110 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:19:31.110 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00163269 +08:19:31.110 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 +08:19:31.110 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:19:31.110 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00248718 +08:19:31.111 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 +08:19:31.111 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.84> +08:19:31.111 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.84> terrainY=63.8122 tireTerrainGap=-0.00204086 +08:19:31.111 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.84> radius=0.45 bottom=<7014.51,63.8102,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:19:31.111 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:31.112 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:19:31.618 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.619 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.619 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:31.619 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:32.127 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.5289,7499.75> up=0.994143 +08:19:32.127 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:19:32.127 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:19:32.127 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:19:32.128 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00163269 +08:19:32.128 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 +08:19:32.128 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5939,7497.73> +08:19:32.128 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1439,7497.73> terrainY=64.1414 tireTerrainGap=0.00248718 +08:19:32.128 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 +08:19:32.129 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2602,7497.84> +08:19:32.129 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8102,7497.84> terrainY=63.8122 tireTerrainGap=-0.00204086 +08:19:32.129 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2602,7497.84> radius=0.45 bottom=<7014.51,63.8102,7497.84> fraction=0.445278 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00203705 +08:19:32.129 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:19:32.129 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:19:32.130 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:19:32.142 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:19:32.143 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:19:32.143 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:19:32.270 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:19:32.312 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:19:32.551 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:19:32.552 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:19:32.552 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:19:32.552 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:19:32.552 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:19:32.552 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:19:32.553 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:19:32.554 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:19:32.554 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:19:32.554 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:19:32.558 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:19:32.561 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:19:32.561 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:19:32.562 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:19:43.674 SCRIPT : ERR SMOKE PASS: authored physical mortar and four-person crew initialize +08:19:43.675 SCRIPT : ERR SMOKE PASS: mortar has a dedicated physical manpack operator +08:19:43.675 SCRIPT : ERR SMOKE PASS: mortar starts with exactly 27 physical HE shells +08:19:58.826 SCRIPT : ERR SMOKE PASS: depleted mortar inventory stays empty without fabricated ammunition +08:20:10.948 SCRIPT : ERR SMOKE PASS: lost mortar and crew remain lost without replacement spawning +08:20:10.949 SCRIPT : INFO: KILL SUICIDE: jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) from US faction at <6088.5, 211.39, 7158.5> killed himself! +08:20:14.991 SCRIPT : ERR SMOKE PASS: native damage kills prisoner +08:20:14.992 SCRIPT : ERR SMOKE PASS: death selects spectator without another life +08:20:14.992 SCRIPT : ERR SMOKE PASS: spectator camera activates after native death +08:20:41.641 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:20:41.641 SCRIPT : ERR SMOKE PASS: death exhausts round life and reaches defeat after spectator grace +08:20:41.641 SCRIPT : ERR SMOKE COMPLETE: terminal=6 lostHelicopterCase=0 playerDeathCase=1 +08:20:41.745 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:20:41.748 SCRIPT (W): Slot_Chat Has no Content! +08:20:41.748 SCRIPT (W): Slot_VON Has no Content! +08:20:41.748 SCRIPT (W): Slot_GameVersion Has no Content! +08:20:41.748 SCRIPT (W): Slot_Notifications Has no Content! +08:20:43.795 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:20:43.796 SCRIPT : -- Stack trace -- +08:20:43.796 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:20:43.796 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:20:43.796 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:20:43.796 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:20:43.796 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:20:43.796 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:20:43.796 SCRIPT : ----------------- +08:20:43.797 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:20:43.797 SCRIPT : -- Stack trace -- +08:20:43.797 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:20:43.797 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:20:43.797 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:20:43.797 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:20:43.797 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:20:43.797 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:20:43.798 SCRIPT : ----------------- +08:20:43.800 SCRIPT (W): Slot_Chat Has no Content! +08:20:43.800 SCRIPT (W): Slot_VON Has no Content! +08:20:43.800 SCRIPT (W): Slot_GameVersion Has no Content! +08:20:43.800 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-081837/source-provenance.json b/docs/evidence/native-2026-09-19-081837/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-081837/source-sha256.json b/docs/evidence/native-2026-09-19-081837/source-sha256.json new file mode 100644 index 0000000..bc9ae22 --- /dev/null +++ b/docs/evidence/native-2026-09-19-081837/source-sha256.json @@ -0,0 +1,161 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-082123/console.log.txt b/docs/evidence/native-2026-09-19-082123/console.log.txt new file mode 100644 index 0000000..f27d280 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/console.log.txt @@ -0,0 +1,595 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-21-23\console.log started at 2026-09-19 08:21:23 (2026-09-19 06:21:23 UTC) + +08:21:23.600 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-21-23' to filesystem under name logs +08:21:23.600 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:21:23.600 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:21:23.601 PROFILING : Workbench Create Engine took: 10.006500 ms +08:21:24.637 INIT : INIT : Workbench Init Engine +08:21:24.637 ENGINE : Initializing engine, version 192142 +08:21:24.637 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 mortar-fire -noThrow -disableCrashReporter +08:21:24.646 ENGINE : Addon dirs: +08:21:24.646 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +08:21:24.646 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:21:24.646 ENGINE : dir: './addons' +08:21:24.646 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:21:24.646 ENGINE : Available addons: +08:21:24.646 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:21:24.646 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:21:24.646 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:21:24.646 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:21:24.646 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:21:24.646 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:21:24.646 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:21:24.646 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:21:24.647 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:21:24.647 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:21:24.647 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:21:24.647 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:21:24.763 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:21:24.766 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:21:24.766 ENGINE : CPU vendor : AuthenticAMD +08:21:24.766 ENGINE : CPU type : 2 +08:21:24.766 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:21:24.766 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:21:24.766 ENGINE : CPU count logical : 16 +08:21:24.766 ENGINE : CPU count physical : 8 +08:21:24.766 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:21:24.766 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:21:24.767 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:21:24.767 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:21:24.767 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:21:24.768 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:21:24.768 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:21:24.908 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:21:24.910 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:21:24.910 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-21-23/resourceDatabase.rdb) +08:21:25.057 RESOURCES : RESOURCES : ResourceDB: full scan +08:21:25.062 RESOURCES : RESOURCES : scanning... +08:21:25.062 RESOURCES : RESOURCES : scanning @"ERR_Chat" +08:21:25.064 RESOURCES : RESOURCES : scanning @"ERR_Map" +08:21:25.066 RESOURCES : RESOURCES : scanning @"ERR_Intel" +08:21:25.066 RESOURCES : RESOURCES : scanning @"ERR_Ai" +08:21:25.068 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:21:25.071 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:21:25.206 RESOURCES : RESOURCES : scanning @"core" +08:21:25.210 RESOURCES : RESOURCES : scanning @"profile" +08:21:25.210 RESOURCES : RESOURCES : scanning @"logs" +08:21:25.211 RESOURCES : RESOURCES : processing meta-files... +08:21:25.280 RESOURCES : RESOURCES : processing files... +08:21:25.292 INIT : Workbench startup +08:21:25.292 INIT : Workbench Init Engine +08:21:25.292 RESOURCES : ResourceDB: full scan +08:21:25.292 RESOURCES : processing files... +08:21:25.292 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:21:25.292 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:21:25.292 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:21:25.292 RESOURCES : RESOURCES : processing folders... +08:21:25.299 RESOURCES : RESOURCES : creating GUID-item mapping... +08:21:25.316 RESOURCES : RESOURCES : building tree... +08:21:25.377 PROFILING : ResourceDB: full scan took: 320.618200 ms +08:21:25.378 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:21:25.380 RESOURCES : ResourceDB: written 741/741 bytes +08:21:25.380 RESOURCES : ResourceDB: cache successfully saved +08:21:25.380 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:21:25.382 RESOURCES : ResourceDB: written 750/750 bytes +08:21:25.382 RESOURCES : ResourceDB: cache successfully saved +08:21:25.382 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:21:25.383 RESOURCES : ResourceDB: written 227/227 bytes +08:21:25.383 RESOURCES : ResourceDB: cache successfully saved +08:21:25.384 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:21:25.385 RESOURCES : ResourceDB: written 1230/1230 bytes +08:21:25.385 RESOURCES : ResourceDB: cache successfully saved +08:21:25.385 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:21:25.387 RESOURCES : ResourceDB: written 6147/6147 bytes +08:21:25.387 RESOURCES : ResourceDB: cache successfully saved +08:21:25.387 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:21:25.388 RESOURCES : ResourceDB: written 206/206 bytes +08:21:25.388 RESOURCES : ResourceDB: cache successfully saved +08:21:25.388 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-21-23/resourceDatabase.rdb) +08:21:25.390 RESOURCES : ResourceDB: written 162/162 bytes +08:21:25.390 RESOURCES : ResourceDB: cache successfully saved +08:21:25.390 ENGINE : GameProject load +08:21:25.390 ENGINE : Loaded addons: +08:21:25.390 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:21:25.390 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:21:25.390 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:21:25.390 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:21:25.390 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:21:25.390 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:21:25.390 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:21:25.392 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:21:25.393 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:21:25.393 ENGINE : Engine user settings config loaded +08:21:25.393 PROFILING : Settings changed took: 0.001800 ms +08:21:25.501 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:21:25.502 RENDER : Basic screen setup: +08:21:25.502 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:21:25.502 RENDER : MSAA : none +08:21:25.513 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:21:25.513 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:21:25.513 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:21:25.513 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:21:25.513 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:21:25.513 RENDER : AMD AGS correctly initialized +08:21:25.514 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 +08:21:25.514 RENDER : Detected output devices: +08:21:25.514 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:21:25.514 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:21:25.514 RENDER : Concurrent frames limit 2 +08:21:25.590 RENDER : DX12 device successfully created by AMD AGS library +08:21:25.590 RENDER : * user markers not supported in this version AMD SW +08:21:25.590 RENDER : Graphics device features +08:21:25.590 RENDER : Needed: +08:21:25.590 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:21:25.590 RENDER : Optional: +08:21:25.590 RENDER : * Allow tearing (VSYNC) : 1 +08:21:25.590 RENDER : * 16 bits : 1 +08:21:25.590 RENDER : * Resource heap tier : 3 +08:21:25.590 RENDER : * Persistent heaps (DRED) : 1 +08:21:25.590 RENDER : * DRED 1.2 is supported by compiler +08:21:25.612 RENDER : Main RT format setup. +08:21:25.612 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:21:25.612 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:21:25.614 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:21:25.643 PROFILING : Settings changed took: 0.016500 ms +08:21:26.104 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:21:26.104 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:21:26.104 AUDIO : Audio client: +08:21:26.104 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:21:26.108 RENDER : RENDER : Reload shaders +08:21:26.108 RENDER : Enfusion shader version 13 +08:21:26.108 INIT : INIT : ShaderListReload +08:21:26.108 PROFILING : ShaderListReload took: 0.000500 ms +08:21:26.251 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:21:26.251 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:21:26.252 AUDIO : Audio client: +08:21:26.252 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:21:26.503 RENDER : Loaded 3752 newer shader binaries +08:21:26.503 PROFILING : Reload shaders took: 394.686400 ms +08:21:26.503 ENGINE : Initializing inputs. +08:21:26.516 NETWORK : Initializing networking. +08:21:26.516 NETWORK : Using new GameRplScheduler. +08:21:26.516 SCRIPT : SCRIPT : Initializing scripts +08:21:26.516 SCRIPT : SCRIPT : ScriptProjectManager init +08:21:28.713 PROFILING : ScriptProjectManager init took: 2196.241200 ms +08:21:28.803 PROFILING : Initializing scripts took: 2286.507100 ms +08:21:28.820 ENGINE : Enfusion engine successfully created. +08:21:28.820 PROFILING : Workbench Init Engine took: 4182.693800 ms +08:21:28.820 INIT : INIT : Workbench Create Game +08:21:28.831 GUI : Using default language (en_us) +08:21:28.831 GUI : Loading 'en_us' localization file. +08:21:28.832 INIT : INIT : Loading StringTable +08:21:28.854 PROFILING : Loading StringTable took: 22.863300 ms +08:21:28.854 SCRIPT : SCRIPT : Compiling GameLib scripts +08:21:28.923 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 +08:21:28.923 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 +08:21:28.924 PROFILING : Compiling GameLib scripts took: 69.639300 ms +08:21:28.924 SCRIPT : SCRIPT : Compiling Game scripts +08:21:30.235 INIT : Workbench Create Game +08:21:30.235 SCRIPT : Compiling Game scripts +08:21:30.235 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:21:30.235 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:21:30.387 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.517 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:21:30.550 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:21:30.689 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:21:30.748 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:21:30.748 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:21:30.750 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:21:30.792 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.792 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.794 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:21:30.794 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:21:30.819 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.852 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:21:31.128 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: e963af0e +08:21:31.135 SCRIPT : Module: Game; loaded 5756x files; 11291x classes; used 33115K 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: 9a825aa0 +08:21:31.173 PROFILING : Compiling Game scripts took: 2248.963000 ms +08:21:31.181 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:21:31.218 ENGINE : Game successfully created. +08:21:31.219 PROFILING : Workbench Create Game took: 2399.298500 ms +08:21:31.228 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +08:21:32.038 INIT : INIT : Workbench Reload Game +08:21:32.040 ENGINE : Game destroyed. +08:21:32.045 GUI : Using default language (en_us) +08:21:32.046 GUI : Loading 'en_us' localization file. +08:21:32.046 INIT : INIT : Loading StringTable +08:21:32.055 PROFILING : Loading StringTable took: 8.949200 ms +08:21:32.055 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:21:32.062 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:21:32.062 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:21:32.062 ENGINE : Game successfully created. +08:21:32.062 ENGINE : Game successfully initialized. +08:21:32.062 PROFILING : Workbench Reload Game took: 23.727300 ms +08:21:32.778 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:21:33.792 PROFILING : Entities load took: 1013.207400 ms +08:21:33.807 WORLD : WORLD : CreateEntities +08:21:33.814 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:21:33.814 PROFILING : NotifyBeforeEntitiesCreated took: 0.005700 ms +08:21:33.814 WORLD : WORLD : Wait for preloading data +08:21:33.814 PROFILING : Wait for preloading data took: 0.004300 ms +08:21:33.928 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:21:33.928 PROFILING : PROFILING : Terrain load +08:21:35.906 PROFILING : Terrain load took: 1978.066600 ms +08:21:39.890 WORLD : CreateEntities +08:21:39.890 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" +08:21:39.891 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:21:39.891 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:21:50.678 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:21:50.678 PROFILING : NotifyBeforeEntitiesInitialized took: 0.006900 ms +08:21:51.124 WORLD : WORLD : NotifyEntitiesInitialized +08:21:51.124 TERRAIN : TERRAIN : Initializing road networks... +08:21:51.127 PROFILING : Initializing road networks... took: 2.408900 ms +08:21:51.127 PROFILING : NotifyEntitiesInitialized took: 2.902400 ms +08:21:51.128 PROFILING : CreateEntities took: 17319.878600 ms +08:21:51.313 PROFILING : * WorldEditor: LoadWorld: 18540.845100 ms +08:21:52.793 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:21:52.793 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:21:52.794 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:21:52.795 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:21:52.875 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:21:52.902 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:21:52.925 BACKEND : Attempting online Game Config instead. +08:21:56.219 INIT : INIT : Workbench Reload Game +08:21:56.221 ENGINE : Game destroyed. +08:21:56.227 GUI : Using default language (en_us) +08:21:56.228 GUI : Loading 'en_us' localization file. +08:21:56.228 INIT : INIT : Loading StringTable +08:21:56.248 PROFILING : Loading StringTable took: 20.103500 ms +08:21:56.248 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:21:56.258 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:21:56.258 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:21:56.258 ENGINE : Game successfully created. +08:21:56.258 ENGINE : Game successfully initialized. +08:21:56.258 PROFILING : Workbench Reload Game took: 39.059900 ms +08:21:56.261 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:21:56.313 PLATFORM : Save data from container 'settings' have been loaded +08:21:56.403 PLATFORM : Save data from container 'sessions' have been loaded +08:21:56.404 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:21:56.404 ENGINE : Game user settings config loaded +08:21:56.501 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:21:56.506 WORLD : WORLD : Game::LoadEntities +08:21:56.506 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:21:56.507 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:21:56.507 WORLD : WORLD : CreateEntities +08:21:56.507 WORLD : WORLD : CreateEntities +08:21:56.507 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:21:56.519 RESOURCES : Loaded mission headers from 7 addon(s)! +08:21:56.519 PROFILING : NotifyBeforeEntitiesCreated took: 12.080000 ms +08:21:56.519 WORLD : WORLD : Wait for preloading data +08:21:56.519 PROFILING : Wait for preloading data took: 0.000600 ms +08:22:01.309 WORLD : Game::LoadEntities +08:22:01.309 WORLD : CreateEntities +08:22:01.309 WORLD : CreateEntities +08:22:01.309 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" +08:22:01.309 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:22:01.309 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:22:02.789 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:22:02.789 ENTITY : CreateComponent 'Hierarchy' +08:22:02.789 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>') +08:22:02.789 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:22:02.789 ENTITY : CreateComponent 'Hierarchy' +08:22:02.789 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>') +08:22:02.789 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:22:02.789 ENTITY : CreateComponent 'Hierarchy' +08:22:02.789 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>') +08:22:02.795 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:22:02.795 ENTITY : CreateComponent 'Hierarchy' +08:22:02.795 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>') +08:22:02.795 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:22:02.795 ENTITY : CreateComponent 'Hierarchy' +08:22:02.796 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>') +08:22:02.796 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:22:02.796 ENTITY : CreateComponent 'Hierarchy' +08:22:02.796 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>') +08:22:02.801 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:22:02.801 ENTITY : CreateComponent 'Hierarchy' +08:22:02.801 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>') +08:22:02.801 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:22:02.801 ENTITY : CreateComponent 'Hierarchy' +08:22:02.801 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>') +08:22:02.801 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:22:02.801 ENTITY : CreateComponent 'Hierarchy' +08:22:02.801 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>') +08:22:08.183 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:22:08.183 PROFILING : NotifyBeforeEntitiesInitialized took: 0.037300 ms +08:22:10.236 WORLD : InitEntities 'world' +08:22:10.236 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:22:10.236 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:22:10.260 WORLD : InitEntities 'world' +08:22:10.260 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:22:10.260 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:22:10.261 WORLD : WORLD : NotifyEntitiesInitialized +08:22:10.261 TERRAIN : TERRAIN : Initializing road networks... +08:22:10.263 PROFILING : Initializing road networks... took: 2.551800 ms +08:22:10.263 DEFAULT : DEFAULT : WorldVolumesCollection +08:22:10.324 PROFILING : WorldVolumesCollection took: 60.265100 ms +08:22:10.324 INIT : INIT : SoundWorldInit +08:22:10.337 PROFILING : SoundWorldInit took: 13.421700 ms +08:22:10.337 PROFILING : NotifyEntitiesInitialized took: 76.495800 ms +08:22:10.337 PROFILING : CreateEntities took: 13829.911700 ms +08:22:10.337 PROFILING : CreateEntities took: 13830.073700 ms +08:22:10.338 WORLD : WORLD : Wait for preloading data around camera +08:22:10.338 PROFILING : Wait for preloading data around camera took: 0.001000 ms +08:22:10.338 WORLD : WORLD : EOnActivate +08:22:10.376 PROFILING : EOnActivate took: 37.873900 ms +08:22:10.376 PROFILING : Game::LoadEntities took: 13869.880500 ms +08:22:10.661 DEFAULT : Entered offline game state. +08:22:10.765 NETWORK : Player connected: connectionID=2147483646 +08:22:10.765 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:22:10.765 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:22:10.769 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:22:10.769 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:22:10.769 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:22:10.770 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! +08:22:10.770 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! +08:22:10.772 SCRIPT (W): Can't open config file "" +08:22:10.780 WORLD : InitEntities 'world' +08:22:10.780 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:22:10.780 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:22:10.780 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:22:10.780 SCRIPT (W): Slot_Chat Has no Content! +08:22:10.780 SCRIPT (W): Slot_VON Has no Content! +08:22:10.781 SCRIPT (W): Slot_AvailableActions Has no Content! +08:22:10.781 SCRIPT (W): Slot_Vehicle Has no Content! +08:22:10.781 SCRIPT (W): Slot_GameVersion Has no Content! +08:22:10.781 SCRIPT (W): Slot_Notifications Has no Content! +08:22:10.781 SCRIPT (W): Slot_Hints Has no Content! +08:22:10.794 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:22:10.794 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:22:10.794 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:22:10.794 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. +08:22:10.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. +08:22:10.798 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:22:10.798 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:22:10.799 NETWORK : Players connecting: 0 +08:22:10.799 NETWORK : Players connected: 1 / 1 +08:22:10.832 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +08:22:10.833 PROFILING : Workbench startup took: 47299.256500 ms +08:22:10.854 WORLD : Frame start +08:22:10.854 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:22:10.870 WORLD : UpdateEntities +08:22:10.870 WORLD : Frame +08:22:10.870 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:22:11.051 WORLD : UpdateEntities +08:22:11.051 WORLD : PostFrame +08:22:11.051 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:22:11.051 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:22:11.097 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:22:11.097 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:22:11.097 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:22:11.097 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:22:11.228 RENDER : RENDER : ObjectsHeightMap::Build +08:22:11.228 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:22:11.406 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 177.830200 ms +08:22:11.414 PROFILING : ObjectsHeightMap::Build took: 185.784000 ms +08:22:12.577 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:22:12.598 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:22:12.599 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:22:12.626 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:22:12.628 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:22:12.681 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:22:12.681 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:22:12.687 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:22:12.741 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:22:12.742 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:22:12.745 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:22:12.745 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:22:12.749 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:22:12.751 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:22:12.751 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:22:12.753 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:22:12.753 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:22:12.753 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:22:12.753 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:22:12.754 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:22:12.754 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:22:12.754 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 +08:22:12.754 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:22:12.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:22:12.755 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 +08:22:12.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:22:12.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:22:12.755 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 +08:22:12.755 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:13.539 WORLD : UpdateEntities +08:22:13.539 WORLD : AfterPostSimulate +08:22:13.539 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.857 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5303,7499.7> up=0.995681 +08:22:13.857 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315906 angularSpeed=0.0413675 +08:22:13.857 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:13.857 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6153,7501.97> +08:22:13.857 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3153,7501.97> terrainY=63.3164 tireTerrainGap=-0.00106049 +08:22:13.858 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6153,7501.97> radius=0.3 bottom=<7012.07,63.3153,7501.97> fraction=0.44986 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00102997 +08:22:13.858 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6025,7497.71> +08:22:13.858 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1525,7497.71> terrainY=64.1555 tireTerrainGap=-0.00302124 +08:22:13.858 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6025,7497.71> radius=0.45 bottom=<7009.88,64.1525,7497.71> fraction=0.441391 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00289154 +08:22:13.858 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.264,7497.74> +08:22:13.858 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.814,7497.74> terrainY=63.8179 tireTerrainGap=-0.00387955 +08:22:13.859 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.264,7497.74> radius=0.45 bottom=<7014.42,63.814,7497.74> fraction=0.436667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00393295 +08:22:13.859 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:14.111 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.111 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.112 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:14.112 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:14.624 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:14.625 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.625 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.952 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5353,7499.71> up=0.994343 +08:22:14.952 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +08:22:14.953 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:14.953 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6195,7501.99> +08:22:14.953 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3195,7501.99> terrainY=63.3145 tireTerrainGap=0.00498962 +08:22:14.953 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 +08:22:14.953 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6024,7497.71> +08:22:14.953 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00331116 +08:22:14.954 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 +08:22:14.954 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2654,7497.78> +08:22:14.954 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8154,7497.78> terrainY=63.8155 tireTerrainGap=-8.01086e-05 +08:22:14.954 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2654,7497.78> radius=0.45 bottom=<7014.47,63.8154,7497.78> fraction=0.453889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000144958 +08:22:14.954 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:14.954 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:14.954 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.955 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.955 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.453 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:22:15.453 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.453 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.453 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.958 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5311,7499.74> up=0.994306 +08:22:15.958 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0456853 angularSpeed=0.0402736 +08:22:15.958 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:15.958 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6144,7502.01> +08:22:15.959 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3144,7502.01> terrainY=63.3116 tireTerrainGap=0.00285339 +08:22:15.959 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6144,7502.01> radius=0.3 bottom=<7012.07,63.3144,7502.01> fraction=0.467576 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00286865 +08:22:15.959 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.72> +08:22:15.959 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.72> terrainY=64.1426 tireTerrainGap=0.0013504 +08:22:15.959 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.594,7497.72> radius=0.45 bottom=<7009.97,64.144,7497.72> fraction=0.46046 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00130463 +08:22:15.959 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.83> +08:22:15.959 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.83> terrainY=63.8126 tireTerrainGap=-0.00255203 +08:22:15.960 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.83> radius=0.45 bottom=<7014.51,63.81,7497.83> fraction=0.442778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00259018 +08:22:15.960 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:15.960 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:15.960 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.960 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:15.961 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:16.968 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994375 +08:22:16.968 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:22:16.968 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:16.968 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.02> +08:22:16.969 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.02> terrainY=63.3108 tireTerrainGap=0.00168991 +08:22:16.969 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.02> radius=0.3 bottom=<7012.07,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:22:16.969 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5941,7497.72> +08:22:16.969 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1441,7497.72> terrainY=64.1415 tireTerrainGap=0.00260925 +08:22:16.970 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5941,7497.72> radius=0.45 bottom=<7009.98,64.1441,7497.72> fraction=0.466629 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00266266 +08:22:16.970 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.26,7497.84> +08:22:16.970 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.00187302 +08:22:16.970 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.26,7497.84> radius=0.45 bottom=<7014.52,63.81,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:22:16.970 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:16.971 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:16.971 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.971 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.972 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.981 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994375 +08:22:17.981 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:22:17.982 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:17.982 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.02> +08:22:17.982 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.02> terrainY=63.3108 tireTerrainGap=0.00168991 +08:22:17.982 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.02> radius=0.3 bottom=<7012.07,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:22:17.982 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5941,7497.72> +08:22:17.983 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1441,7497.72> terrainY=64.1415 tireTerrainGap=0.00260925 +08:22:17.983 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5941,7497.72> radius=0.45 bottom=<7009.98,64.1441,7497.72> fraction=0.466629 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00266266 +08:22:17.983 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.26,7497.84> +08:22:17.983 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.00187302 +08:22:17.983 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.26,7497.84> radius=0.45 bottom=<7014.52,63.81,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:22:17.983 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:17.984 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.984 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.984 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:22:17.994 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:22:17.995 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:22:17.996 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:22:18.103 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:22:18.143 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:22:18.379 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:22:18.379 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:22:18.379 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:22:18.379 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:22:18.380 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:22:18.380 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:22:18.380 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:22:18.380 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:22:18.380 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:22:18.382 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:22:18.382 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:22:18.389 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:22:18.390 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:22:18.390 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:22:18.390 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:22:18.883 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:22:23.934 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:22:28.975 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing untasked original gun and complete four-person crew start without shots +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing dedicated actual manpack supplies the radio route +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing exactly 27 distinct physical initial HE shells +08:22:29.504 SCRIPT : ERR MORTAR FIXTURE IMPACT: position=<5200,80.1937,6400> batteryDistance=1000; no characters/vehicles in 400m square; production settlement/friendly exclusions passed +08:22:29.504 SCRIPT : ERR SMOKE PASS: mortar firing bounded candidate survey finds an unoccupied production-safe impact area +08:22:29.504 SCRIPT : ERR SMOKE PASS: mortar firing fixture-owned inert report identity exists; no enemy perception is claimed +08:22:29.505 SCRIPT : ERR SMOKE PASS: mortar firing synthetic observation enters actual existing radio uplink once +08:22:34.025 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:39.059 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:44.116 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:49.179 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:54.225 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:59.264 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:04.308 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:09.368 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:14.411 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:19.474 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:24.532 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:28.573 SCRIPT (E): ERR SMOKE FAIL: mortar firing one unchanged fixture source creates only one HQ order +08:23:28.574 SCRIPT (E): ERR SMOKE FAIL: native mortar firing probe failed; see diagnostics diff --git a/docs/evidence/native-2026-09-19-082123/error.log.txt b/docs/evidence/native-2026-09-19-082123/error.log.txt new file mode 100644 index 0000000..82939a0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/error.log.txt @@ -0,0 +1,108 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-21-23\error.log started at 2026-09-19 08:21:25 (2026-09-19 06:21:25 UTC) + +08:21:25.292 INIT : Workbench startup +08:21:25.292 INIT : Workbench Init Engine +08:21:25.292 RESOURCES : ResourceDB: full scan +08:21:25.292 RESOURCES : processing files... +08:21:25.292 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:21:25.292 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:21:25.292 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:21:30.235 INIT : Workbench Create Game +08:21:30.235 SCRIPT : Compiling Game scripts +08:21:30.235 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:21:30.235 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:21:30.387 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.517 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:21:30.550 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:21:30.689 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:21:30.748 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:21:30.748 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:21:30.750 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:21:30.792 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.792 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.794 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:21:30.794 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:21:30.819 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.852 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:21:39.890 WORLD : CreateEntities +08:21:39.890 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" +08:21:39.891 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:21:39.891 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:21:56.261 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:22:01.309 WORLD : Game::LoadEntities +08:22:01.309 WORLD : CreateEntities +08:22:01.309 WORLD : CreateEntities +08:22:01.309 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" +08:22:01.309 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:22:01.309 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:22:02.789 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:22:02.789 ENTITY : CreateComponent 'Hierarchy' +08:22:02.789 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>') +08:22:02.789 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:22:02.789 ENTITY : CreateComponent 'Hierarchy' +08:22:02.789 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>') +08:22:02.789 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:22:02.789 ENTITY : CreateComponent 'Hierarchy' +08:22:02.789 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>') +08:22:02.795 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:22:02.795 ENTITY : CreateComponent 'Hierarchy' +08:22:02.795 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>') +08:22:02.795 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:22:02.795 ENTITY : CreateComponent 'Hierarchy' +08:22:02.796 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>') +08:22:02.796 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:22:02.796 ENTITY : CreateComponent 'Hierarchy' +08:22:02.796 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>') +08:22:02.801 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:22:02.801 ENTITY : CreateComponent 'Hierarchy' +08:22:02.801 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>') +08:22:02.801 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:22:02.801 ENTITY : CreateComponent 'Hierarchy' +08:22:02.801 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>') +08:22:02.801 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:22:02.801 ENTITY : CreateComponent 'Hierarchy' +08:22:02.801 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>') +08:22:10.235 WORLD : InitEntities 'world' +08:22:10.236 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:22:10.236 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:22:10.769 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:22:10.769 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:22:10.769 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:22:10.770 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! +08:22:10.770 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! +08:22:10.771 SCRIPT (W): Can't open config file "" +08:22:10.780 WORLD : InitEntities 'world' +08:22:10.780 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:22:10.780 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:22:10.780 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:22:10.780 SCRIPT (W): Slot_Chat Has no Content! +08:22:10.780 SCRIPT (W): Slot_VON Has no Content! +08:22:10.781 SCRIPT (W): Slot_AvailableActions Has no Content! +08:22:10.781 SCRIPT (W): Slot_Vehicle Has no Content! +08:22:10.781 SCRIPT (W): Slot_GameVersion Has no Content! +08:22:10.781 SCRIPT (W): Slot_Notifications Has no Content! +08:22:10.781 SCRIPT (W): Slot_Hints Has no Content! +08:22:10.794 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:22:10.794 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:22:10.794 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:22:10.794 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. +08:22:10.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. +08:22:10.798 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:22:11.051 WORLD : UpdateEntities +08:22:11.051 WORLD : PostFrame +08:22:11.051 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:22:11.051 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:22:11.097 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:22:11.097 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:22:11.097 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:22:11.097 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:22:13.539 WORLD : UpdateEntities +08:22:13.539 WORLD : AfterPostSimulate +08:22:13.539 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:23:28.573 SCRIPT (E): ERR SMOKE FAIL: mortar firing one unchanged fixture source creates only one HQ order +08:23:28.574 SCRIPT (E): ERR SMOKE FAIL: native mortar firing probe failed; see diagnostics diff --git a/docs/evidence/native-2026-09-19-082123/headless-launch.log.txt b/docs/evidence/native-2026-09-19-082123/headless-launch.log.txt new file mode 100644 index 0000000..f8bc740 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/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: 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. +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x555588361d50 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x555588361d50 +[Gamescope WSI] Destroyed swapchain: 0x555588361d50 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x555588361d50 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x555588361d50 +[Gamescope WSI] Destroyed swapchain: 0x555588361d50 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x555588307450 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-082123/launch-source-sha256.json b/docs/evidence/native-2026-09-19-082123/launch-source-sha256.json new file mode 100644 index 0000000..bc9ae22 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/launch-source-sha256.json @@ -0,0 +1,161 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-082123/launch-source.json b/docs/evidence/native-2026-09-19-082123/launch-source.json new file mode 100644 index 0000000..dd0dace --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "9636a309-a3ad-4cc2-a94c-59b7b219d346", + "captured_unix": 1789798881.8378274, + "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", + "mortar-fire", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "d03cbe8e65c511c957aa1efefb20313975dd3b5e425d43f86211d7a628f7947c" +} diff --git a/docs/evidence/native-2026-09-19-082123/report.json b/docs/evidence/native-2026-09-19-082123/report.json new file mode 100644 index 0000000..0ea7b0c --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/report.json @@ -0,0 +1,15 @@ +{ + "log": "docs/evidence/native-2026-09-19-082123/console.log.txt", + "smoke_completions": 0, + "assertions_passed": 38, + "script_or_runtime_failures": [ + "08:23:28.573 SCRIPT (E): ERR SMOKE FAIL: mortar firing one unchanged fixture source creates only one HQ order", + "08:23:28.574 SCRIPT (E): ERR SMOKE FAIL: native mortar firing probe failed; see diagnostics" + ], + "engine_errors": [ + "08:23:28.573 SCRIPT (E): ERR SMOKE FAIL: mortar firing one unchanged fixture source creates only one HQ order", + "08:23:28.574 SCRIPT (E): ERR SMOKE FAIL: native mortar firing probe failed; see diagnostics" + ], + "missing_end_screen": [], + "scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim" +} diff --git a/docs/evidence/native-2026-09-19-082123/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-082123/rereintroduced-hq.log.txt new file mode 100644 index 0000000..87e1eaa --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/rereintroduced-hq.log.txt @@ -0,0 +1,66 @@ +#1 t=6.6s M0 REGISTER group 1 [session=1789798930-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=1789798930-1] +#3 t=7.5s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=0 operational=1 crew agents=1 fighting=1 inventory HE=0 radio connected=0 cooldown remaining=0s [session=1789798930-1] +#4 t=7.5s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=7.48124s last failure= [session=1789798930-1] +#5 t=8.6s M0 REGISTER group 2 [session=1789798930-1] +#6 t=8.6s M0 REGISTER group 3 [session=1789798930-1] +#7 t=8.6s M0 REGISTER group 4 [session=1789798930-1] +#8 t=8.6s M0 REGISTER group 5 [session=1789798930-1] +#9 t=8.6s M0 REGISTER group 6 [session=1789798930-1] +#10 t=8.6s M0 REGISTER group 7 [session=1789798930-1] +#11 t=12.5s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=0 operational=1 crew agents=4 fighting=4 inventory HE=0 radio connected=1 cooldown remaining=0s [session=1789798930-1] +#12 t=12.5s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=12.5317s last failure= [session=1789798930-1] +#13 t=17.6s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=0 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789798930-1] +#14 t=17.6s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=17.5729s last failure= [session=1789798930-1] +#15 t=17.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=1789798930-1] +#16 t=18.1s M1 FIXTURE REPORT EXPLICIT SYNTHETIC OBSERVATION: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (0s ago) [session=1789798930-1] +#17 t=18.7s M1 TRANSMIT unit 1 -> HQ (long-range) [session=1789798930-1] +#18 t=20.8s M1 RECEIVE HQ received from unit 1 [session=1789798930-1] +#19 t=22.6s M0 MORTAR SITE STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789798930-1] +#20 t=22.6s M0 MORTAR ORDER STATUS site=1 order=0 radio=M0 source=M0 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=22.6225s last failure= [session=1789798930-1] +#21 t=22.8s M5 TRANSMIT HQ -> unit 6 (long-range) [session=1789798930-1] +#22 t=22.8s M4 TRANSMIT HQ -> unit 4 (long-range) [session=1789798930-1] +#23 t=22.8s M3 TRANSMIT HQ -> unit 3 (long-range) [session=1789798930-1] +#24 t=22.8s M2 TRANSMIT HQ -> unit 2 (long-range) [session=1789798930-1] +#25 t=24.8s M5 RECEIVE unit 6 received from HQ [session=1789798930-1] +#26 t=24.8s M5 ORDER DELIVERED group 6 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789798930-1] +#27 t=24.8s M4 RECEIVE unit 4 received from HQ [session=1789798930-1] +#28 t=24.8s M4 ORDER DELIVERED group 4 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789798930-1] +#29 t=24.8s M3 RECEIVE unit 3 received from HQ [session=1789798930-1] +#30 t=24.8s M3 ORDER DELIVERED group 3 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789798930-1] +#31 t=24.8s M2 RECEIVE unit 2 received from HQ [session=1789798930-1] +#32 t=24.8s M2 ORDER DELIVERED group 2 from report M1: X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (7s ago) [session=1789798930-1] +#33 t=26.8s M6 ORDER QUEUED MORTAR ORDER from report M1; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (9s ago) [session=1789798930-1] +#34 t=26.8s M0 MORTAR COMMAND site=1 order=1 radio=M0 source=M1 position=<6000,202.788,7000>; requested rounds=8 HE radius=40m; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (9s ago) [session=1789798930-1] +#35 t=27.7s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789798930-1] +#36 t=27.7s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=1 native action=-1 shell committed=0 order shots=0 total shots=0 age=0.869494s last failure= [session=1789798930-1] +#37 t=27.8s M6 TRANSMIT HQ -> unit 1 (long-range) [session=1789798930-1] +#38 t=29.8s M6 RECEIVE unit 1 received from HQ [session=1789798930-1] +#39 t=29.8s M6 MORTAR AIM site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; native activity created; latest source=M1 observed=X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (12s ago) [session=1789798930-1] +#40 t=30.8s M6 MORTAR ACTIVITY site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=native state=1; age=0.999932s aim age=30.8046s committed=0 shots=0; previous= repeated polls omitted=0 [session=1789798930-1] +#41 t=32.7s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=27.0899s [session=1789798930-1] +#42 t=32.7s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=2.91013s last failure= [session=1789798930-1] +#43 t=32.9s M6 MORTAR AIM START site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=solving moving intercept; latest source=M1; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (15s ago); previous= repeated polls omitted=0 [session=1789798930-1] +#44 t=32.9s M6 MORTAR AIM SOLUTION site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=ready; predicted impact=<5207.07,78.6842,6387.75> flight=24.2333s charge index=2 aim height offset=2610.33m latest source=M1; previous= repeated polls omitted=0 [session=1789798930-1] +#45 t=37.8s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=22.0274s [session=1789798930-1] +#46 t=37.8s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=7.97259s last failure= [session=1789798930-1] +#47 t=42.8s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=16.9816s [session=1789798930-1] +#48 t=42.8s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=13.0184s last failure= [session=1789798930-1] +#49 t=47.9s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=11.9429s [session=1789798930-1] +#50 t=47.9s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=18.0571s last failure= [session=1789798930-1] +#51 t=52.9s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=6.89823s [session=1789798930-1] +#52 t=52.9s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=23.1018s last failure= [session=1789798930-1] +#53 t=57.2s M6 MORTAR WITHHELD site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=fresh aim solution required; ; previous= repeated polls omitted=0 [session=1789798930-1] +#54 t=57.2s M6 MORTAR SHOOT NODE site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=authorization rejected; fresh aim solution required; ; previous= repeated polls omitted=0 [session=1789798930-1] +#55 t=58s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=1.83852s [session=1789798930-1] +#56 t=58s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=1 route pending=0 native action=1 shell committed=0 order shots=0 total shots=0 age=28.1615s last failure=fresh aim solution required; [session=1789798930-1] +#57 t=58s M6 MORTAR REPEATS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; phase=ACTIVITY reason=native state=1 repeated polls omitted=26 [session=1789798930-1] +#58 t=58s M6 MORTAR ORDER END site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; reason=native aim or firing authorization rejected observed shots=0 shell committed=0 elapsed=28.184s last failure=fresh aim solution required; [session=1789798930-1] +#59 t=63s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=4.97999s [session=1789798930-1] +#60 t=63s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=33.204s last failure=fresh aim solution required; [session=1789798930-1] +#61 t=68.1s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789798930-1] +#62 t=68.1s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=38.2674s last failure=fresh aim solution required; [session=1789798930-1] +#63 t=73.1s M6 MORTAR SITE STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; claimed=1 startup=1 operational=1 crew agents=4 fighting=4 inventory HE=27 radio connected=1 cooldown remaining=0s [session=1789798930-1] +#64 t=73.1s M6 MORTAR ORDER STATUS site=1 order=1 radio=M6 source=M1 position=<6000,202.788,7000>; open=0 route pending=0 native action=-1 shell committed=0 order shots=0 total shots=0 age=43.3251s last failure=fresh aim solution required; [session=1789798930-1] +#65 t=77.1s M7 ORDER QUEUED MORTAR ORDER from report M1; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (59s ago) [session=1789798930-1] +#66 t=77.1s M0 MORTAR COMMAND site=1 order=2 radio=M0 source=M1 position=<6000,202.788,7000>; requested rounds=8 HE radius=40m; X=5200 Z=6400: at least 1 spotted nearby; on foot; 0 km/h, azimuth 0 degrees (stationary); seen weapons: fixture observation; vector X/Z=[0,0] m/s (59s ago) [session=1789798930-1] diff --git a/docs/evidence/native-2026-09-19-082123/runner.json.txt b/docs/evidence/native-2026-09-19-082123/runner.json.txt new file mode 100644 index 0000000..bbf1b33 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789799009.9275858, + "console_sha256": "e7b7a8fdc1b845ba39b14daab616519a46d8eb69815f87d5e1e2d301715966c7", + "end_source_sha256": "d03cbe8e65c511c957aa1efefb20313975dd3b5e425d43f86211d7a628f7947c", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "9636a309-a3ad-4cc2-a94c-59b7b219d346", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "d03cbe8e65c511c957aa1efefb20313975dd3b5e425d43f86211d7a628f7947c", + "started_unix": 1789798881.8379025, + "result": "test-failed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-21-23", + "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-082123/script.log.txt b/docs/evidence/native-2026-09-19-082123/script.log.txt new file mode 100644 index 0000000..508ab74 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/script.log.txt @@ -0,0 +1,278 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-21-23\script.log started at 2026-09-19 08:21:26 (2026-09-19 06:21:26 UTC) + +08:21:26.516 SCRIPT : SCRIPT : Initializing scripts +08:21:26.516 SCRIPT : SCRIPT : ScriptProjectManager init +08:21:28.854 SCRIPT : SCRIPT : Compiling GameLib scripts +08:21:28.923 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 +08:21:28.923 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 +08:21:28.924 SCRIPT : SCRIPT : Compiling Game scripts +08:21:30.235 SCRIPT : Compiling Game scripts +08:21:30.235 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:21:30.235 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:21:30.387 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.517 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:21:30.550 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:21:30.653 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:21:30.689 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:21:30.748 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:21:30.748 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:21:30.750 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:21:30.792 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.792 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.794 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:21:30.794 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:21:30.819 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:21:30.852 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:21:31.128 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: e963af0e +08:21:31.135 SCRIPT : Module: Game; loaded 5756x files; 11291x classes; used 33115K 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: 9a825aa0 +08:21:32.062 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:21:32.062 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:21:52.875 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:21:52.875 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:21:52.876 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:21:52.877 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:21:52.878 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:21:52.879 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:21:52.902 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:21:56.258 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:21:56.258 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:22:10.236 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:22:10.260 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:22:10.770 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! +08:22:10.770 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! +08:22:10.772 SCRIPT (W): Can't open config file "" +08:22:10.780 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:22:10.780 SCRIPT (W): Slot_Chat Has no Content! +08:22:10.780 SCRIPT (W): Slot_VON Has no Content! +08:22:10.781 SCRIPT (W): Slot_AvailableActions Has no Content! +08:22:10.781 SCRIPT (W): Slot_Vehicle Has no Content! +08:22:10.781 SCRIPT (W): Slot_GameVersion Has no Content! +08:22:10.781 SCRIPT (W): Slot_Notifications Has no Content! +08:22:10.781 SCRIPT (W): Slot_Hints Has no Content! +08:22:10.794 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. +08:22:10.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. +08:22:10.798 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:22:10.854 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:22:10.870 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:22:11.051 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:22:12.577 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:22:12.598 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:22:12.599 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:22:12.626 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:22:12.628 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:22:12.681 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:22:12.681 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:22:12.687 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:22:12.741 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:22:12.742 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:22:12.745 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:22:12.745 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:22:12.749 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:22:12.751 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:22:12.751 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:22:12.753 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:22:12.753 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:22:12.753 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:22:12.753 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:22:12.754 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:22:12.754 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:22:12.754 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 +08:22:12.754 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:22:12.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:22:12.755 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 +08:22:12.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:22:12.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:22:12.755 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 +08:22:12.755 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:12.756 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.605 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:13.857 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5303,7499.7> up=0.995681 +08:22:13.857 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315906 angularSpeed=0.0413675 +08:22:13.857 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:13.857 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6153,7501.97> +08:22:13.857 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3153,7501.97> terrainY=63.3164 tireTerrainGap=-0.00106049 +08:22:13.858 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6153,7501.97> radius=0.3 bottom=<7012.07,63.3153,7501.97> fraction=0.44986 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00102997 +08:22:13.858 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6025,7497.71> +08:22:13.858 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1525,7497.71> terrainY=64.1555 tireTerrainGap=-0.00302124 +08:22:13.858 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6025,7497.71> radius=0.45 bottom=<7009.88,64.1525,7497.71> fraction=0.441391 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00289154 +08:22:13.858 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.264,7497.74> +08:22:13.858 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.814,7497.74> terrainY=63.8179 tireTerrainGap=-0.00387955 +08:22:13.859 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.264,7497.74> radius=0.45 bottom=<7014.42,63.814,7497.74> fraction=0.436667 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00393295 +08:22:13.859 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:14.111 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.111 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.112 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:14.112 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:22:14.624 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:14.625 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.625 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.952 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5353,7499.71> up=0.994343 +08:22:14.952 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954449 angularSpeed=0.027426 +08:22:14.953 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:14.953 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6195,7501.99> +08:22:14.953 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3195,7501.99> terrainY=63.3145 tireTerrainGap=0.00498962 +08:22:14.953 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 +08:22:14.953 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6024,7497.71> +08:22:14.953 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00331116 +08:22:14.954 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 +08:22:14.954 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2654,7497.78> +08:22:14.954 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8154,7497.78> terrainY=63.8155 tireTerrainGap=-8.01086e-05 +08:22:14.954 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2654,7497.78> radius=0.45 bottom=<7014.47,63.8154,7497.78> fraction=0.453889 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000144958 +08:22:14.954 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:14.954 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:14.954 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.955 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:22:14.955 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.453 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:22:15.453 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.453 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.453 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.958 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5311,7499.74> up=0.994306 +08:22:15.958 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0456853 angularSpeed=0.0402736 +08:22:15.958 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:15.958 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6144,7502.01> +08:22:15.959 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3144,7502.01> terrainY=63.3116 tireTerrainGap=0.00285339 +08:22:15.959 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6144,7502.01> radius=0.3 bottom=<7012.07,63.3144,7502.01> fraction=0.467576 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00286865 +08:22:15.959 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.72> +08:22:15.959 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.72> terrainY=64.1426 tireTerrainGap=0.0013504 +08:22:15.959 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.594,7497.72> radius=0.45 bottom=<7009.97,64.144,7497.72> fraction=0.46046 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00130463 +08:22:15.959 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.26,7497.83> +08:22:15.959 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.81,7497.83> terrainY=63.8126 tireTerrainGap=-0.00255203 +08:22:15.960 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.26,7497.83> radius=0.45 bottom=<7014.51,63.81,7497.83> fraction=0.442778 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00259018 +08:22:15.960 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:15.960 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:15.960 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:22:15.960 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:15.961 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:16.467 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:22:16.968 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994375 +08:22:16.968 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:22:16.968 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:16.968 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.02> +08:22:16.969 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.02> terrainY=63.3108 tireTerrainGap=0.00168991 +08:22:16.969 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.02> radius=0.3 bottom=<7012.07,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:22:16.969 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5941,7497.72> +08:22:16.969 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1441,7497.72> terrainY=64.1415 tireTerrainGap=0.00260925 +08:22:16.970 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5941,7497.72> radius=0.45 bottom=<7009.98,64.1441,7497.72> fraction=0.466629 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00266266 +08:22:16.970 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.26,7497.84> +08:22:16.970 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.00187302 +08:22:16.970 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.26,7497.84> radius=0.45 bottom=<7014.52,63.81,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:22:16.970 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:16.971 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:16.971 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.971 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:16.972 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.473 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.981 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5297,7499.75> up=0.994375 +08:22:17.981 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:22:17.982 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:22:17.982 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6125,7502.02> +08:22:17.982 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3125,7502.02> terrainY=63.3108 tireTerrainGap=0.00168991 +08:22:17.982 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6125,7502.02> radius=0.3 bottom=<7012.07,63.3125,7502.02> fraction=0.462159 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00167465 +08:22:17.982 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.98,64.5941,7497.72> +08:22:17.983 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.98,64.1441,7497.72> terrainY=64.1415 tireTerrainGap=0.00260925 +08:22:17.983 SCRIPT : ERR GEAR SUPPORT: center=<7009.98,64.5941,7497.72> radius=0.45 bottom=<7009.98,64.1441,7497.72> fraction=0.466629 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00266266 +08:22:17.983 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.52,64.26,7497.84> +08:22:17.983 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.52,63.81,7497.84> terrainY=63.8119 tireTerrainGap=-0.00187302 +08:22:17.983 SCRIPT : ERR GEAR SUPPORT: center=<7014.52,64.26,7497.84> radius=0.45 bottom=<7014.52,63.81,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:22:17.983 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:22:17.984 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.984 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:22:17.984 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:22:17.994 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:22:17.995 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:22:17.996 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:22:18.103 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:22:18.143 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:22:18.379 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:22:18.379 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:22:18.379 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:22:18.380 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:22:18.380 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:22:18.380 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:22:18.380 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:22:18.380 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:22:18.380 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:22:18.381 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:22:18.382 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:22:18.382 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:22:18.386 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:22:18.389 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:22:18.389 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:22:18.390 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:22:18.390 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:22:18.390 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:22:18.883 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:22:23.934 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:22:28.975 SCRIPT : ERR MORTAR FIXTURE: step=0 startup=0 source=M0 observedEvents=0 ready=1 failure= +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing untasked original gun and complete four-person crew start without shots +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.484 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing initial physical crew member is conscious and unique +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing dedicated actual manpack supplies the radio route +08:22:29.485 SCRIPT : ERR SMOKE PASS: mortar firing exactly 27 distinct physical initial HE shells +08:22:29.504 SCRIPT : ERR MORTAR FIXTURE IMPACT: position=<5200,80.1937,6400> batteryDistance=1000; no characters/vehicles in 400m square; production settlement/friendly exclusions passed +08:22:29.504 SCRIPT : ERR SMOKE PASS: mortar firing bounded candidate survey finds an unoccupied production-safe impact area +08:22:29.504 SCRIPT : ERR SMOKE PASS: mortar firing fixture-owned inert report identity exists; no enemy perception is claimed +08:22:29.505 SCRIPT : ERR SMOKE PASS: mortar firing synthetic observation enters actual existing radio uplink once +08:22:34.025 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:39.059 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:44.116 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:49.179 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:54.225 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:22:59.264 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:04.308 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:09.368 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:14.411 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:19.474 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:24.532 SCRIPT : ERR MORTAR FIXTURE: step=1 startup=1 source=M1 observedEvents=0 ready=1 failure= +08:23:28.573 SCRIPT (E): ERR SMOKE FAIL: mortar firing one unchanged fixture source creates only one HQ order +08:23:28.574 SCRIPT (E): ERR SMOKE FAIL: native mortar firing probe failed; see diagnostics diff --git a/docs/evidence/native-2026-09-19-082123/source-provenance.json b/docs/evidence/native-2026-09-19-082123/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-082123/source-sha256.json b/docs/evidence/native-2026-09-19-082123/source-sha256.json new file mode 100644 index 0000000..bc9ae22 --- /dev/null +++ b/docs/evidence/native-2026-09-19-082123/source-sha256.json @@ -0,0 +1,161 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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_MortarBattery.c": "20a5b1975c2b185afd1b9b476f19730bae24064fab4d0e6538fc44bc49818b21", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "b843484cd73340a6f865f06ce16b5405b26b9d460a89e8598234c6f27332890b", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "60b05d729ee961196b3e3d27bb7942d7aacdf1e42a38f7d63ec2499eea3ed2eb", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "0fe7825e6c2feea1bac766a5d8c904124f577aea3ff07d21b1d440c89d3a47b7", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "addons/core/Scripts/Game/ERR/ERR_LoadCasualtyAction.c": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "b35c6920bf40a4a02dc063e65bb4059cb68d5a0809fefbeae410991ee2dcf314", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-083810/console.log.txt b/docs/evidence/native-2026-09-19-083810/console.log.txt new file mode 100644 index 0000000..72fbc70 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/console.log.txt @@ -0,0 +1,694 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-38-10\console.log started at 2026-09-19 08:38:10 (2026-09-19 06:38:10 UTC) + +08:38:10.015 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-38-10' to filesystem under name logs +08:38:10.015 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:38:10.015 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:38:10.017 PROFILING : Workbench Create Engine took: 11.932000 ms +08:38:11.053 INIT : INIT : Workbench Init Engine +08:38:11.053 ENGINE : Initializing engine, version 192142 +08:38:11.053 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 mortar-transfer -noThrow -disableCrashReporter +08:38:11.061 ENGINE : Addon dirs: +08:38:11.061 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +08:38:11.061 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:38:11.061 ENGINE : dir: './addons' +08:38:11.061 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:38:11.061 ENGINE : Available addons: +08:38:11.061 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:38:11.061 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:38:11.061 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:38:11.061 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:38:11.061 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:38:11.061 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:38:11.061 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:38:11.061 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:38:11.061 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:38:11.061 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:38:11.062 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:38:11.062 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:38:11.173 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:38:11.176 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:38:11.176 ENGINE : CPU vendor : AuthenticAMD +08:38:11.176 ENGINE : CPU type : 2 +08:38:11.176 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:38:11.176 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:38:11.176 ENGINE : CPU count logical : 16 +08:38:11.176 ENGINE : CPU count physical : 8 +08:38:11.176 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:38:11.176 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:38:11.176 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:38:11.176 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:38:11.177 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:38:11.177 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:38:11.177 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:38:11.307 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:38:11.309 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:38:11.309 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-38-10/resourceDatabase.rdb) +08:38:11.457 RESOURCES : RESOURCES : ResourceDB: full scan +08:38:11.462 RESOURCES : RESOURCES : scanning... +08:38:11.462 RESOURCES : RESOURCES : scanning @"ERR_Chat" +08:38:11.463 RESOURCES : RESOURCES : scanning @"ERR_Map" +08:38:11.465 RESOURCES : RESOURCES : scanning @"ERR_Intel" +08:38:11.465 RESOURCES : RESOURCES : scanning @"ERR_Ai" +08:38:11.466 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:38:11.469 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:38:11.604 RESOURCES : RESOURCES : scanning @"core" +08:38:11.608 RESOURCES : RESOURCES : scanning @"profile" +08:38:11.608 RESOURCES : RESOURCES : scanning @"logs" +08:38:11.609 RESOURCES : RESOURCES : processing meta-files... +08:38:11.671 RESOURCES : RESOURCES : processing files... +08:38:11.682 INIT : Workbench startup +08:38:11.682 INIT : Workbench Init Engine +08:38:11.682 RESOURCES : ResourceDB: full scan +08:38:11.682 RESOURCES : processing files... +08:38:11.682 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:38:11.682 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:38:11.682 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:38:11.682 RESOURCES : RESOURCES : processing folders... +08:38:11.689 RESOURCES : RESOURCES : creating GUID-item mapping... +08:38:11.704 RESOURCES : RESOURCES : building tree... +08:38:11.771 PROFILING : ResourceDB: full scan took: 313.982200 ms +08:38:11.772 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:38:11.774 RESOURCES : ResourceDB: written 741/741 bytes +08:38:11.774 RESOURCES : ResourceDB: cache successfully saved +08:38:11.774 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:38:11.776 RESOURCES : ResourceDB: written 750/750 bytes +08:38:11.776 RESOURCES : ResourceDB: cache successfully saved +08:38:11.776 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:38:11.777 RESOURCES : ResourceDB: written 227/227 bytes +08:38:11.777 RESOURCES : ResourceDB: cache successfully saved +08:38:11.778 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:38:11.779 RESOURCES : ResourceDB: written 1356/1356 bytes +08:38:11.779 RESOURCES : ResourceDB: cache successfully saved +08:38:11.779 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:38:11.781 RESOURCES : ResourceDB: written 6203/6203 bytes +08:38:11.781 RESOURCES : ResourceDB: cache successfully saved +08:38:11.781 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:38:11.782 RESOURCES : ResourceDB: written 206/206 bytes +08:38:11.782 RESOURCES : ResourceDB: cache successfully saved +08:38:11.782 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-38-10/resourceDatabase.rdb) +08:38:11.784 RESOURCES : ResourceDB: written 162/162 bytes +08:38:11.784 RESOURCES : ResourceDB: cache successfully saved +08:38:11.784 ENGINE : GameProject load +08:38:11.784 ENGINE : Loaded addons: +08:38:11.784 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:38:11.784 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:38:11.784 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:38:11.784 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:38:11.784 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:38:11.784 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:38:11.784 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:38:11.787 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:38:11.787 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:38:11.787 ENGINE : Engine user settings config loaded +08:38:11.787 PROFILING : Settings changed took: 0.002100 ms +08:38:11.890 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:38:11.892 RENDER : Basic screen setup: +08:38:11.892 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:38:11.892 RENDER : MSAA : none +08:38:11.905 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:38:11.905 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:38:11.905 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:38:11.905 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:38:11.905 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:38:11.905 RENDER : AMD AGS correctly initialized +08:38:11.906 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 +08:38:11.906 RENDER : Detected output devices: +08:38:11.906 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:38:11.906 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:38:11.906 RENDER : Concurrent frames limit 2 +08:38:11.984 RENDER : DX12 device successfully created by AMD AGS library +08:38:11.984 RENDER : * user markers not supported in this version AMD SW +08:38:11.984 RENDER : Graphics device features +08:38:11.984 RENDER : Needed: +08:38:11.984 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:38:11.984 RENDER : Optional: +08:38:11.984 RENDER : * Allow tearing (VSYNC) : 1 +08:38:11.984 RENDER : * 16 bits : 1 +08:38:11.984 RENDER : * Resource heap tier : 3 +08:38:11.984 RENDER : * Persistent heaps (DRED) : 1 +08:38:11.984 RENDER : * DRED 1.2 is supported by compiler +08:38:12.006 RENDER : Main RT format setup. +08:38:12.006 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:38:12.006 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:38:12.008 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:38:12.034 PROFILING : Settings changed took: 0.015800 ms +08:38:12.518 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:38:12.518 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:38:12.518 AUDIO : Audio client: +08:38:12.518 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:38:12.522 RENDER : RENDER : Reload shaders +08:38:12.522 RENDER : Enfusion shader version 13 +08:38:12.522 INIT : INIT : ShaderListReload +08:38:12.522 PROFILING : ShaderListReload took: 0.000800 ms +08:38:12.665 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:38:12.665 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:38:12.666 AUDIO : Audio client: +08:38:12.666 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:38:12.926 RENDER : Loaded 3752 newer shader binaries +08:38:12.926 PROFILING : Reload shaders took: 404.584500 ms +08:38:12.926 ENGINE : Initializing inputs. +08:38:12.939 NETWORK : Initializing networking. +08:38:12.939 NETWORK : Using new GameRplScheduler. +08:38:12.940 SCRIPT : SCRIPT : Initializing scripts +08:38:12.940 SCRIPT : SCRIPT : ScriptProjectManager init +08:38:15.094 PROFILING : ScriptProjectManager init took: 2153.902500 ms +08:38:15.177 PROFILING : Initializing scripts took: 2236.568800 ms +08:38:15.193 ENGINE : Enfusion engine successfully created. +08:38:15.193 PROFILING : Workbench Init Engine took: 4140.184500 ms +08:38:15.193 INIT : INIT : Workbench Create Game +08:38:15.204 GUI : Using default language (en_us) +08:38:15.204 GUI : Loading 'en_us' localization file. +08:38:15.204 INIT : INIT : Loading StringTable +08:38:15.227 PROFILING : Loading StringTable took: 22.410100 ms +08:38:15.227 SCRIPT : SCRIPT : Compiling GameLib scripts +08:38:15.291 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 +08:38:15.292 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 +08:38:15.292 PROFILING : Compiling GameLib scripts took: 65.454800 ms +08:38:15.292 SCRIPT : SCRIPT : Compiling Game scripts +08:38:16.557 INIT : Workbench Create Game +08:38:16.557 SCRIPT : Compiling Game scripts +08:38:16.557 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:38:16.557 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:38:16.701 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:16.833 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:38:16.866 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:38:16.998 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:38:17.056 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:38:17.056 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:38:17.060 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:38:17.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.098 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:38:17.098 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:38:17.124 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.156 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:38:17.416 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: e963af0e +08:38:17.423 SCRIPT : Module: Game; loaded 5759x files; 11304x classes; used 33167K 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: 38d29813 +08:38:17.461 PROFILING : Compiling Game scripts took: 2168.383300 ms +08:38:17.466 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:38:17.505 ENGINE : Game successfully created. +08:38:17.506 PROFILING : Workbench Create Game took: 2312.707400 ms +08:38:17.514 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +08:38:18.375 INIT : INIT : Workbench Reload Game +08:38:18.377 ENGINE : Game destroyed. +08:38:18.385 GUI : Using default language (en_us) +08:38:18.385 GUI : Loading 'en_us' localization file. +08:38:18.385 INIT : INIT : Loading StringTable +08:38:18.397 PROFILING : Loading StringTable took: 11.397100 ms +08:38:18.397 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:38:18.405 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:38:18.406 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:38:18.406 ENGINE : Game successfully created. +08:38:18.406 ENGINE : Game successfully initialized. +08:38:18.406 PROFILING : Workbench Reload Game took: 30.531200 ms +08:38:19.208 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:38:20.211 PROFILING : Entities load took: 1003.328500 ms +08:38:20.221 WORLD : WORLD : CreateEntities +08:38:20.226 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:38:20.227 PROFILING : NotifyBeforeEntitiesCreated took: 0.004000 ms +08:38:20.227 WORLD : WORLD : Wait for preloading data +08:38:20.227 PROFILING : Wait for preloading data took: 0.003200 ms +08:38:20.340 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:38:20.341 PROFILING : PROFILING : Terrain load +08:38:22.333 PROFILING : Terrain load took: 1992.187000 ms +08:38:26.218 WORLD : CreateEntities +08:38:26.219 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" +08:38:26.219 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:38:26.219 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:38:36.858 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:38:36.858 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005400 ms +08:38:37.293 WORLD : WORLD : NotifyEntitiesInitialized +08:38:37.293 TERRAIN : TERRAIN : Initializing road networks... +08:38:37.296 PROFILING : Initializing road networks... took: 2.195100 ms +08:38:37.296 PROFILING : NotifyEntitiesInitialized took: 2.564400 ms +08:38:37.296 PROFILING : CreateEntities took: 17074.238600 ms +08:38:37.470 PROFILING : * WorldEditor: LoadWorld: 18267.978400 ms +08:38:38.940 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:38:38.940 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:38:38.941 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:38:38.942 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:38:39.031 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:38:39.034 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:38:39.034 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:38:39.057 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:38:39.081 BACKEND : Attempting online Game Config instead. +08:38:42.332 INIT : INIT : Workbench Reload Game +08:38:42.334 ENGINE : Game destroyed. +08:38:42.340 GUI : Using default language (en_us) +08:38:42.340 GUI : Loading 'en_us' localization file. +08:38:42.340 INIT : INIT : Loading StringTable +08:38:42.361 PROFILING : Loading StringTable took: 20.538100 ms +08:38:42.361 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:38:42.370 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:38:42.370 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:38:42.370 ENGINE : Game successfully created. +08:38:42.370 ENGINE : Game successfully initialized. +08:38:42.370 PROFILING : Workbench Reload Game took: 38.372200 ms +08:38:42.373 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:38:42.423 PLATFORM : Save data from container 'settings' have been loaded +08:38:42.513 PLATFORM : Save data from container 'sessions' have been loaded +08:38:42.514 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:38:42.514 ENGINE : Game user settings config loaded +08:38:42.610 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:38:42.619 WORLD : WORLD : Game::LoadEntities +08:38:42.619 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:38:42.621 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:38:42.621 WORLD : WORLD : CreateEntities +08:38:42.621 WORLD : WORLD : CreateEntities +08:38:42.621 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:38:42.633 RESOURCES : Loaded mission headers from 7 addon(s)! +08:38:42.633 PROFILING : NotifyBeforeEntitiesCreated took: 12.191200 ms +08:38:42.633 WORLD : WORLD : Wait for preloading data +08:38:42.633 PROFILING : Wait for preloading data took: 0.001100 ms +08:38:47.228 WORLD : Game::LoadEntities +08:38:47.228 WORLD : CreateEntities +08:38:47.228 WORLD : CreateEntities +08:38:47.228 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" +08:38:47.228 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:38:47.228 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:38:48.684 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:38:48.684 ENTITY : CreateComponent 'Hierarchy' +08:38:48.684 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>') +08:38:48.684 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:38:48.684 ENTITY : CreateComponent 'Hierarchy' +08:38:48.684 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>') +08:38:48.684 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:38:48.684 ENTITY : CreateComponent 'Hierarchy' +08:38:48.684 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>') +08:38:48.690 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:38:48.690 ENTITY : CreateComponent 'Hierarchy' +08:38:48.690 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>') +08:38:48.690 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:38:48.690 ENTITY : CreateComponent 'Hierarchy' +08:38:48.690 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>') +08:38:48.690 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:38:48.690 ENTITY : CreateComponent 'Hierarchy' +08:38:48.690 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>') +08:38:48.694 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:38:48.694 ENTITY : CreateComponent 'Hierarchy' +08:38:48.694 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>') +08:38:48.694 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:38:48.694 ENTITY : CreateComponent 'Hierarchy' +08:38:48.694 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>') +08:38:48.695 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:38:48.695 ENTITY : CreateComponent 'Hierarchy' +08:38:48.695 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>') +08:38:54.098 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:38:54.098 PROFILING : NotifyBeforeEntitiesInitialized took: 0.050500 ms +08:38:56.135 WORLD : InitEntities 'world' +08:38:56.135 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:38:56.135 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:38:56.165 WORLD : InitEntities 'world' +08:38:56.165 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:38:56.165 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:38:56.165 WORLD : WORLD : NotifyEntitiesInitialized +08:38:56.165 TERRAIN : TERRAIN : Initializing road networks... +08:38:56.168 PROFILING : Initializing road networks... took: 2.662500 ms +08:38:56.168 DEFAULT : DEFAULT : WorldVolumesCollection +08:38:56.230 PROFILING : WorldVolumesCollection took: 61.285700 ms +08:38:56.230 INIT : INIT : SoundWorldInit +08:38:56.243 PROFILING : SoundWorldInit took: 13.865500 ms +08:38:56.244 PROFILING : NotifyEntitiesInitialized took: 78.107800 ms +08:38:56.244 PROFILING : CreateEntities took: 13622.617600 ms +08:38:56.244 PROFILING : CreateEntities took: 13622.770800 ms +08:38:56.244 WORLD : WORLD : Wait for preloading data around camera +08:38:56.244 PROFILING : Wait for preloading data around camera took: 0.001000 ms +08:38:56.244 WORLD : WORLD : EOnActivate +08:38:56.278 PROFILING : EOnActivate took: 33.661000 ms +08:38:56.278 PROFILING : Game::LoadEntities took: 13658.499000 ms +08:38:56.561 DEFAULT : Entered offline game state. +08:38:56.664 NETWORK : Player connected: connectionID=2147483646 +08:38:56.664 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:38:56.664 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:38:56.670 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:38:56.670 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:38:56.671 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:38:56.671 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! +08:38:56.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! +08:38:56.673 SCRIPT (W): Can't open config file "" +08:38:56.679 WORLD : InitEntities 'world' +08:38:56.679 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:38:56.679 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:38:56.679 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:38:56.679 SCRIPT (W): Slot_Chat Has no Content! +08:38:56.680 SCRIPT (W): Slot_VON Has no Content! +08:38:56.680 SCRIPT (W): Slot_AvailableActions Has no Content! +08:38:56.680 SCRIPT (W): Slot_Vehicle Has no Content! +08:38:56.680 SCRIPT (W): Slot_GameVersion Has no Content! +08:38:56.680 SCRIPT (W): Slot_Notifications Has no Content! +08:38:56.680 SCRIPT (W): Slot_Hints Has no Content! +08:38:56.693 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:38:56.693 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:38:56.693 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:38:56.694 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. +08:38:56.694 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. +08:38:56.697 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:38:56.697 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:38:56.698 NETWORK : Players connecting: 0 +08:38:56.698 NETWORK : Players connected: 1 / 1 +08:38:56.725 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +08:38:56.726 PROFILING : Workbench startup took: 46776.228500 ms +08:38:56.749 WORLD : Frame start +08:38:56.750 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:38:56.763 WORLD : UpdateEntities +08:38:56.763 WORLD : Frame +08:38:56.763 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:38:56.944 WORLD : UpdateEntities +08:38:56.944 WORLD : PostFrame +08:38:56.944 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:38:56.944 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:38:56.987 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:38:56.988 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:38:56.988 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:38:56.988 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:38:57.120 RENDER : RENDER : ObjectsHeightMap::Build +08:38:57.120 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:38:57.279 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 158.854900 ms +08:38:57.287 PROFILING : ObjectsHeightMap::Build took: 166.467100 ms +08:38:58.452 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:38:58.474 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:38:58.475 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:38:58.520 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:38:58.522 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:38:58.583 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:38:58.583 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:38:58.589 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:38:58.638 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:38:58.638 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:38:58.641 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:38:58.641 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:38:58.644 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:38:58.646 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:38:58.646 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:38:58.647 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:38:58.647 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:38:58.647 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:38:58.648 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:38:58.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:38:58.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:38:58.648 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 +08:38:58.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:38:58.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:38:58.649 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 +08:38:58.649 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:38:58.649 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:38:58.649 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 +08:38:58.649 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.649 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:59.426 WORLD : UpdateEntities +08:38:59.426 WORLD : AfterPostSimulate +08:38:59.427 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:38:59.492 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.492 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.493 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.493 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.742 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5334,7499.7> up=0.99568 +08:38:59.743 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +08:38:59.743 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:38:59.743 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7501.97> +08:38:59.743 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7501.97> terrainY=63.3163 tireTerrainGap=-0.00299454 +08:38:59.744 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7501.97> radius=0.3 bottom=<7012.07,63.3133,7501.97> fraction=0.440896 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00300217 +08:38:59.744 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5994,7497.71> +08:38:59.744 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1494,7497.71> terrainY=64.1554 tireTerrainGap=-0.00601196 +08:38:59.744 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5994,7497.71> radius=0.45 bottom=<7009.88,64.1494,7497.71> fraction=0.42737 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00597382 +08:38:59.744 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2628,7497.74> +08:38:59.744 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8128,7497.74> terrainY=63.8179 tireTerrainGap=-0.00509262 +08:38:59.745 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2628,7497.74> radius=0.45 bottom=<7014.42,63.8128,7497.74> fraction=0.431111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00515366 +08:38:59.745 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:39:00.496 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:00.496 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:00.497 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:00.753 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5335,7499.71> up=0.994316 +08:39:00.753 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0928744 angularSpeed=0.0708118 +08:39:00.753 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:00.753 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6196,7501.98> +08:39:00.754 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3196,7501.98> terrainY=63.3147 tireTerrainGap=0.00487137 +08:39:00.754 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6196,7501.98> radius=0.3 bottom=<7012.07,63.3196,7501.98> fraction=0.476751 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00488663 +08:39:00.754 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6024,7497.71> +08:39:00.754 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00327301 +08:39:00.754 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6024,7497.71> radius=0.45 bottom=<7009.93,64.1524,7497.71> fraction=0.469434 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00328064 +08:39:00.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.265,7497.78> +08:39:00.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.815,7497.78> terrainY=63.8155 tireTerrainGap=-0.000553131 +08:39:00.755 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.265,7497.78> radius=0.45 bottom=<7014.47,63.815,7497.78> fraction=0.451944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000572205 +08:39:00.755 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:01.003 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.004 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:01.004 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:01.004 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.296 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:39:01.296 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.296 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.296 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.297 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.804 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5329,7499.74> up=0.994199 +08:39:01.804 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0452317 angularSpeed=0.0244006 +08:39:01.805 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:01.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6187,7502.01> +08:39:01.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3187,7502.01> terrainY=63.3116 tireTerrainGap=0.00709534 +08:39:01.805 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6187,7502.01> radius=0.3 bottom=<7012.08,63.3187,7502.01> fraction=0.48678 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00709152 +08:39:01.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5875,7497.72> +08:39:01.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1376,7497.72> terrainY=64.143 tireTerrainGap=-0.0054245 +08:39:01.806 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5875,7497.72> radius=0.45 bottom=<7009.97,64.1376,7497.72> fraction=0.429613 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00548553 +08:39:01.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2557,7497.82> +08:39:01.806 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8057,7497.82> terrainY=63.8129 tireTerrainGap=-0.00727463 +08:39:01.806 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2557,7497.82> radius=0.45 bottom=<7014.51,63.8057,7497.82> fraction=0.421389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0072937 +08:39:01.806 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:01.806 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:02.309 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.309 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.309 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.310 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:02.820 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:39:02.820 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:39:02.820 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:02.820 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:39:02.821 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170898 +08:39:02.821 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:39:02.821 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:39:02.821 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00257111 +08:39:02.821 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 +08:39:02.822 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:39:02.822 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185013 +08:39:02.822 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:39:02.822 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:03.329 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.329 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.329 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.330 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.836 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:39:03.836 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:39:03.836 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:03.837 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:39:03.837 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170898 +08:39:03.837 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:39:03.837 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:39:03.837 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00257111 +08:39:03.838 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 +08:39:03.838 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:39:03.838 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185013 +08:39:03.838 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:39:03.838 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:03.839 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.840 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:39:03.849 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:39:03.850 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:39:03.850 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:39:04.011 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:39:04.052 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +08:39:04.309 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:39:04.309 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:39:04.309 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:39:04.310 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:39:04.310 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:39:04.310 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:39:04.310 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:39:04.310 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:39:04.312 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:39:04.320 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:39:04.320 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:39:04.320 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:39:04.321 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:39:04.326 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:39:04.326 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:39:15.430 SCRIPT : ERR SMOKE PASS: mortar transfer actual initialized idle battery has finite 27 shells +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer opt-in mechanism fixture holds automatic mortar scheduler +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer four real crew and original shell-owner identities captured +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer native seating request selects actual original crew gunner +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer selected actual gunner owns its original nine physical shells +08:39:15.432 SCRIPT : ERR SMOKE PASS: mortar transfer fixture-owned empty vanilla storage created +08:39:15.432 SCRIPT : ERR SMOKE PASS: mortar transfer real vanilla storage component available without attaching it to gunner inventory +08:39:15.433 SCRIPT : ERR SMOKE PASS: mortar transfer fixture-owned empty vanilla storage created +08:39:15.433 SCRIPT : ERR SMOKE PASS: mortar transfer real vanilla storage component available without attaching it to gunner inventory +08:39:15.944 SCRIPT : ERR SMOKE PASS: mortar transfer 27 original shells have exactly one observed owner each +08:39:15.944 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:16.443 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:16.443 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:16.949 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:16.950 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:17.459 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:17.460 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:17.965 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:17.966 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:18.471 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:18.472 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:18.975 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:18.976 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:19.487 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:19.488 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:20.003 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:20.004 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:20.503 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:20.505 SCRIPT : ERR SMOKE PASS: mortar transfer actual gunner empty while all 27 original shells remain in crew or fixture storage +08:39:20.506 SCRIPT : ERR MORTAR TRANSFER FIXTURE: synthetic supply order=1; radio bypassed; scheduler held; no artillery activity authorized +08:39:20.506 SCRIPT : ERR SMOKE PASS: mortar transfer production exact-shell request accepted once with captured current order and real gunner +08:39:21.007 SCRIPT : ERR SMOKE PASS: mortar transfer successful native callback and exact donor-to-gunner ownership, one attempt, original 27 conserved +08:39:21.008 SCRIPT : ERR SMOKE PASS: mortar transfer repeated supply check reuses actual inventory without another move +08:39:21.513 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:22.022 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:22.024 SCRIPT : ERR SMOKE PASS: mortar transfer actual gunner empty while all 27 original shells remain in crew or fixture storage +08:39:22.025 SCRIPT : ERR MORTAR TRANSFER FIXTURE: synthetic supply order=2; radio bypassed; scheduler held; no artillery activity authorized +08:39:22.025 SCRIPT : ERR SMOKE PASS: mortar transfer production exact-shell request accepted once with captured current order and real gunner +08:39:22.025 SCRIPT : ERR SMOKE PASS: mortar transfer canceled current order cannot report supply READY or issue another request +08:39:22.026 SCRIPT : ERR MORTAR TRANSFER CANCEL: callbackBeforeCancel=1 order=2; accepted native move is not retracted +08:39:22.529 SCRIPT : ERR SMOKE PASS: mortar transfer canceled accepted native move has definite physical outcome with exactly two attempts and original 27 conserved +08:39:22.530 SCRIPT : ERR MORTAR TRANSFER LIMIT: native callback completed synchronously before cancellation; late callback timing not exercised +08:39:23.037 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:23.543 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:23.544 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:24.051 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:24.052 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:24.560 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:24.561 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:25.062 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:25.063 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:25.569 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:25.570 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:26.077 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:26.078 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:26.577 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:26.578 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:27.079 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:27.081 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:27.591 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:27.592 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:28.099 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:28.100 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:28.599 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.606 SCRIPT : ERR SMOKE PASS: mortar transfer all original ammunition restored; no minted/deleted shell or shot +08:39:28.607 SCRIPT : ERR SMOKE PASS: mortar transfer borrowed-ammunition fixture storage empty before deletion +08:39:28.607 SCRIPT : ERR SMOKE PASS: mortar transfer borrowed-ammunition fixture storage empty before deletion +08:39:28.607 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:39:28.607 SCRIPT : ERR SMOKE PASS: native exact shell transfers and original-owner restoration complete before explicit reset +08:39:28.607 SCRIPT : ERR SMOKE COMPLETE: native exact mortar inventory transfer, accepted-operation cancellation and original-owner restoration; radio bypassed; fixture reset requested +08:39:28.725 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:39:28.728 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:39:28.728 SCRIPT (W): Slot_Chat Has no Content! +08:39:28.728 SCRIPT (W): Slot_VON Has no Content! +08:39:28.728 SCRIPT (W): Slot_GameVersion Has no Content! +08:39:28.728 SCRIPT (W): Slot_Notifications Has no Content! +08:39:30.787 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:39:30.787 SCRIPT : -- Stack trace -- +08:39:30.787 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:39:30.788 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:39:30.788 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:39:30.788 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:39:30.788 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:39:30.788 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:39:30.788 SCRIPT : ----------------- +08:39:30.788 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:39:30.789 SCRIPT : -- Stack trace -- +08:39:30.789 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:39:30.789 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:39:30.789 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:39:30.789 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:39:30.789 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:39:30.789 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:39:30.789 SCRIPT : ----------------- +08:39:30.791 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:39:30.792 SCRIPT (W): Slot_Chat Has no Content! +08:39:30.792 SCRIPT (W): Slot_VON Has no Content! +08:39:30.792 SCRIPT (W): Slot_GameVersion Has no Content! +08:39:30.792 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-083810/error.log.txt b/docs/evidence/native-2026-09-19-083810/error.log.txt new file mode 100644 index 0000000..98080d9 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/error.log.txt @@ -0,0 +1,118 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-38-10\error.log started at 2026-09-19 08:38:11 (2026-09-19 06:38:11 UTC) + +08:38:11.682 INIT : Workbench startup +08:38:11.682 INIT : Workbench Init Engine +08:38:11.682 RESOURCES : ResourceDB: full scan +08:38:11.682 RESOURCES : processing files... +08:38:11.682 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:38:11.682 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:38:11.682 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:38:16.557 INIT : Workbench Create Game +08:38:16.557 SCRIPT : Compiling Game scripts +08:38:16.557 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:38:16.557 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:38:16.701 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:16.833 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:38:16.866 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:38:16.998 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:38:17.056 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:38:17.056 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:38:17.060 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:38:17.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.098 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:38:17.098 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:38:17.124 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.156 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:38:26.218 WORLD : CreateEntities +08:38:26.219 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" +08:38:26.219 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:38:26.219 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:38:42.373 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:38:47.228 WORLD : Game::LoadEntities +08:38:47.228 WORLD : CreateEntities +08:38:47.228 WORLD : CreateEntities +08:38:47.228 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" +08:38:47.228 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:38:47.228 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:38:48.684 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:38:48.684 ENTITY : CreateComponent 'Hierarchy' +08:38:48.684 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>') +08:38:48.684 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:38:48.684 ENTITY : CreateComponent 'Hierarchy' +08:38:48.684 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>') +08:38:48.684 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:38:48.684 ENTITY : CreateComponent 'Hierarchy' +08:38:48.684 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>') +08:38:48.690 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:38:48.690 ENTITY : CreateComponent 'Hierarchy' +08:38:48.690 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>') +08:38:48.690 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:38:48.690 ENTITY : CreateComponent 'Hierarchy' +08:38:48.690 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>') +08:38:48.690 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:38:48.690 ENTITY : CreateComponent 'Hierarchy' +08:38:48.690 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>') +08:38:48.694 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:38:48.694 ENTITY : CreateComponent 'Hierarchy' +08:38:48.694 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>') +08:38:48.694 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:38:48.694 ENTITY : CreateComponent 'Hierarchy' +08:38:48.694 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>') +08:38:48.695 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:38:48.695 ENTITY : CreateComponent 'Hierarchy' +08:38:48.695 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>') +08:38:56.135 WORLD : InitEntities 'world' +08:38:56.135 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:38:56.135 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:38:56.670 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:38:56.670 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:38:56.671 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:38:56.671 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! +08:38:56.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! +08:38:56.673 SCRIPT (W): Can't open config file "" +08:38:56.679 WORLD : InitEntities 'world' +08:38:56.679 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:38:56.679 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:38:56.679 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:38:56.679 SCRIPT (W): Slot_Chat Has no Content! +08:38:56.680 SCRIPT (W): Slot_VON Has no Content! +08:38:56.680 SCRIPT (W): Slot_AvailableActions Has no Content! +08:38:56.680 SCRIPT (W): Slot_Vehicle Has no Content! +08:38:56.680 SCRIPT (W): Slot_GameVersion Has no Content! +08:38:56.680 SCRIPT (W): Slot_Notifications Has no Content! +08:38:56.680 SCRIPT (W): Slot_Hints Has no Content! +08:38:56.693 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:38:56.693 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:38:56.693 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:38:56.693 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. +08:38:56.694 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. +08:38:56.697 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:38:56.944 WORLD : UpdateEntities +08:38:56.944 WORLD : PostFrame +08:38:56.944 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:38:56.944 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:38:56.987 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:38:56.988 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:38:56.988 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:38:56.988 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:38:59.426 WORLD : UpdateEntities +08:38:59.426 WORLD : AfterPostSimulate +08:38:59.427 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:39:28.728 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:39:28.728 SCRIPT (W): Slot_Chat Has no Content! +08:39:28.728 SCRIPT (W): Slot_VON Has no Content! +08:39:28.728 SCRIPT (W): Slot_GameVersion Has no Content! +08:39:28.728 SCRIPT (W): Slot_Notifications Has no Content! +08:39:30.787 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:39:30.788 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:39:30.791 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:39:30.792 SCRIPT (W): Slot_Chat Has no Content! +08:39:30.792 SCRIPT (W): Slot_VON Has no Content! +08:39:30.792 SCRIPT (W): Slot_GameVersion Has no Content! +08:39:30.792 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-083810/headless-launch.log.txt b/docs/evidence/native-2026-09-19-083810/headless-launch.log.txt new file mode 100644 index 0000000..5479ae7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/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: 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. +[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: 0x1a003a4 +[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL. +[Gamescope WSI] Made gamescope surface for xid: 0x1a003a4 +[Gamescope WSI] Surface state: + steam app id: 1874910 + window xid: 0x1a003a4 + 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: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55556ddc1590 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55556ddc1590 +[Gamescope WSI] Destroyed swapchain: 0x55556ddc1590 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55556ddc1590 - imageCount: 4 +[Gamescope WSI] Destroying swapchain: 0x55556ddc1590 +[Gamescope WSI] Destroyed swapchain: 0x55556ddc1590 +[Gamescope WSI] Creating swapchain for xid: 0x1a003a4 - 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: 0x1a003a4 swapchain: 0x55556dd5df30 - imageCount: 4 +[gamescope] [Info] launch: Primary child shut down! diff --git a/docs/evidence/native-2026-09-19-083810/launch-source-sha256.json b/docs/evidence/native-2026-09-19-083810/launch-source-sha256.json new file mode 100644 index 0000000..e058dc0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/launch-source-sha256.json @@ -0,0 +1,164 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "e4589e5af55701f8c1f7f33e0a49e45f34b073bfddbdc87e009bea69af683828", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "acbc8a1d6a5c76278c447b666ae7362740953422a9ca287361ad6286b6944c59", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "95186a6c1553b38c6a214e897f845ef1799d8acca0cc896d8df73de680050888", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-083810/launch-source.json b/docs/evidence/native-2026-09-19-083810/launch-source.json new file mode 100644 index 0000000..0a4253d --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/launch-source.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "launch_id": "5c678f04-3ff5-4150-8ed1-83038359fbe3", + "captured_unix": 1789799888.3150718, + "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", + "mortar-transfer", + "-noThrow", + "-disableCrashReporter" + ], + "manifest_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4" +} diff --git a/docs/evidence/native-2026-09-19-083810/report.json b/docs/evidence/native-2026-09-19-083810/report.json new file mode 100644 index 0000000..30fc318 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/report.json @@ -0,0 +1,9 @@ +{ + "log": "docs/evidence/native-2026-09-19-083810/console.log.txt", + "smoke_completions": 1, + "assertions_passed": 119, + "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-083810/rereintroduced-hq.log.txt b/docs/evidence/native-2026-09-19-083810/rereintroduced-hq.log.txt new file mode 100644 index 0000000..773aa4f --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/rereintroduced-hq.log.txt @@ -0,0 +1,16 @@ +#1 t=6.5s M0 REGISTER group 1 [session=1789799936-1] +#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=1789799936-1] +#3 t=8.5s M0 REGISTER group 2 [session=1789799936-1] +#4 t=8.5s M0 REGISTER group 3 [session=1789799936-1] +#5 t=8.5s M0 REGISTER group 4 [session=1789799936-1] +#6 t=8.5s M0 REGISTER group 5 [session=1789799936-1] +#7 t=8.5s M0 REGISTER group 6 [session=1789799936-1] +#8 t=8.5s M0 REGISTER group 7 [session=1789799936-1] +#9 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=1789799936-1] +#10 t=23.2s M0 MORTAR COMMAND site=1 order=1 radio=M0 source=M900001 position=<6000,202.788,7000>; requested rounds=8 HE radius=40m; X=6700 Z=7000: count unknown; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789799936-1] +#11 t=23.2s M0 MORTAR AMMO TRANSFER site=1 order=1 radio=M0 source=M900001 position=<6000,202.788,7000>; one exact-item move pending donor=SCR_ChimeraCharacter<0x00000001BBC4C430> @"ENTITY:4611686018427390724" ('SCR_ChimeraCharacter','Assets/Characters/Basebody/Basebody_Male_01.xob') at <6007.291016 202.314117 6997.594727> @"{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" gunner=SCR_ChimeraCharacter<0x00000001BBC4A130> @"ENTITY:4611686018427390667" ('SCR_ChimeraCharacter','Assets/Characters/Basebody/Basebody_Male_01.xob') at <5999.363770 202.787506 7000.651367> @"{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" shell=Projectile<0x000000019F1F94F0> @"ENTITY:4611686018427390933" ('Projectile','Assets/Weapons/Ammo/Shells/82mm_Mortar_2B14/Shell_82mm_HE_O832DU.xob') at <5999.363770 202.787506 7000.651367> @"{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et" order=1; awaiting callback AND physical destination [session=1789799936-1] +#12 t=23.7s M0 MORTAR ORDER END site=1 order=1 radio=M0 source=M900001 position=<6000,202.788,7000>; reason=native success subcase finished; no artillery activity requested observed shots=0 shell committed=0 elapsed=0.50465s last failure= [session=1789799936-1] +#13 t=24.7s M0 MORTAR COMMAND site=1 order=2 radio=M0 source=M900002 position=<6000,202.788,7000>; requested rounds=8 HE radius=40m; X=6700 Z=7000: count unknown; on foot; speed/direction unknown; seen weapons: unknown; vector X/Z=unknown (0s ago) [session=1789799936-1] +#14 t=24.7s M0 MORTAR AMMO TRANSFER site=1 order=2 radio=M0 source=M900002 position=<6000,202.788,7000>; one exact-item move pending donor=SCR_ChimeraCharacter<0x00000001BBC4C430> @"ENTITY:4611686018427390724" ('SCR_ChimeraCharacter','Assets/Characters/Basebody/Basebody_Male_01.xob') at <6008.717773 201.987885 6995.442871> @"{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" gunner=SCR_ChimeraCharacter<0x00000001BBC4A130> @"ENTITY:4611686018427390667" ('SCR_ChimeraCharacter','Assets/Characters/Basebody/Basebody_Male_01.xob') at <5999.363770 202.787506 7000.651367> @"{86E565387A634103}Prefabs/Characters/Campaign/Final/OPFOR/USSR_Army/Regular/Campaign_USSR_Player_MortarCrew.et" shell=Projectile<0x000000019F1F9600> @"ENTITY:4611686018427390938" ('Projectile','Assets/Weapons/Ammo/Shells/82mm_Mortar_2B14/Shell_82mm_HE_O832DU.xob') at <5999.363770 202.787506 7000.651367> @"{98EC9C526AFBA282}Prefabs/Weapons/Ammo/Ammo_Shell_82mm_HE_O832DU.et" order=2; awaiting callback AND physical destination [session=1789799936-1] +#15 t=24.7s M0 MORTAR ORDER END site=1 order=2 radio=M0 source=M900002 position=<6000,202.788,7000>; reason=native fixture cancels authorization immediately after accepted inventory request observed shots=0 shell committed=0 elapsed=0s last failure= [session=1789799936-1] +#16 t=31.3s M0 STOP HQ stopped; tactical orders released [session=1789799936-1] diff --git a/docs/evidence/native-2026-09-19-083810/runner.json.txt b/docs/evidence/native-2026-09-19-083810/runner.json.txt new file mode 100644 index 0000000..f8d6126 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/runner.json.txt @@ -0,0 +1,19 @@ +{ + "stopped_unix": 1789799975.9916153, + "console_sha256": "c23fb7d50bdd6dce30841430d578a7389289e8e05533bba9d8b42eaeb7ec555f", + "end_source_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4", + "source_unchanged_after_run": true, + "source_provenance": "launch_snapshot", + "launch_id": "5c678f04-3ff5-4150-8ed1-83038359fbe3", + "launch_source_manifest": "launch-source-sha256.json", + "launch_source_metadata": "launch-source.json", + "launch_source_sha256": "765c0e51c7be74ab4caf116f40960328d1e31fcc8c433ef8bfbb39035abb77b4", + "started_unix": 1789799888.3151577, + "result": "smoke-completed", + "session": "/tmp/erri-workbench-profile/logs/logs_2026-09-19_08-38-10", + "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-083810/script.log.txt b/docs/evidence/native-2026-09-19-083810/script.log.txt new file mode 100644 index 0000000..807fc60 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/script.log.txt @@ -0,0 +1,375 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-38-10\script.log started at 2026-09-19 08:38:12 (2026-09-19 06:38:12 UTC) + +08:38:12.940 SCRIPT : SCRIPT : Initializing scripts +08:38:12.940 SCRIPT : SCRIPT : ScriptProjectManager init +08:38:15.227 SCRIPT : SCRIPT : Compiling GameLib scripts +08:38:15.291 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 +08:38:15.292 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 +08:38:15.292 SCRIPT : SCRIPT : Compiling Game scripts +08:38:16.557 SCRIPT : Compiling Game scripts +08:38:16.557 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:38:16.557 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:38:16.701 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:16.833 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:38:16.866 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:38:16.961 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:38:16.998 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:38:17.056 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:38:17.056 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:38:17.060 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:38:17.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.097 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.098 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:38:17.098 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:38:17.124 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:38:17.156 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:38:17.416 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: e963af0e +08:38:17.423 SCRIPT : Module: Game; loaded 5759x files; 11304x classes; used 33167K 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: 38d29813 +08:38:18.405 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:38:18.406 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:38:39.031 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:38:39.031 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:38:39.032 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:38:39.033 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:38:39.034 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:38:39.034 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:38:39.057 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:38:42.370 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:38:42.370 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:38:56.135 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:38:56.165 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:38:56.671 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! +08:38:56.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! +08:38:56.673 SCRIPT (W): Can't open config file "" +08:38:56.679 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:38:56.679 SCRIPT (W): Slot_Chat Has no Content! +08:38:56.680 SCRIPT (W): Slot_VON Has no Content! +08:38:56.680 SCRIPT (W): Slot_AvailableActions Has no Content! +08:38:56.680 SCRIPT (W): Slot_Vehicle Has no Content! +08:38:56.680 SCRIPT (W): Slot_GameVersion Has no Content! +08:38:56.680 SCRIPT (W): Slot_Notifications Has no Content! +08:38:56.680 SCRIPT (W): Slot_Hints Has no Content! +08:38:56.694 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. +08:38:56.694 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. +08:38:56.697 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:38:56.750 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:38:56.763 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:38:56.944 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:38:58.452 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:38:58.474 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:38:58.475 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:38:58.520 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:38:58.522 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:38:58.583 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:38:58.583 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:38:58.589 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:38:58.638 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:38:58.638 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:38:58.641 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:38:58.641 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:38:58.644 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:38:58.646 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:38:58.646 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:38:58.647 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:38:58.647 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:38:58.647 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:38:58.648 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:38:58.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:38:58.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:38:58.648 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 +08:38:58.648 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:38:58.648 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:38:58.649 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 +08:38:58.649 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:38:58.649 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:38:58.649 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 +08:38:58.649 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.649 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:58.650 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:38:59.492 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.492 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.493 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.493 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.742 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5334,7499.7> up=0.99568 +08:38:59.743 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +08:38:59.743 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:38:59.743 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7501.97> +08:38:59.743 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7501.97> terrainY=63.3163 tireTerrainGap=-0.00299454 +08:38:59.744 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7501.97> radius=0.3 bottom=<7012.07,63.3133,7501.97> fraction=0.440896 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.00300217 +08:38:59.744 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5994,7497.71> +08:38:59.744 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1494,7497.71> terrainY=64.1554 tireTerrainGap=-0.00601196 +08:38:59.744 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5994,7497.71> radius=0.45 bottom=<7009.88,64.1494,7497.71> fraction=0.42737 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00597382 +08:38:59.744 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2628,7497.74> +08:38:59.744 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8128,7497.74> terrainY=63.8179 tireTerrainGap=-0.00509262 +08:38:59.745 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2628,7497.74> radius=0.45 bottom=<7014.42,63.8128,7497.74> fraction=0.431111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00515366 +08:38:59.745 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:38:59.993 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:39:00.496 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:00.496 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:00.497 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:00.753 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5335,7499.71> up=0.994316 +08:39:00.753 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0928744 angularSpeed=0.0708118 +08:39:00.753 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:00.753 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6196,7501.98> +08:39:00.754 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3196,7501.98> terrainY=63.3147 tireTerrainGap=0.00487137 +08:39:00.754 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6196,7501.98> radius=0.3 bottom=<7012.07,63.3196,7501.98> fraction=0.476751 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00488663 +08:39:00.754 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.6024,7497.71> +08:39:00.754 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.1524,7497.71> terrainY=64.1491 tireTerrainGap=0.00327301 +08:39:00.754 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.6024,7497.71> radius=0.45 bottom=<7009.93,64.1524,7497.71> fraction=0.469434 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00328064 +08:39:00.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.265,7497.78> +08:39:00.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.815,7497.78> terrainY=63.8155 tireTerrainGap=-0.000553131 +08:39:00.755 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.265,7497.78> radius=0.45 bottom=<7014.47,63.815,7497.78> fraction=0.451944 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.000572205 +08:39:00.755 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:01.003 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.004 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:01.004 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:39:01.004 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.296 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:39:01.296 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.296 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.296 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.297 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:39:01.804 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5329,7499.74> up=0.994199 +08:39:01.804 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0452317 angularSpeed=0.0244006 +08:39:01.805 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:01.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6187,7502.01> +08:39:01.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3187,7502.01> terrainY=63.3116 tireTerrainGap=0.00709534 +08:39:01.805 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6187,7502.01> radius=0.3 bottom=<7012.08,63.3187,7502.01> fraction=0.48678 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00709152 +08:39:01.805 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5875,7497.72> +08:39:01.805 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1376,7497.72> terrainY=64.143 tireTerrainGap=-0.0054245 +08:39:01.806 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5875,7497.72> radius=0.45 bottom=<7009.97,64.1376,7497.72> fraction=0.429613 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00548553 +08:39:01.806 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2557,7497.82> +08:39:01.806 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8057,7497.82> terrainY=63.8129 tireTerrainGap=-0.00727463 +08:39:01.806 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2557,7497.82> radius=0.45 bottom=<7014.51,63.8057,7497.82> fraction=0.421389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0072937 +08:39:01.806 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:01.807 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:02.309 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.309 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.309 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.310 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:39:02.820 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:39:02.820 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:39:02.820 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:02.821 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:39:02.821 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170898 +08:39:02.821 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:39:02.821 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:39:02.821 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00257111 +08:39:02.821 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 +08:39:02.822 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:39:02.822 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185013 +08:39:02.822 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:39:02.822 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:02.823 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:39:03.329 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.329 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.330 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.330 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.836 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:39:03.836 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:39:03.836 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:39:03.837 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6126,7502.02> +08:39:03.837 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3126,7502.02> terrainY=63.3109 tireTerrainGap=0.00170898 +08:39:03.837 SCRIPT : ERR GEAR SUPPORT: center=<7012.08,63.6126,7502.02> radius=0.3 bottom=<7012.08,63.3126,7502.02> fraction=0.462288 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00170517 +08:39:03.837 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:39:03.837 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00257111 +08:39:03.838 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 +08:39:03.838 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:39:03.838 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00185013 +08:39:03.838 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.84> radius=0.45 bottom=<7014.51,63.8103,7497.84> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:39:03.839 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:39:03.839 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:39:03.840 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:39:03.849 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:39:03.850 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:39:03.850 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:39:04.011 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:39:04.052 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +08:39:04.309 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:39:04.309 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:39:04.309 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:39:04.310 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:39:04.310 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:39:04.310 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:39:04.310 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:39:04.310 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:39:04.311 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:39:04.312 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:39:04.320 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:39:04.320 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:39:04.320 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:39:04.321 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:39:04.326 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:39:04.326 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:39:04.327 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:39:15.430 SCRIPT : ERR SMOKE PASS: mortar transfer actual initialized idle battery has finite 27 shells +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer opt-in mechanism fixture holds automatic mortar scheduler +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer four real crew and original shell-owner identities captured +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer native seating request selects actual original crew gunner +08:39:15.431 SCRIPT : ERR SMOKE PASS: mortar transfer selected actual gunner owns its original nine physical shells +08:39:15.432 SCRIPT : ERR SMOKE PASS: mortar transfer fixture-owned empty vanilla storage created +08:39:15.432 SCRIPT : ERR SMOKE PASS: mortar transfer real vanilla storage component available without attaching it to gunner inventory +08:39:15.433 SCRIPT : ERR SMOKE PASS: mortar transfer fixture-owned empty vanilla storage created +08:39:15.433 SCRIPT : ERR SMOKE PASS: mortar transfer real vanilla storage component available without attaching it to gunner inventory +08:39:15.944 SCRIPT : ERR SMOKE PASS: mortar transfer 27 original shells have exactly one observed owner each +08:39:15.944 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:16.443 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:16.443 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:16.949 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:16.950 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:17.459 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:17.460 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:17.965 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:17.966 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:18.471 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:18.472 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:18.975 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:18.976 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:19.487 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:19.488 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:20.003 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:20.004 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:20.503 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:20.505 SCRIPT : ERR SMOKE PASS: mortar transfer actual gunner empty while all 27 original shells remain in crew or fixture storage +08:39:20.506 SCRIPT : ERR MORTAR TRANSFER FIXTURE: synthetic supply order=1; radio bypassed; scheduler held; no artillery activity authorized +08:39:20.506 SCRIPT : ERR SMOKE PASS: mortar transfer production exact-shell request accepted once with captured current order and real gunner +08:39:21.007 SCRIPT : ERR SMOKE PASS: mortar transfer successful native callback and exact donor-to-gunner ownership, one attempt, original 27 conserved +08:39:21.008 SCRIPT : ERR SMOKE PASS: mortar transfer repeated supply check reuses actual inventory without another move +08:39:21.513 SCRIPT : ERR SMOKE PASS: mortar transfer one existing gunner shell move to vanilla store accepted; no shell minted +08:39:22.022 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:22.024 SCRIPT : ERR SMOKE PASS: mortar transfer actual gunner empty while all 27 original shells remain in crew or fixture storage +08:39:22.025 SCRIPT : ERR MORTAR TRANSFER FIXTURE: synthetic supply order=2; radio bypassed; scheduler held; no artillery activity authorized +08:39:22.025 SCRIPT : ERR SMOKE PASS: mortar transfer production exact-shell request accepted once with captured current order and real gunner +08:39:22.025 SCRIPT : ERR SMOKE PASS: mortar transfer canceled current order cannot report supply READY or issue another request +08:39:22.026 SCRIPT : ERR MORTAR TRANSFER CANCEL: callbackBeforeCancel=1 order=2; accepted native move is not retracted +08:39:22.529 SCRIPT : ERR SMOKE PASS: mortar transfer canceled accepted native move has definite physical outcome with exactly two attempts and original 27 conserved +08:39:22.530 SCRIPT : ERR MORTAR TRANSFER LIMIT: native callback completed synchronously before cancellation; late callback timing not exercised +08:39:23.037 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:23.543 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:23.544 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:24.051 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:24.052 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:24.560 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:24.561 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:25.062 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:25.063 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:25.569 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:25.570 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:26.077 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:26.078 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:26.577 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:26.578 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:27.079 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:27.081 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:27.591 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:27.592 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:28.099 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:28.100 SCRIPT : ERR SMOKE PASS: mortar transfer one borrowed shell return to its original crew owner accepted +08:39:28.599 SCRIPT : ERR SMOKE PASS: mortar transfer all original 27 shell identities conserved after fixture move +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.600 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.601 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.602 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.603 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.604 SCRIPT : ERR SMOKE PASS: mortar transfer original shell identity returned to original crew inventory +08:39:28.606 SCRIPT : ERR SMOKE PASS: mortar transfer all original ammunition restored; no minted/deleted shell or shot +08:39:28.607 SCRIPT : ERR SMOKE PASS: mortar transfer borrowed-ammunition fixture storage empty before deletion +08:39:28.607 SCRIPT : ERR SMOKE PASS: mortar transfer borrowed-ammunition fixture storage empty before deletion +08:39:28.607 SCRIPT : Rereintroduced [mission]: phase 1 -> 6 +08:39:28.607 SCRIPT : ERR SMOKE PASS: native exact shell transfers and original-owner restoration complete before explicit reset +08:39:28.607 SCRIPT : ERR SMOKE COMPLETE: native exact mortar inventory transfer, accepted-operation cancellation and original-owner restoration; radio bypassed; fixture reset requested +08:39:28.725 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:39:28.728 SCRIPT (W): Slot_Chat Has no Content! +08:39:28.728 SCRIPT (W): Slot_VON Has no Content! +08:39:28.728 SCRIPT (W): Slot_GameVersion Has no Content! +08:39:28.728 SCRIPT (W): Slot_Notifications Has no Content! +08:39:30.787 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:39:30.787 SCRIPT : -- Stack trace -- +08:39:30.787 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:39:30.788 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:39:30.788 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:39:30.788 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:39:30.788 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:39:30.788 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:39:30.788 SCRIPT : ----------------- +08:39:30.788 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:39:30.789 SCRIPT : -- Stack trace -- +08:39:30.789 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:39:30.789 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:39:30.789 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:39:30.789 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:39:30.789 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:39:30.789 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:39:30.789 SCRIPT : ----------------- +08:39:30.792 SCRIPT (W): Slot_Chat Has no Content! +08:39:30.792 SCRIPT (W): Slot_VON Has no Content! +08:39:30.792 SCRIPT (W): Slot_GameVersion Has no Content! +08:39:30.792 SCRIPT (W): Slot_Notifications Has no Content! diff --git a/docs/evidence/native-2026-09-19-083810/source-provenance.json b/docs/evidence/native-2026-09-19-083810/source-provenance.json new file mode 100644 index 0000000..5fa4cc7 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/source-provenance.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "kind": "launch_snapshot" +} diff --git a/docs/evidence/native-2026-09-19-083810/source-sha256.json b/docs/evidence/native-2026-09-19-083810/source-sha256.json new file mode 100644 index 0000000..e058dc0 --- /dev/null +++ b/docs/evidence/native-2026-09-19-083810/source-sha256.json @@ -0,0 +1,164 @@ +{ + "addons/ai/Prefabs/ERR/MortarCrew.et": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce", + "addons/ai/Prefabs/ERR/MortarCrew.et.meta": "fdfd4fcd21a67c3d698fa4aadc4e5c76e665cebf4be86013bc389e493fab63cc", + "addons/ai/Scripts/Game/ERR/ERR_HQ.c": "ceafd6740ed277748744ce56ac0f0bb3a8521fcc060dafb2cdb99896aedf405a", + "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": "59f8052c2038072deb90623aad4bd750088499aae1d2754c72a770bf836a800a", + "addons/ai/Scripts/Game/ERR/ERR_MortarBattery.c": "e4589e5af55701f8c1f7f33e0a49e45f34b073bfddbdc87e009bea69af683828", + "addons/ai/Scripts/Game/ERR/ERR_MortarFiring.c": "672ce8527494bd9d3155b93702ac9812f194f2d5f93c8a8c46c5f690bdd3eb93", + "addons/ai/Scripts/Game/ERR/ERR_MortarPrediction.c": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d", + "addons/ai/Scripts/Game/ERR/ERR_MortarReadiness.c": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347", + "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": "acbc8a1d6a5c76278c447b666ae7362740953422a9ca287361ad6286b6944c59", + "addons/ai/Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c": "d66e57ada46678eb0a6dfa6ff818b656f6132c4eed28881abafafa1e44f8cd2c", + "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_NativeMortarProbe.c": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a", + "addons/chat/Scripts/Game/ERR/ERR_NativeRadioProbe.c": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1", + "addons/chat/Scripts/Game/ERR/ERR_NativeSmoke.c": "95186a6c1553b38c6a214e897f845ef1799d8acca0cc896d8df73de680050888", + "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": "adf93245e6d78c59b9839599d157a0d2b2b93ea93b3d1ae52e2904dd6c288266", + "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": "df787bc40099512656e622c6c511d18caea2ff7a88d2c113e0d6940a551ad566", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryMap.c": "80fda5976c3d7a74ee3a481a0d5f365d5e59553046ebe84d0c84117829a32aaf", + "addons/core/Scripts/Game/ERR/ERR_DiscoveryService.c": "65cc0c23da131f986c3c90a8e4d294522e1d0681bec709b618daecb6e0d393c0", + "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": "043ac9ab7f3163f3285038ed008be782030714607d8e59e25593cfe95dd023b2", + "addons/core/Scripts/Game/ERR/ERR_InitialGuardRules.c": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558", + "addons/core/Scripts/Game/ERR/ERR_Inventory.c": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6", + "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": "84e0a2d73bc12160cd0a95138085eb7647fa26b2326f790a95cb53748009fdd3", + "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_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_NativeGuardCancelProbe.c": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514", + "addons/core/Scripts/Game/ERR/ERR_NativeLifecycleProbe.c": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115", + "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_NativePrisonerProbe.c": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86", + "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": "a363c2383e66311415fd29124f26f3b0c6cb866648d86673afac29fca22a994a", + "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": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553", + "addons/core/Scripts/Game/ERR/ERR_Objectives.c": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f", + "addons/core/Scripts/Game/ERR/ERR_Observer.c": "b719e723369ab4f403950c85226e1336eb48e3c127e84530ac1c695eb86bd0f9", + "addons/core/Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d", + "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_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": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8", + "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": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722", + "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_SharedMapComponent.c": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5", + "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-084026-restart-station-error/console.log.txt b/docs/evidence/native-2026-09-19-084026-restart-station-error/console.log.txt new file mode 100644 index 0000000..ce1d0b2 --- /dev/null +++ b/docs/evidence/native-2026-09-19-084026-restart-station-error/console.log.txt @@ -0,0 +1,1024 @@ +--------------------------------------------- +Log Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-40-26\console.log started at 2026-09-19 08:40:26 (2026-09-19 06:40:26 UTC) + +08:40:26.553 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-40-26' to filesystem under name logs +08:40:26.553 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-workbench-profile\profile' to filesystem under name profile +08:40:26.553 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\' +08:40:26.554 PROFILING : Workbench Create Engine took: 10.987400 ms +08:40:27.593 INIT : INIT : Workbench Init Engine +08:40:27.593 ENGINE : Initializing engine, version 192142 +08:40:27.593 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 +08:40:27.601 ENGINE : Addon dirs: +08:40:27.601 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/' +08:40:27.601 ENGINE : dir: 'Z:/home/jakub/devel/escapistsrereintroduced/addons' +08:40:27.601 ENGINE : dir: './addons' +08:40:27.601 ENGINE : dir: 'Z:/tmp/erri-workbench-profile/addons' +08:40:27.601 ENGINE : Available addons: +08:40:27.601 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:40:27.601 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:40:27.601 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:40:27.601 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:40:27.601 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:40:27.601 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed) +08:40:27.601 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed) +08:40:27.601 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\chat' to filesystem under name ERR_Chat +08:40:27.601 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\map' to filesystem under name ERR_Map +08:40:27.601 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\intel' to filesystem under name ERR_Intel +08:40:27.602 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\ai' to filesystem under name ERR_Ai +08:40:27.602 ENGINE : FileSystem: Adding relative directory 'Z:\home\jakub\devel\escapistsrereintroduced\addons\core' to filesystem under name ERR_Core +08:40:27.716 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger +08:40:27.719 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core +08:40:27.719 ENGINE : CPU vendor : AuthenticAMD +08:40:27.719 ENGINE : CPU type : 2 +08:40:27.719 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor +08:40:27.719 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB] +08:40:27.719 ENGINE : CPU count logical : 16 +08:40:27.719 ENGINE : CPU count physical : 8 +08:40:27.719 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2 +08:40:27.719 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:40:27.720 RESOURCES : ResourceDB: loading cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:40:27.720 RESOURCES : ResourceDB: loading cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:40:27.720 RESOURCES : ResourceDB: loading cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:40:27.720 RESOURCES : ResourceDB: loading cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:40:27.721 RESOURCES : ResourceDB: loading cache (id=5 name=ArmaReforger path=Z:/tmp/erri-workbench-profile/addons/ArmaReforger/resourceDatabase.rdb) +08:40:27.862 RESOURCES : ResourceDB: loading cache (id=6 name=core path=./addons/core/resourceDatabase.rdb) +08:40:27.863 RESOURCES : ResourceDB: loading cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:40:27.864 RESOURCES : ResourceDB: loading cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-40-26/resourceDatabase.rdb) +08:40:28.022 RESOURCES : RESOURCES : ResourceDB: full scan +08:40:28.027 RESOURCES : RESOURCES : scanning... +08:40:28.027 RESOURCES : RESOURCES : scanning @"ERR_Chat" +08:40:28.030 RESOURCES : RESOURCES : scanning @"ERR_Map" +08:40:28.032 RESOURCES : RESOURCES : scanning @"ERR_Intel" +08:40:28.032 RESOURCES : RESOURCES : scanning @"ERR_Ai" +08:40:28.034 RESOURCES : RESOURCES : scanning @"ERR_Core" +08:40:28.038 RESOURCES : RESOURCES : scanning @"ArmaReforger" +08:40:28.179 RESOURCES : RESOURCES : scanning @"core" +08:40:28.183 RESOURCES : RESOURCES : scanning @"profile" +08:40:28.183 RESOURCES : RESOURCES : scanning @"logs" +08:40:28.184 RESOURCES : RESOURCES : processing meta-files... +08:40:28.248 RESOURCES : RESOURCES : processing files... +08:40:28.258 INIT : Workbench startup +08:40:28.258 INIT : Workbench Init Engine +08:40:28.258 RESOURCES : ResourceDB: full scan +08:40:28.258 RESOURCES : processing files... +08:40:28.258 RESOURCES (W): resource not registered: @"$profile:rereintroduced.json". Setting null GUID +08:40:28.258 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID +08:40:28.258 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID +08:40:28.258 RESOURCES : RESOURCES : processing folders... +08:40:28.264 RESOURCES : RESOURCES : creating GUID-item mapping... +08:40:28.281 RESOURCES : RESOURCES : building tree... +08:40:28.338 PROFILING : ResourceDB: full scan took: 315.874800 ms +08:40:28.339 RESOURCES : ResourceDB: saving cache (id=0 name=ERR_Chat path=Z:\home\jakub\devel\escapistsrereintroduced\addons\chat/resourceDatabase.rdb) +08:40:28.340 RESOURCES : ResourceDB: written 741/741 bytes +08:40:28.340 RESOURCES : ResourceDB: cache successfully saved +08:40:28.340 RESOURCES : ResourceDB: saving cache (id=1 name=ERR_Map path=Z:\home\jakub\devel\escapistsrereintroduced\addons\map/resourceDatabase.rdb) +08:40:28.342 RESOURCES : ResourceDB: written 750/750 bytes +08:40:28.342 RESOURCES : ResourceDB: cache successfully saved +08:40:28.342 RESOURCES : ResourceDB: saving cache (id=2 name=ERR_Intel path=Z:\home\jakub\devel\escapistsrereintroduced\addons\intel/resourceDatabase.rdb) +08:40:28.343 RESOURCES : ResourceDB: written 227/227 bytes +08:40:28.343 RESOURCES : ResourceDB: cache successfully saved +08:40:28.344 RESOURCES : ResourceDB: saving cache (id=3 name=ERR_Ai path=Z:\home\jakub\devel\escapistsrereintroduced\addons\ai/resourceDatabase.rdb) +08:40:28.345 RESOURCES : ResourceDB: written 1356/1356 bytes +08:40:28.345 RESOURCES : ResourceDB: cache successfully saved +08:40:28.345 RESOURCES : ResourceDB: saving cache (id=4 name=ERR_Core path=Z:\home\jakub\devel\escapistsrereintroduced\addons\core/resourceDatabase.rdb) +08:40:28.347 RESOURCES : ResourceDB: written 6203/6203 bytes +08:40:28.347 RESOURCES : ResourceDB: cache successfully saved +08:40:28.347 RESOURCES : ResourceDB: saving cache (id=7 name=profile path=Z:\tmp\erri-workbench-profile\profile/resourceDatabase.rdb) +08:40:28.349 RESOURCES : ResourceDB: written 206/206 bytes +08:40:28.349 RESOURCES : ResourceDB: cache successfully saved +08:40:28.349 RESOURCES : ResourceDB: saving cache (id=8 name=logs path=Z:\tmp\erri-workbench-profile\logs\logs_2026-09-19_08-40-26/resourceDatabase.rdb) +08:40:28.350 RESOURCES : ResourceDB: written 162/162 bytes +08:40:28.350 RESOURCES : ResourceDB: cache successfully saved +08:40:28.351 ENGINE : GameProject load +08:40:28.351 ENGINE : Loaded addons: +08:40:28.351 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' +08:40:28.351 ENGINE : gproj: 'Z:/tmp/erri-workbench-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' +08:40:28.351 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/core/addon.gproj' guid: '2528466DE220D91C' +08:40:28.351 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/ai/addon.gproj' guid: '5192138CB9D5B911' +08:40:28.351 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/intel/addon.gproj' guid: 'D31039C7C53E348A' +08:40:28.351 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/map/addon.gproj' guid: '9AAEE9041D79809E' +08:40:28.351 ENGINE : gproj: 'Z:/home/jakub/devel/escapistsrereintroduced/addons/chat/addon.gproj' guid: 'FA804F411BDDF2C6' +08:40:28.353 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf' +08:40:28.354 INIT : GameProject engine user settings load @"$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf" +08:40:28.354 ENGINE : Engine user settings config loaded +08:40:28.354 PROFILING : Settings changed took: 0.001900 ms +08:40:28.460 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0 +08:40:28.461 RENDER : Basic screen setup: +08:40:28.461 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29) +08:40:28.461 RENDER : MSAA : none +08:40:28.476 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0 +08:40:28.476 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device) +08:40:28.476 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs +08:40:28.476 RENDER : * core clocks 2720 MHz, memory 1124 MHz +08:40:28.476 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s) +08:40:28.476 RENDER : AMD AGS correctly initialized +08:40:28.477 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 +08:40:28.477 RENDER : Detected output devices: +08:40:28.477 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21): +08:40:28.477 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz +08:40:28.477 RENDER : Concurrent frames limit 2 +08:40:28.548 RENDER : DX12 device successfully created by AMD AGS library +08:40:28.548 RENDER : * user markers not supported in this version AMD SW +08:40:28.548 RENDER : Graphics device features +08:40:28.548 RENDER : Needed: +08:40:28.548 RENDER : * Highest supported shader model: 6.8 (6.0 needed) +08:40:28.548 RENDER : Optional: +08:40:28.548 RENDER : * Allow tearing (VSYNC) : 1 +08:40:28.548 RENDER : * 16 bits : 1 +08:40:28.548 RENDER : * Resource heap tier : 3 +08:40:28.548 RENDER : * Persistent heaps (DRED) : 1 +08:40:28.548 RENDER : * DRED 1.2 is supported by compiler +08:40:28.571 RENDER : Main RT format setup. +08:40:28.571 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26) +08:40:28.571 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10) +08:40:28.573 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16 +08:40:28.603 PROFILING : Settings changed took: 0.018800 ms +08:40:29.070 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:40:29.070 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:40:29.071 AUDIO : Audio client: +08:40:29.071 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:40:29.074 RENDER : RENDER : Reload shaders +08:40:29.075 RENDER : Enfusion shader version 13 +08:40:29.075 INIT : INIT : ShaderListReload +08:40:29.075 PROFILING : ShaderListReload took: 0.000500 ms +08:40:29.213 AUDIO : Endpoint: Speakers (PulseAudio Output) +08:40:29.213 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B +08:40:29.214 AUDIO : Audio client: +08:40:29.214 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512 +08:40:29.404 RENDER : Loaded 3752 newer shader binaries +08:40:29.404 PROFILING : Reload shaders took: 329.483600 ms +08:40:29.404 ENGINE : Initializing inputs. +08:40:29.416 NETWORK : Initializing networking. +08:40:29.416 NETWORK : Using new GameRplScheduler. +08:40:29.416 SCRIPT : SCRIPT : Initializing scripts +08:40:29.417 SCRIPT : SCRIPT : ScriptProjectManager init +08:40:31.562 PROFILING : ScriptProjectManager init took: 2145.328500 ms +08:40:31.645 PROFILING : Initializing scripts took: 2228.520900 ms +08:40:31.663 ENGINE : Enfusion engine successfully created. +08:40:31.663 PROFILING : Workbench Init Engine took: 4069.760700 ms +08:40:31.663 INIT : INIT : Workbench Create Game +08:40:31.675 GUI : Using default language (en_us) +08:40:31.675 GUI : Loading 'en_us' localization file. +08:40:31.675 INIT : INIT : Loading StringTable +08:40:31.698 PROFILING : Loading StringTable took: 22.846700 ms +08:40:31.698 SCRIPT : SCRIPT : Compiling GameLib scripts +08:40:31.773 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 +08:40:31.773 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 +08:40:31.774 PROFILING : Compiling GameLib scripts took: 76.036500 ms +08:40:31.774 SCRIPT : SCRIPT : Compiling Game scripts +08:40:33.064 INIT : Workbench Create Game +08:40:33.064 SCRIPT : Compiling Game scripts +08:40:33.064 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete +08:40:33.064 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete +08:40:33.219 SCRIPT (W): @"Scripts/Game/ERR/ERR_SiteService.c,191": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.355 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed +08:40:33.387 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete +08:40:33.482 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete +08:40:33.518 SCRIPT (W): @"Scripts/Game/ERR/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead +08:40:33.578 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete +08:40:33.578 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete +08:40:33.582 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete +08:40:33.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.621 SCRIPT (W): @"Scripts/Game/ERR/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api. +08:40:33.622 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api. +08:40:33.647 SCRIPT (W): @"Scripts/Game/ERR/ERR_NativeTransportProbe.c,82": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly. +08:40:33.684 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete +08:40:33.960 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: e963af0e +08:40:33.967 SCRIPT : Module: Game; loaded 5759x files; 11304x classes; used 33167K 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: 38d29813 +08:40:34.007 PROFILING : Compiling Game scripts took: 2233.575500 ms +08:40:34.013 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:40:34.051 ENGINE : Game successfully created. +08:40:34.052 PROFILING : Workbench Create Game took: 2389.568200 ms +08:40:34.060 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/thumbnails +08:40:34.857 INIT : INIT : Workbench Reload Game +08:40:34.859 ENGINE : Game destroyed. +08:40:34.865 GUI : Using default language (en_us) +08:40:34.865 GUI : Loading 'en_us' localization file. +08:40:34.865 INIT : INIT : Loading StringTable +08:40:34.875 PROFILING : Loading StringTable took: 9.472500 ms +08:40:34.875 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:40:34.883 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:40:34.883 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:40:34.883 ENGINE : Game successfully created. +08:40:34.883 ENGINE : Game successfully initialized. +08:40:34.883 PROFILING : Workbench Reload Game took: 25.594500 ms +08:40:35.583 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:40:36.586 PROFILING : Entities load took: 1002.373500 ms +08:40:36.598 WORLD : WORLD : CreateEntities +08:40:36.605 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:40:36.605 PROFILING : NotifyBeforeEntitiesCreated took: 0.003600 ms +08:40:36.605 WORLD : WORLD : Wait for preloading data +08:40:36.605 PROFILING : Wait for preloading data took: 0.003800 ms +08:40:36.711 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:40:36.712 PROFILING : PROFILING : Terrain load +08:40:38.702 PROFILING : Terrain load took: 1989.828700 ms +08:40:42.787 WORLD : CreateEntities +08:40:42.787 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" +08:40:42.787 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:40:42.788 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:40:53.805 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:40:53.805 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005400 ms +08:40:54.240 WORLD : WORLD : NotifyEntitiesInitialized +08:40:54.240 TERRAIN : TERRAIN : Initializing road networks... +08:40:54.243 PROFILING : Initializing road networks... took: 2.208700 ms +08:40:54.243 PROFILING : NotifyEntitiesInitialized took: 2.654000 ms +08:40:54.243 PROFILING : CreateEntities took: 17644.260500 ms +08:40:54.415 PROFILING : * WorldEditor: LoadWorld: 18837.356000 ms +08:40:55.869 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf) +08:40:55.870 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf) +08:40:55.871 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'... +08:40:55.871 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping... +08:40:55.958 SCRIPT : ERR VALIDATION: prison terrain=211.344, radio terrain=159.656, extraction terrain=65.1562 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7154 y=211.531 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7157 y=211.516 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7160 y=211.5 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7163 y=211.453 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6084 z=7166 y=211.406 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6087 z=7154 y=211.438 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6087 z=7157 y=211.438 +08:40:55.958 SCRIPT : ERR TERRAIN: x=6087 z=7160 y=211.422 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6087 z=7163 y=211.391 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6087 z=7166 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7154 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7157 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7160 y=211.344 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7163 y=211.328 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6090 z=7166 y=211.281 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6093 z=7154 y=211.25 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6093 z=7157 y=211.281 +08:40:55.959 SCRIPT : ERR TERRAIN: x=6093 z=7160 y=211.25 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6093 z=7163 y=211.234 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6093 z=7166 y=211.188 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7154 y=211.156 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7157 y=211.172 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7160 y=211.156 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7163 y=211.141 +08:40:55.960 SCRIPT : ERR TERRAIN: x=6096 z=7166 y=211.094 +08:40:55.985 SCRIPT : ERR SITE CANDIDATE: position=<6090,211.344,7160> elevationRange=0.640625 +08:40:56.009 BACKEND : Attempting online Game Config instead. +08:40:59.128 INIT : INIT : Workbench Reload Game +08:40:59.130 ENGINE : Game destroyed. +08:40:59.137 GUI : Using default language (en_us) +08:40:59.137 GUI : Loading 'en_us' localization file. +08:40:59.137 INIT : INIT : Loading StringTable +08:40:59.157 PROFILING : Loading StringTable took: 19.773000 ms +08:40:59.157 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC. +08:40:59.167 SCRIPT : Unable to register a script command due keyword duplicity: ban +08:40:59.167 SCRIPT : Unable to register a script command due keyword duplicity: kick +08:40:59.167 ENGINE : Game successfully created. +08:40:59.167 ENGINE : Game successfully initialized. +08:40:59.167 PROFILING : Workbench Reload Game took: 39.406900 ms +08:40:59.169 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected) +08:40:59.223 PLATFORM : Save data from container 'settings' have been loaded +08:40:59.313 PLATFORM : Save data from container 'sessions' have been loaded +08:40:59.314 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:40:59.314 ENGINE : Game user settings config loaded +08:40:59.411 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:40:59.419 WORLD : WORLD : Game::LoadEntities +08:40:59.419 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:40:59.420 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:40:59.420 WORLD : WORLD : CreateEntities +08:40:59.420 WORLD : WORLD : CreateEntities +08:40:59.420 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:40:59.431 RESOURCES : Loaded mission headers from 7 addon(s)! +08:40:59.431 PROFILING : NotifyBeforeEntitiesCreated took: 11.156600 ms +08:40:59.431 WORLD : WORLD : Wait for preloading data +08:40:59.431 PROFILING : Wait for preloading data took: 0.000700 ms +08:41:04.167 WORLD : Game::LoadEntities +08:41:04.167 WORLD : CreateEntities +08:41:04.167 WORLD : CreateEntities +08:41:04.167 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" +08:41:04.167 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:41:04.167 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:41:05.600 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:41:05.600 ENTITY : CreateComponent 'Hierarchy' +08:41:05.600 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>') +08:41:05.601 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:41:05.601 ENTITY : CreateComponent 'Hierarchy' +08:41:05.601 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>') +08:41:05.601 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:41:05.601 ENTITY : CreateComponent 'Hierarchy' +08:41:05.601 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>') +08:41:05.607 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:41:05.607 ENTITY : CreateComponent 'Hierarchy' +08:41:05.607 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>') +08:41:05.607 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:41:05.607 ENTITY : CreateComponent 'Hierarchy' +08:41:05.607 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>') +08:41:05.607 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:41:05.607 ENTITY : CreateComponent 'Hierarchy' +08:41:05.607 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>') +08:41:05.612 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:41:05.612 ENTITY : CreateComponent 'Hierarchy' +08:41:05.612 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>') +08:41:05.612 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:41:05.612 ENTITY : CreateComponent 'Hierarchy' +08:41:05.612 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>') +08:41:05.612 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:41:05.612 ENTITY : CreateComponent 'Hierarchy' +08:41:05.612 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>') +08:41:11.057 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:41:11.057 PROFILING : NotifyBeforeEntitiesInitialized took: 0.041500 ms +08:41:13.069 WORLD : InitEntities 'world' +08:41:13.069 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:41:13.069 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:41:13.097 WORLD : InitEntities 'world' +08:41:13.097 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:41:13.097 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:41:13.098 WORLD : WORLD : NotifyEntitiesInitialized +08:41:13.098 TERRAIN : TERRAIN : Initializing road networks... +08:41:13.100 PROFILING : Initializing road networks... took: 2.440800 ms +08:41:13.100 DEFAULT : DEFAULT : WorldVolumesCollection +08:41:13.160 PROFILING : WorldVolumesCollection took: 59.954000 ms +08:41:13.160 INIT : INIT : SoundWorldInit +08:41:13.176 PROFILING : SoundWorldInit took: 15.440100 ms +08:41:13.176 PROFILING : NotifyEntitiesInitialized took: 78.089700 ms +08:41:13.176 PROFILING : CreateEntities took: 13755.423300 ms +08:41:13.176 PROFILING : CreateEntities took: 13755.599300 ms +08:41:13.177 WORLD : WORLD : Wait for preloading data around camera +08:41:13.177 PROFILING : Wait for preloading data around camera took: 0.001000 ms +08:41:13.177 WORLD : WORLD : EOnActivate +08:41:13.211 PROFILING : EOnActivate took: 34.733200 ms +08:41:13.212 PROFILING : Game::LoadEntities took: 13792.434700 ms +08:41:13.500 DEFAULT : Entered offline game state. +08:41:13.602 NETWORK : Player connected: connectionID=2147483646 +08:41:13.603 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:41:13.603 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:41:13.608 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:41:13.608 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:41:13.608 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:41:13.609 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! +08:41:13.609 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! +08:41:13.610 SCRIPT (W): Can't open config file "" +08:41:13.617 WORLD : InitEntities 'world' +08:41:13.618 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:41:13.618 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:41:13.618 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:41:13.618 SCRIPT (W): Slot_Chat Has no Content! +08:41:13.618 SCRIPT (W): Slot_VON Has no Content! +08:41:13.618 SCRIPT (W): Slot_AvailableActions Has no Content! +08:41:13.619 SCRIPT (W): Slot_Vehicle Has no Content! +08:41:13.619 SCRIPT (W): Slot_GameVersion Has no Content! +08:41:13.619 SCRIPT (W): Slot_Notifications Has no Content! +08:41:13.619 SCRIPT (W): Slot_Hints Has no Content! +08:41:13.630 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:41:13.630 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:41:13.630 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:41:13.631 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. +08:41:13.631 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. +08:41:13.635 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:41:13.635 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config +08:41:13.635 NETWORK : Players connecting: 0 +08:41:13.635 NETWORK : Players connected: 1 / 1 +08:41:13.665 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERR_Chat/autosaves +08:41:13.667 PROFILING : Workbench startup took: 47178.163700 ms +08:41:13.692 WORLD : Frame start +08:41:13.693 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:41:13.708 WORLD : UpdateEntities +08:41:13.708 WORLD : Frame +08:41:13.708 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:41:13.892 WORLD : UpdateEntities +08:41:13.892 WORLD : PostFrame +08:41:13.892 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:41:13.892 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:41:13.939 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:41:13.939 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout" +08:41:13.939 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout" +08:41:13.939 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab +08:41:14.070 RENDER : RENDER : ObjectsHeightMap::Build +08:41:14.070 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:41:14.233 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 162.508900 ms +08:41:14.240 PROFILING : ObjectsHeightMap::Build took: 169.896300 ms +08:41:15.403 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:41:15.422 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:41:15.422 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:41:15.450 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:41:15.452 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:41:15.501 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:41:15.501 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:41:15.506 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:41:15.553 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:41:15.553 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:41:15.555 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:41:15.556 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:41:15.559 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:41:15.560 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:41:15.560 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:41:15.562 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:41:15.562 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:41:15.562 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:41:15.562 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:41:15.562 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:41:15.563 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:41:15.563 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 +08:41:15.563 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:41:15.563 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:41:15.563 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 +08:41:15.563 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:41:15.564 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:41:15.564 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 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.564 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.565 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:15.565 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:41:16.358 WORLD : UpdateEntities +08:41:16.358 WORLD : AfterPostSimulate +08:41:16.358 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.419 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.669 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.08,63.5305,7499.7> up=0.995681 +08:41:16.669 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.315805 angularSpeed=0.0413827 +08:41:16.669 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:16.669 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6155,7501.97> +08:41:16.670 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3155,7501.97> terrainY=63.3164 tireTerrainGap=-0.000904083 +08:41:16.670 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6155,7501.97> radius=0.3 bottom=<7012.07,63.3155,7501.97> fraction=0.45042 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=-0.000907898 +08:41:16.670 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.6027,7497.71> +08:41:16.670 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1527,7497.71> terrainY=64.1555 tireTerrainGap=-0.00283051 +08:41:16.670 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.6027,7497.71> radius=0.45 bottom=<7009.88,64.1527,7497.71> fraction=0.4422 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00271606 +08:41:16.670 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2642,7497.74> +08:41:16.671 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8142,7497.74> terrainY=63.8179 tireTerrainGap=-0.00374985 +08:41:16.671 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2642,7497.74> radius=0.45 bottom=<7014.42,63.8142,7497.74> fraction=0.437222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00381088 +08:41:16.671 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:16.923 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:16.924 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:16.924 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:16.924 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:41:17.433 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:17.433 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.434 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.752 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.1,63.5347,7499.71> up=0.994334 +08:41:17.752 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0954657 angularSpeed=0.0274343 +08:41:17.752 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:17.752 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6187,7501.99> +08:41:17.752 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3187,7501.99> terrainY=63.3146 tireTerrainGap=0.00414276 +08:41:17.752 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6187,7501.99> radius=0.3 bottom=<7012.07,63.3187,7501.99> fraction=0.473389 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00414658 +08:41:17.753 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.93,64.602,7497.71> +08:41:17.753 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.93,64.152,7497.71> terrainY=64.149 tireTerrainGap=0.00299835 +08:41:17.753 SCRIPT : ERR GEAR SUPPORT: center=<7009.93,64.602,7497.71> radius=0.45 bottom=<7009.93,64.152,7497.71> fraction=0.468312 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00302887 +08:41:17.753 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.47,64.2647,7497.78> +08:41:17.753 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.47,63.8147,7497.78> terrainY=63.8155 tireTerrainGap=-0.000743866 +08:41:17.753 SCRIPT : ERR GEAR SUPPORT: center=<7014.47,64.2647,7497.78> radius=0.45 bottom=<7014.47,63.8147,7497.78> fraction=0.451111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00075531 +08:41:17.754 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:41:17.754 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.243 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:41:18.243 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.243 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.244 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.244 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:41:18.754 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5314,7499.74> up=0.994217 +08:41:18.754 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0409494 angularSpeed=0.0213691 +08:41:18.755 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:18.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6136,7502.01> +08:41:18.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3136,7502.01> terrainY=63.3116 tireTerrainGap=0.0020752 +08:41:18.755 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 +08:41:18.755 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5947,7497.72> +08:41:18.755 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1447,7497.72> terrainY=64.1428 tireTerrainGap=0.00189209 +08:41:18.756 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5947,7497.72> radius=0.45 bottom=<7009.97,64.1447,7497.72> fraction=0.463264 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00192261 +08:41:18.756 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.82> +08:41:18.756 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.82> terrainY=63.8128 tireTerrainGap=-0.00247574 +08:41:18.756 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2603,7497.82> radius=0.45 bottom=<7014.51,63.8103,7497.82> fraction=0.44321 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00249481 +08:41:18.756 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:18.756 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:18.757 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:18.757 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:18.757 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:19.259 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.260 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.260 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.260 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:41:19.763 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:41:19.763 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:41:19.763 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:19.763 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:41:19.764 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +08:41:19.764 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 +08:41:19.764 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:41:19.765 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +08:41:19.765 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 +08:41:19.765 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:41:19.765 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +08:41:19.765 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 +08:41:19.765 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:19.766 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:19.766 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.766 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:19.767 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:41:20.264 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.264 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.264 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.265 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.772 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.13,63.529,7499.75> up=0.994144 +08:41:20.773 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:41:20.773 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:41:20.773 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.08,63.6125,7502.02> +08:41:20.773 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.08,63.3125,7502.02> terrainY=63.3109 tireTerrainGap=0.00169373 +08:41:20.773 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 +08:41:20.774 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.594,7497.73> +08:41:20.774 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.144,7497.73> terrainY=64.1414 tireTerrainGap=0.00255585 +08:41:20.774 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 +08:41:20.774 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2603,7497.84> +08:41:20.774 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8103,7497.84> terrainY=63.8122 tireTerrainGap=-0.00188065 +08:41:20.774 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 +08:41:20.775 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:41:20.775 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:41:20.776 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:41:20.786 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:41:20.788 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:41:20.788 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:41:20.928 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:41:20.970 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.491,7158.5> +08:41:21.186 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:41:21.186 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:41:21.186 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:41:21.187 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:41:21.187 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:41:21.187 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:41:21.187 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:41:21.188 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:41:21.192 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:41:21.194 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:41:21.194 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:41:21.195 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:41:21.196 SCRIPT : ERR SMOKE PASS: initial prisoner position +08:41:21.196 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +08:41:21.196 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +08:41:21.196 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:41:21.196 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +08:41:21.197 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +08:41:21.198 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +08:41:21.199 SCRIPT : ERR SMOKE PASS: lock permits prisoner +08:41:21.199 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:41:21.200 SCRIPT : ERR SMOKE PASS: lock action advances mission +08:41:21.200 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +08:41:21.203 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +08:41:21.207 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +08:41:21.691 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:41:21.939 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:41:23.210 RESOURCES : Screenshot saved to $logs:err-prison.png +08:41:24.230 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +08:41:24.231 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:41:24.963 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:41:26.759 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +08:41:26.760 SCRIPT : ERR SMOKE PASS: radio rejects distant player +08:41:27.769 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +08:41:27.770 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:41:27.771 SCRIPT : ERR SMOKE PASS: identified radio starts defence +08:41:30.801 SCRIPT : ERR SMOKE PASS: occupied defence timer running +08:41:33.333 SCRIPT : ERR SMOKE PASS: leaving area resets defence +08:42:04.164 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:42:06.719 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +08:42:06.719 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +08:42:09.737 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +08:42:10.203 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:42:10.203 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +08:42:10.203 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +08:42:10.316 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:42:10.318 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:42:10.318 SCRIPT (W): Slot_Chat Has no Content! +08:42:10.318 SCRIPT (W): Slot_VON Has no Content! +08:42:10.318 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:10.318 SCRIPT (W): Slot_Notifications Has no Content! +08:42:12.353 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:42:12.353 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:42:12.354 SCRIPT : -- Stack trace -- +08:42:12.354 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:42:12.354 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:42:12.354 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:42:12.354 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:42:12.354 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:42:12.354 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:42:12.354 SCRIPT : ----------------- +08:42:12.354 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:42:12.355 SCRIPT : -- Stack trace -- +08:42:12.355 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:42:12.355 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:42:12.355 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:42:12.355 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:42:12.355 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:42:12.355 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:42:12.355 SCRIPT : ----------------- +08:42:12.357 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:42:12.357 SCRIPT (W): Slot_Chat Has no Content! +08:42:12.357 SCRIPT (W): Slot_VON Has no Content! +08:42:12.357 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:12.357 SCRIPT (W): Slot_Notifications Has no Content! +08:42:12.359 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:42:14.243 RESOURCES : Screenshot saved to $logs:err-result.png +08:42:40.232 SCRIPT (W): Maybe a problem: DataProgression is not ready but the analytics event was requested +08:42:40.233 SCRIPT (W): SCR_PlayerData:CalculateStatsChange: Specialization stats, experience or rank stats were modified prematurely. The career data for this session might be compromised +08:42:40.455 DEFAULT (W): Achievements cannot be saved. +08:42:40.456 DEFAULT (W): Achievements failed to save. Consecutive calls to Achievements API may fail. +08:42:40.755 PLATFORM : Save data from container 'settings' have been loaded +08:42:40.855 PLATFORM : Save data from container 'sessions' have been loaded +08:42:40.855 PLATFORM : GameProject user settings load from profile @"ReforgerGameSettings.conf" +08:42:40.855 ENGINE : Game user settings config loaded +08:42:43.900 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +08:42:43.904 SCRIPT (E): 'SCR_BaseResupplySupportStationComponent' needs a entity catalog manager! +08:42:44.046 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{B6C516F86302C679}Worlds/ERR_Everon.ent'. +08:42:44.047 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent' +08:42:44.743 PROFILING : Entities load took: 696.301300 ms +08:42:44.745 WORLD : WORLD : Game::LoadEntities +08:42:44.746 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf" +08:42:44.746 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits. +08:42:44.747 WORLD : WORLD : CreateEntities +08:42:44.747 WORLD : WORLD : CreateEntities 'world' +08:42:44.747 WORLD : WORLD : NotifyBeforeEntitiesCreated +08:42:44.747 RESOURCES : Unloading all loaded mission headers from 7 addon(s)! +08:42:44.756 RESOURCES : Loaded mission headers from 7 addon(s)! +08:42:44.756 PROFILING : NotifyBeforeEntitiesCreated took: 9.637000 ms +08:42:44.756 WORLD : WORLD : Wait for preloading data +08:42:44.756 PROFILING : Wait for preloading data took: 0.000400 ms +08:42:44.757 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et" +08:42:44.757 PROFILING : PROFILING : Terrain load +08:42:46.308 PROFILING : Terrain load took: 1551.260900 ms +08:42:49.255 WORLD : Game::LoadEntities +08:42:49.255 WORLD : CreateEntities +08:42:49.255 WORLD : CreateEntities 'world' +08:42:49.255 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" +08:42:49.255 ENTITY : CreateComponent 'ScriptedRadioComponent' +08:42:49.255 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent. +08:42:50.602 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168> +08:42:50.602 ENTITY : CreateComponent 'Hierarchy' +08:42:50.602 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>') +08:42:50.602 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055> +08:42:50.602 ENTITY : CreateComponent 'Hierarchy' +08:42:50.602 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>') +08:42:50.602 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961> +08:42:50.602 ENTITY : CreateComponent 'Hierarchy' +08:42:50.602 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>') +08:42:50.606 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344> +08:42:50.606 ENTITY : CreateComponent 'Hierarchy' +08:42:50.606 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>') +08:42:50.606 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375> +08:42:50.606 ENTITY : CreateComponent 'Hierarchy' +08:42:50.606 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>') +08:42:50.607 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516> +08:42:50.607 ENTITY : CreateComponent 'Hierarchy' +08:42:50.607 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>') +08:42:50.611 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084> +08:42:50.611 ENTITY : CreateComponent 'Hierarchy' +08:42:50.611 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>') +08:42:50.611 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421> +08:42:50.611 ENTITY : CreateComponent 'Hierarchy' +08:42:50.611 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>') +08:42:50.611 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869> +08:42:50.611 ENTITY : CreateComponent 'Hierarchy' +08:42:50.611 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>') +08:42:55.813 WORLD : WORLD : NotifyBeforeEntitiesInitialized +08:42:55.813 PROFILING : NotifyBeforeEntitiesInitialized took: 0.050000 ms +08:42:57.778 WORLD : InitEntities 'world' +08:42:57.778 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:42:57.778 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead. +08:42:57.779 WORLD : InitEntities 'world' +08:42:57.779 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Rereintroduced', ERR_GameMode) at <1076.468018 51.000999 1325.246948> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et" +08:42:57.779 SCRIPT : ERR SMOKE: scripted integration test enabled; gameplay acceptance remains separate +08:42:57.779 WORLD : WORLD : NotifyEntitiesInitialized +08:42:57.779 TERRAIN : TERRAIN : Initializing road networks... +08:42:57.781 PROFILING : Initializing road networks... took: 1.806300 ms +08:42:57.781 DEFAULT : DEFAULT : WorldVolumesCollection +08:42:57.837 PROFILING : WorldVolumesCollection took: 56.005700 ms +08:42:57.837 INIT : INIT : SoundWorldInit +08:42:57.838 PROFILING : SoundWorldInit took: 0.370500 ms +08:42:57.838 PROFILING : NotifyEntitiesInitialized took: 58.352300 ms +08:42:57.838 PROFILING : CreateEntities took: 13090.813400 ms +08:42:57.838 PROFILING : CreateEntities took: 13090.998000 ms +08:42:57.838 WORLD : WORLD : Wait for preloading data around camera +08:42:57.838 PROFILING : Wait for preloading data around camera took: 0.001100 ms +08:42:57.838 WORLD : WORLD : EOnActivate +08:42:57.867 PROFILING : EOnActivate took: 28.303700 ms +08:42:57.867 PROFILING : Game::LoadEntities took: 13121.532800 ms +08:42:57.867 PROFILING : * LoadEntities: 13121.954800 ms +08:42:58.332 DEFAULT : Entered offline game state. +08:42:58.440 NETWORK : Player connected: connectionID=2147483646 +08:42:58.441 NETWORK : ### Connecting player: connectionID=2147483646, Name= +08:42:58.441 NETWORK : ### Creating player: PlayerId=1, Name=jakub +08:42:58.443 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:42:58.444 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> +08:42:58.444 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:42:58.444 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! +08:42:58.444 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! +08:42:58.446 SCRIPT (W): Can't open config file "" +08:42:58.446 SCRIPT (W): Cannot update game blocklist. Another request in progress. +08:42:58.447 WORLD : InitEntities 'world' +08:42:58.447 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et" +08:42:58.447 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout" +08:42:58.447 SCRIPT (W): Slot_WeaponInfo Has no Content! +08:42:58.447 SCRIPT (W): Slot_Chat Has no Content! +08:42:58.448 SCRIPT (W): Slot_VON Has no Content! +08:42:58.448 SCRIPT (W): Slot_AvailableActions Has no Content! +08:42:58.448 SCRIPT (W): Slot_Vehicle Has no Content! +08:42:58.448 SCRIPT (W): Slot_GameVersion Has no Content! +08:42:58.448 SCRIPT (W): Slot_Notifications Has no Content! +08:42:58.448 SCRIPT (W): Slot_Hints Has no Content! +08:42:58.452 ENTITY : SpawnEntityPrefab @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:42:58.452 ENTITY : Create entity @"ENTITY:4611686018427388384" ('SCR_EditorModeEntity') at <0.000000 0.000000 0.000000> +08:42:58.453 ENTITY : EntityPrefabUse @"{59EF8ECAE1DCD417}Prefabs/Editor/Modes/EditorModeEdit.et" +08:42:58.453 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. +08:42:58.453 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. +08:42:58.455 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000 +08:42:58.456 NETWORK : Players connecting: 0 +08:42:58.456 NETWORK : Players connected: 1 / 1 +08:42:58.475 WORLD : Frame start +08:42:58.475 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated. +08:42:58.488 WORLD : UpdateEntities +08:42:58.488 WORLD : Frame +08:42:58.488 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME +08:42:58.601 WORLD : UpdateEntities +08:42:58.601 WORLD : PostFrame +08:42:58.602 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout" +08:42:58.602 SCRIPT (W): EditBoxFilterComponent used on invalid widget type. +08:42:58.623 RENDER : RENDER : ObjectsHeightMap::Build +08:42:58.623 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld +08:42:58.801 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 178.248900 ms +08:42:58.807 PROFILING : ObjectsHeightMap::Build took: 184.445100 ms +08:42:59.997 SCRIPT : Rereintroduced [sites]: cache clearance position=<6086,211.538,7160> clear=1 +08:43:00.004 SCRIPT : Rereintroduced [sites]: authored everon-prison-1 at <6090,211.444,7160> +08:43:00.004 SCRIPT : Rereintroduced [sites]: cache clearance position=<6150,203.288,7050> clear=1 +08:43:00.013 SCRIPT : Rereintroduced [sites]: authored everon-supply-1 at <6150,203.288,7050> +08:43:00.014 SCRIPT : Rereintroduced [sites]: authored everon-radio-1 at <6500,159.756,7200> +08:43:00.023 SCRIPT : Rereintroduced [sites]: authored everon-extraction-1 at <7000,65.2562,7500> +08:43:00.023 SCRIPT : Rereintroduced [sites]: cache clearance position=<5960,220.256,7220> clear=1 +08:43:00.028 SCRIPT : Rereintroduced [sites]: transport parking=<5960,220.256,7212> radius=4 terrainRange=0.8125 obstructed=0 clear=1 +08:43:00.037 SCRIPT : Rereintroduced [sites]: authored everon-supply-2 at <5960,220.256,7220> +08:43:00.038 SCRIPT : Rereintroduced [sites]: cache clearance position=<6340,175.788,7400> clear=1 +08:43:00.039 SCRIPT : Rereintroduced [sites]: authored everon-medical-1 at <6340,175.788,7400> +08:43:00.040 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.6,7300> clear=1 +08:43:00.043 SCRIPT : Rereintroduced [sites]: cache clearance position=<6740,140.913,7296> clear=1 +08:43:00.044 SCRIPT : Rereintroduced [sites]: cache clearance position=<6736,140.975,7300> clear=1 +08:43:00.044 SCRIPT : Rereintroduced [sites]: cache clearance position=<6744,140.288,7300> clear=1 +08:43:00.046 SCRIPT : Rereintroduced [sites]: authored everon-outpost-1 at <6740,140.6,7300> +08:43:00.046 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012,63.725,7500> up=1 +08:43:00.046 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0 angularSpeed=0 +08:43:00.046 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=0 engine=0 origin=<0,0,0> up=1 entityDifference=10267.5 +08:43:00.046 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012,64.0216,7502.25> +08:43:00.046 SCRIPT : ERR GEAR TERRAIN: bottom=<7012,63.7216,7502.25> terrainY=63.2926 tireTerrainGap=0.428944 +08:43:00.047 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 +08:43:00.047 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.72,64.4897,7497.97> +08:43:00.047 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.72,64.0397,7497.97> terrainY=64.1655 tireTerrainGap=-0.125717 +08:43:00.047 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 +08:43:00.047 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.28,64.4898,7497.97> +08:43:00.047 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.28,64.0398,7497.97> terrainY=63.8096 tireTerrainGap=0.230156 +08:43:00.048 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 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.048 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=0 conscious=0 nativeComplete=0 +08:43:00.719 WORLD : UpdateEntities +08:43:00.719 WORLD : AfterPostSimulate +08:43:00.719 DEFAULT (W): Collider UCS_FG_DriveShaft_01 not found +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:00.759 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:01.009 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=0 origin=<7012.08,63.5661,7499.7> up=0.995234 +08:43:01.009 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.371015 angularSpeed=0.144353 +08:43:01.010 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:01.010 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6173,7501.98> +08:43:01.010 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3173,7501.98> terrainY=63.3149 tireTerrainGap=0.00242615 +08:43:01.010 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6173,7501.98> radius=0.3 bottom=<7012.07,63.3173,7501.98> fraction=0.465546 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.00242233 +08:43:01.010 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.88,64.5966,7497.72> +08:43:01.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.88,64.1466,7497.72> terrainY=64.1553 tireTerrainGap=-0.00870514 +08:43:01.011 SCRIPT : ERR GEAR SUPPORT: center=<7009.88,64.5966,7497.72> radius=0.45 bottom=<7009.88,64.1466,7497.72> fraction=0.415592 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=-0.00856781 +08:43:01.011 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.42,64.2664,7497.74> +08:43:01.011 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.42,63.8164,7497.74> terrainY=63.818 tireTerrainGap=-0.00155258 +08:43:01.011 SCRIPT : ERR GEAR SUPPORT: center=<7014.42,64.2664,7497.74> radius=0.45 bottom=<7014.42,63.8164,7497.74> fraction=0.447222 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.0016098 +08:43:01.011 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:01.264 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:01.264 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:01.265 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:01.265 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=1 conscious=1 nativeComplete=0 +08:43:01.772 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:01.772 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:01.772 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:02.029 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.09,63.5247,7499.72> up=0.993968 +08:43:02.030 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.065206 angularSpeed=0.0476863 +08:43:02.030 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:02.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6193,7501.99> +08:43:02.030 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3193,7501.99> terrainY=63.3143 tireTerrainGap=0.00502396 +08:43:02.030 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6193,7501.99> radius=0.3 bottom=<7012.06,63.3193,7501.99> fraction=0.477311 normal=<-0,0.990257,0.139255> self=0 dynamic=0 supported=1 gap=0.0050087 +08:43:02.030 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.91,64.6018,7497.72> +08:43:02.031 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.91,64.1518,7497.72> terrainY=64.1502 tireTerrainGap=0.00163269 +08:43:02.031 SCRIPT : ERR GEAR SUPPORT: center=<7009.91,64.6018,7497.72> radius=0.45 bottom=<7009.91,64.1518,7497.72> fraction=0.462142 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00167084 +08:43:02.031 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.46,64.2655,7497.78> +08:43:02.031 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.46,63.8155,7497.78> terrainY=63.8156 tireTerrainGap=-3.43323e-05 +08:43:02.031 SCRIPT : ERR GEAR SUPPORT: center=<7014.46,64.2655,7497.78> radius=0.45 bottom=<7014.46,63.8155,7497.78> fraction=0.454444 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-2.28882e-05 +08:43:02.031 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:02.279 SCRIPT : Rereintroduced [extraction placement]: native supported aircraft stable for one second, fuel present, exactly one initial wake +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=2 conscious=2 nativeComplete=0 +08:43:02.280 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.785 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.786 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.786 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:02.786 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=3 conscious=3 nativeComplete=0 +08:43:03.042 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.11,63.5345,7499.74> up=0.993782 +08:43:03.042 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=1 speed=0.0333158 angularSpeed=0.0583173 +08:43:03.042 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:03.043 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.06,63.6138,7502.01> +08:43:03.043 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.06,63.3138,7502.01> terrainY=63.3117 tireTerrainGap=0.00206757 +08:43:03.043 SCRIPT : ERR GEAR SUPPORT: center=<7012.06,63.6138,7502.01> radius=0.3 bottom=<7012.06,63.3138,7502.01> fraction=0.463679 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00201035 +08:43:03.043 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.96,64.596,7497.72> +08:43:03.043 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.96,64.146,7497.72> terrainY=64.1441 tireTerrainGap=0.00191498 +08:43:03.044 SCRIPT : ERR GEAR SUPPORT: center=<7009.96,64.596,7497.72> radius=0.45 bottom=<7009.96,64.146,7497.72> fraction=0.463825 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00204468 +08:43:03.044 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.5,64.261,7497.83> +08:43:03.044 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.5,63.811,7497.83> terrainY=63.8128 tireTerrainGap=-0.00181961 +08:43:03.044 SCRIPT : ERR GEAR SUPPORT: center=<7014.5,64.261,7497.83> radius=0.45 bottom=<7014.5,63.811,7497.83> fraction=0.446111 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00185394 +08:43:03.044 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:03.292 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.293 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.293 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.293 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:03.806 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:03.806 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:03.806 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:03.807 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=4 conscious=4 nativeComplete=0 +08:43:04.056 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993802 +08:43:04.056 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:43:04.056 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:04.057 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:43:04.057 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00171661 +08:43:04.057 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462437 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00173569 +08:43:04.057 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +08:43:04.057 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1423 tireTerrainGap=0.0025177 +08:43:04.058 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +08:43:04.058 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +08:43:04.058 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8121 tireTerrainGap=-0.00177383 +08:43:04.058 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +08:43:04.058 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:04.306 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.306 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:04.307 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:04.307 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=5 conscious=5 nativeComplete=0 +08:43:04.818 SCRIPT : Rereintroduced [guards]: initial site=everon-radio-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.818 SCRIPT : Rereintroduced [guards]: initial site=everon-extraction-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.818 SCRIPT : Rereintroduced [guards]: initial site=everon-supply-2 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:04.819 SCRIPT : Rereintroduced [guards]: initial site=everon-outpost-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:05.074 SCRIPT : ERR EXTRACTION PLACEMENT: wakes=1 alive=1 ready=1 origin=<7012.12,63.5281,7499.74> up=0.993802 +08:43:05.075 SCRIPT : ERR EXTRACTION PHYSICS: dynamic=1 awake=0 speed=0 angularSpeed=0 +08:43:05.075 SCRIPT : ERR EXTRACTION NATIVE: valid=1 contact=1 engine=0 origin=<0,0,0> up=1 entityDifference=10267.4 +08:43:05.075 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_F node=-1704401612 center=<7012.07,63.6133,7502.01> +08:43:05.075 SCRIPT : ERR GEAR TERRAIN: bottom=<7012.07,63.3133,7502.01> terrainY=63.3116 tireTerrainGap=0.00171661 +08:43:05.075 SCRIPT : ERR GEAR SUPPORT: center=<7012.07,63.6133,7502.01> radius=0.3 bottom=<7012.07,63.3133,7502.01> fraction=0.462437 normal=<0,0.996962,0.0778877> self=0 dynamic=0 supported=1 gap=0.00173569 +08:43:05.076 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bL node=-410678372 center=<7009.97,64.5948,7497.72> +08:43:05.076 SCRIPT : ERR GEAR TERRAIN: bottom=<7009.97,64.1448,7497.72> terrainY=64.1423 tireTerrainGap=0.0025177 +08:43:05.076 SCRIPT : ERR GEAR SUPPORT: center=<7009.97,64.5948,7497.72> radius=0.45 bottom=<7009.97,64.1448,7497.72> fraction=0.466368 normal=<0.139105,0.989191,0.0463683> self=0 dynamic=0 supported=1 gap=0.00260162 +08:43:05.076 SCRIPT : ERR GEAR PIVOT: bone=v_wheel_bR node=-410678366 center=<7014.51,64.2604,7497.84> +08:43:05.076 SCRIPT : ERR GEAR TERRAIN: bottom=<7014.51,63.8104,7497.84> terrainY=63.8121 tireTerrainGap=-0.00177383 +08:43:05.076 SCRIPT : ERR GEAR SUPPORT: center=<7014.51,64.2604,7497.84> radius=0.45 bottom=<7014.51,63.8104,7497.84> fraction=0.446389 normal=<0.015606,0.998782,0.0468179> self=0 dynamic=0 supported=1 gap=-0.00179291 +08:43:05.077 SCRIPT : ERR EXTRACTION FUEL: manager=1 hasFuel=1 +08:43:05.344 SCRIPT : Rereintroduced [guards]: initial site=everon-prison-1 requested=6 physical=6 conscious=6 nativeComplete=1 +08:43:05.345 SCRIPT : Rereintroduced [sites]: 7 sites and 117 physical stock items ready +08:43:05.350 SCRIPT : Rereintroduced [environment]: date=authored weather=authored +08:43:05.352 SCRIPT : Rereintroduced [time]: started at 14:00 with 1x progression +08:43:05.352 SCRIPT : Rereintroduced [mission]: phase 0 -> 1 +08:43:05.519 SCRIPT : INFO: Faction: player jakub (playerID = 1 | UUID = 00000000-0000-0000-0000-000000000000) has joined faction #AR-Faction_US (US) +08:43:05.543 SCRIPT : Rereintroduced [spawn]: player 1 at <6088.5,211.391,7158.5> +08:43:05.543 SCRIPT : ERR SMOKE PASS: new identity may enter prison +08:43:05.544 SCRIPT : ERR SMOKE PASS: spawn consumes identity life +08:43:05.544 SCRIPT : ERR SMOKE PASS: disconnect retains living actor and clears connection +08:43:05.544 SCRIPT : ERR SMOKE PASS: reconnected identity retains spent life +08:43:05.544 SCRIPT : ERR SMOKE PASS: duplicate active identity rejected +08:43:05.544 SCRIPT : ERR SMOKE PASS: recycled connection receives independent life and extraction admission policy +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts catalog resolves hostile vanilla factions and successful preparation +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts physical prisoner matches injected faction and resource +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts physical guard squad comes from injected catalog +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts same-side factions rejected +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts unknown world faction rejected +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts missing prisoner resource rejected +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts isolated catalog restored without mutating live configuration +08:43:05.545 SCRIPT : ERR SMOKE PASS: base contracts unauthorized settings request rejected +08:43:05.546 SCRIPT : ERR SMOKE PASS: base contracts partially numeric input rejected without mutation +08:43:05.546 SCRIPT : ERR SMOKE PASS: base contracts out-of-range duration rejected without mutation +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts normalized base command saves validated duration +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts base command reads saved duration +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts base settings listing available +08:43:05.548 SCRIPT : ERR SMOKE PASS: base contracts base mission status available before companions +08:43:05.550 SCRIPT : ERR SMOKE PASS: base contracts test setting restored +08:43:05.550 SCRIPT : ERR SMOKE PASS: companion command retained: hq interval show +08:43:05.550 SCRIPT : ERR SMOKE PASS: companion command retained: hq squads show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion command retained: hq radius show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion command retained: intel carrying show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion command retained: intel reveal show +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion journal is behind Core admin authorization +08:43:05.551 SCRIPT : ERR SMOKE PASS: companion HQ status uses the shared command service +08:43:05.551 SCRIPT : ERR SMOKE PASS: initial prisoner position +08:43:05.551 SCRIPT : ERR SMOKE PASS: radio and extraction vehicle exist +08:43:05.551 SCRIPT : ERR SMOKE PASS: authored gate exposes lock action +08:43:05.552 SCRIPT : ERR GEOMETRY: gate low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6090,211.344,7154> low=<6089.98,211.436,7153.9> high=<6093.06,214.647,7154.1> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7154> low=<6093,210.641,7153.87> high=<6096,214.409,7154.13> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7154> low=<6087,210.641,7153.87> high=<6090,214.409,7154.13> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6084,210.641,7153.87> high=<6087,214.409,7154.13> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7163> low=<6095.87,210.641,7163> high=<6096.13,214.409,7166> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7163> low=<6083.87,210.641,7163> high=<6084.13,214.409,7166> +08:43:05.552 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7160> low=<6095.87,210.641,7160> high=<6096.13,214.409,7163> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7160> low=<6083.87,210.641,7160> high=<6084.13,214.409,7163> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7157> low=<6095.87,210.641,7157> high=<6096.13,214.409,7160> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7157> low=<6083.87,210.641,7157> high=<6084.13,214.409,7160> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6096,211.444,7154> low=<6095.87,210.641,7154> high=<6096.13,214.409,7157> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7154> low=<6083.87,210.641,7154> high=<6084.13,214.409,7157> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6093,211.444,7166> low=<6093,210.641,7165.87> high=<6096,214.409,7166.13> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6090,211.444,7166> low=<6090,210.641,7165.87> high=<6093,214.409,7166.13> +08:43:05.553 SCRIPT : ERR GEOMETRY: child origin=<6087,211.444,7166> low=<6087,210.641,7165.87> high=<6090,214.409,7166.13> +08:43:05.554 SCRIPT : ERR GEOMETRY: child origin=<6084,211.444,7166> low=<6084,210.641,7165.87> high=<6087,214.409,7166.13> +08:43:05.554 SCRIPT : ERR SMOKE PASS: lock permits prisoner +08:43:05.554 SCRIPT : Rereintroduced [mission]: phase 1 -> 2 +08:43:05.555 SCRIPT : ERR SMOKE PASS: lock action advances mission +08:43:05.555 SCRIPT : ERR SMOKE PASS: two guaranteed physical cache documents +08:43:05.557 SCRIPT : ERR SMOKE PASS: test does not rely on random intel +08:43:05.559 SCRIPT : ERR SMOKE PASS: isolated test profile defence duration +08:43:06.037 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:43:06.521 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=1 +08:43:07.558 RESOURCES : Screenshot saved to $logs:err-prison.png +08:43:08.586 SCRIPT : ERR SMOKE PASS: unlocked gate physically permits passage +08:43:08.587 SCRIPT : ERR SMOKE PASS: authored cache document recovered into inventory +08:43:09.529 SCRIPT : Rereintroduced [intel]: player 1 recovered folder; location=everon-radio-1 knowledge=2 +08:43:11.106 SCRIPT : ERR SMOKE PASS: carried intel identifies radio through intel service +08:43:11.106 SCRIPT : ERR SMOKE PASS: radio rejects distant player +08:43:12.109 SCRIPT : ERR SMOKE: radio=<6500,159.756,7200> player=<6502,159.53,7200> +08:43:12.109 SCRIPT : Rereintroduced [mission]: phase 2 -> 3 +08:43:12.110 SCRIPT : ERR SMOKE PASS: identified radio starts defence +08:43:15.132 SCRIPT : ERR SMOKE PASS: occupied defence timer running +08:43:17.652 SCRIPT : ERR SMOKE PASS: leaving area resets defence +08:43:48.748 SCRIPT : Rereintroduced [mission]: phase 3 -> 4 +08:43:50.996 SCRIPT : ERR SMOKE PASS: continuous occupied defence completes +08:43:50.996 SCRIPT : ERR SMOKE PASS: boarding extraction vehicle +08:43:54.026 SCRIPT : ERR SMOKE PASS: physical extraction occupancy +08:43:54.768 SCRIPT : Rereintroduced [mission]: phase 4 -> 5 +08:43:54.768 SCRIPT : ERR SMOKE PASS: scripted escape reaches victory after physical vehicle occupancy +08:43:54.768 SCRIPT : ERR SMOKE COMPLETE: terminal=5 lostHelicopterCase=0 playerDeathCase=0 +08:43:54.882 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = POSTGAME +08:43:54.883 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:43:54.883 SCRIPT (W): Slot_Chat Has no Content! +08:43:54.883 SCRIPT (W): Slot_VON Has no Content! +08:43:54.884 SCRIPT (W): Slot_GameVersion Has no Content! +08:43:54.884 SCRIPT (W): Slot_Notifications Has no Content! +08:43:56.919 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:43:56.919 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent Back +08:43:56.919 SCRIPT : -- Stack trace -- +08:43:56.919 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:43:56.920 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:43:56.920 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 15 +08:43:56.920 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:43:56.920 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:43:56.920 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:43:56.920 SCRIPT : ----------------- +08:43:56.920 SCRIPT (W): SCR_ScriptedWidgetComponent.GetComponent: widget not found: SCR_InputButtonComponent ChatButton +08:43:56.920 SCRIPT : -- Stack trace -- +08:43:56.921 SCRIPT : GetComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_ScriptedWidgetComponent.c : 43 +08:43:56.921 SCRIPT : GetInputButtonComponent() Scripts/Game/UI/Components/WidgetLibrary/SCR_InputButton/SCR_InputButtonComponent.c : 1214 +08:43:56.921 SCRIPT : OnMenuOpen() Scripts/Game/UI/GameOverScreen/SCR_GameOverScreenInput.c : 21 +08:43:56.921 SCRIPT : OpenGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 447 +08:43:56.921 SCRIPT : ShowGameOverScreen() Scripts/Game/GameOverScreen/SCR_GameOverScreenManagerComponent.c : 177 +08:43:56.921 SCRIPT : OnUpdate() Scripts/Game/game.c : 885 +08:43:56.921 SCRIPT : ----------------- +08:43:56.923 GUI : WidgetManager: CrateWidgets @"{144919871D65F121}UI/layouts/HUD/GameOver/EndScreen/EndScreen.layout" +08:43:56.923 SCRIPT (W): Slot_Chat Has no Content! +08:43:56.923 SCRIPT (W): Slot_VON Has no Content! +08:43:56.923 SCRIPT (W): Slot_GameVersion Has no Content! +08:43:56.924 SCRIPT (W): Slot_Notifications Has no Content! +08:43:56.924 SCRIPT : ERR RESULT UI: player=1 title=You escaped Everon +08:43:58.803 RESOURCES : Screenshot saved to $logs:err-result.png diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/err-prison.png b/docs/evidence/native-2026-09-19-084026-restart-station-error/err-prison.png new file mode 100644 index 0000000000000000000000000000000000000000..98e322cf3bb3f0b263f0ec75583226fc004fdc51 GIT binary patch literal 153870 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"uthP*jsmzMMb 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 Ujj(7F`~Uy|07*qoM6N<$g3MyO7XSbN literal 0 HcmV?d00001 diff --git a/docs/evidence/native-2026-09-19-084026-restart-station-error/err-result.png b/docs/evidence/native-2026-09-19-084026-restart-station-error/err-result.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbc497b561ba5990dee7d527f1533e09180d78a GIT binary patch literal 178203 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