Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
@@ -0,0 +1,250 @@
---------------------------------------------
Log /tmp/erri-profile-native/final/profile/logs/logs_2026-10-03_13-41-52/console.log started at 2026-10-03 13:41:52 (2026-10-03 11:41:52 UTC)
13:41:52.930 ENGINE : FileSystem: Adding relative directory '/tmp/erri-profile-native/final/profile/logs/logs_2026-10-03_13-41-52' to filesystem under name logs
13:41:52.930 ENGINE : FileSystem: Adding relative directory '/tmp/erri-profile-native/final/profile/profile' to filesystem under name profile
13:41:52.930 ENGINE : FileSystem: Current working directory: '/tmp/runtime/'
13:41:52.931 ENGINE : Initializing engine, version 192142
13:41:52.931 ENGINE : CLI Params: -server {C1E20667DCE324ED}Missions/ERR_Everon.conf -addonsDir /tmp/erri-profile-native/final/addons -addons 2528466DE220D91C -profile /tmp/erri-profile-native/final/profile -noBackend -noSound -bindIP 127.0.0.1 -bindPort 2001 -maxFPS 30 -logconsole -noSplash -noThrow -disableCrashReporter
13:41:52.933 ENGINE : Addon dirs:
13:41:52.933 ENGINE : dir: '/tmp/erri-profile-native/final/addons'
13:41:52.933 ENGINE : dir: './addons'
13:41:52.933 ENGINE : dir: '/tmp/erri-profile-native/final/profile/addons'
13:41:52.933 ENGINE : Available addons:
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERR_Core/addon.gproj' guid: '2528466DE220D91C'
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_BADC0DEDABBEDA5E/addon.gproj' guid: 'BADC0DEDABBEDA5E' (packed)
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_65930CB4CD0237B2/addon.gproj' guid: '65930CB4CD0237B2' (packed)
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_629B2BA37EFFD577/addon.gproj' guid: '629B2BA37EFFD577' (packed)
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_5E524E4FEECCA92B/addon.gproj' guid: '5E524E4FEECCA92B' (packed)
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_5E389BB9F58B79A6/addon.gproj' guid: '5E389BB9F58B79A6' (packed)
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_595F2BF2F44836FB/addon.gproj' guid: '595F2BF2F44836FB' (packed)
13:41:52.933 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_1337C0DE5DABBEEF/addon.gproj' guid: '1337C0DE5DABBEEF' (packed)
13:41:52.933 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed)
13:41:52.933 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed)
13:41:52.933 ENGINE : FileSystem: Adding relative directory '/tmp/erri-profile-native/final/source' to filesystem under name ERR_Core
13:41:52.933 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_65930CB4CD0237B2/' (pak count: 1) to filesystem under name Parachutes
13:41:52.933 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_5E524E4FEECCA92B/' (pak count: 1) to filesystem under name WCS_BMP-1
13:41:52.934 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_5E389BB9F58B79A6/' (pak count: 1) to filesystem under name WCS_SpaceCore
13:41:52.934 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_629B2BA37EFFD577/' (pak count: 1) to filesystem under name WCS_Armaments
13:41:52.938 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_595F2BF2F44836FB/' (pak count: 1) to filesystem under name RHS_Core
13:41:52.939 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_BADC0DEDABBEDA5E/' (pak count: 2) to filesystem under name RHS_Content_02
13:41:52.941 ENGINE : FileSystem: Adding package '/tmp/erri-profile-native/final/addons/ERRI_1337C0DE5DABBEEF/' (pak count: 4) to filesystem under name RHS_Content_01
13:41:53.036 ENGINE : FileSystem: Adding package './addons/data/' (pak count: 14) to filesystem under name ArmaReforger
13:41:53.038 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core
13:41:53.038 ENGINE : CPU vendor : AuthenticAMD
13:41:53.038 ENGINE : CPU type : 2
13:41:53.038 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor
13:41:53.038 ENGINE : CPU cache info : Unknown cache
13:41:53.038 ENGINE : CPU count logical : 16
13:41:53.038 ENGINE : CPU count physical : 8
13:41:53.038 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2
13:41:53.038 RESOURCES : ResourceDB: loading cache (id=0 name=ERR_Core path=/tmp/erri-profile-native/final/source/resourceDatabase.rdb)
13:41:53.038 RESOURCES : ResourceDB: loading cache (id=1 name=Parachutes path=/tmp/erri-profile-native/final/addons/ERRI_65930CB4CD0237B2/resourceDatabase.rdb)
13:41:53.038 RESOURCES : ResourceDB: loading cache (id=2 name=WCS_BMP-1 path=/tmp/erri-profile-native/final/addons/ERRI_5E524E4FEECCA92B/resourceDatabase.rdb)
13:41:53.038 RESOURCES : ResourceDB: loading cache (id=3 name=WCS_SpaceCore path=/tmp/erri-profile-native/final/addons/ERRI_5E389BB9F58B79A6/resourceDatabase.rdb)
13:41:53.039 RESOURCES : ResourceDB: loading cache (id=4 name=WCS_Armaments path=/tmp/erri-profile-native/final/addons/ERRI_629B2BA37EFFD577/resourceDatabase.rdb)
13:41:53.040 RESOURCES : ResourceDB: loading cache (id=5 name=RHS_Core path=/tmp/erri-profile-native/final/addons/ERRI_595F2BF2F44836FB/resourceDatabase.rdb)
13:41:53.049 RESOURCES : ResourceDB: loading cache (id=6 name=RHS_Content_02 path=/tmp/erri-profile-native/final/addons/ERRI_BADC0DEDABBEDA5E/resourceDatabase.rdb)
13:41:53.050 RESOURCES : ResourceDB: loading cache (id=7 name=RHS_Content_01 path=/tmp/erri-profile-native/final/addons/ERRI_1337C0DE5DABBEEF/resourceDatabase.rdb)
13:41:53.055 RESOURCES : ResourceDB: loading cache (id=8 name=ArmaReforger path=./addons/data/resourceDatabase.rdb)
13:41:53.164 RESOURCES : ResourceDB: loading cache (id=9 name=core path=./addons/core/resourceDatabase.rdb)
13:41:53.165 RESOURCES : ResourceDB: loading cache (id=10 name=profile path=/tmp/erri-profile-native/final/profile/profile/resourceDatabase.rdb)
13:41:53.165 RESOURCES : ResourceDB: loading cache (id=11 name=logs path=/tmp/erri-profile-native/final/profile/logs/logs_2026-10-03_13-41-52/resourceDatabase.rdb)
13:41:53.320 ENGINE : GameProject load
13:41:53.320 ENGINE : Loaded addons:
13:41:53.320 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C'
13:41:53.320 ENGINE : gproj: './addons/data/ArmaReforger.gproj' guid: '58D0FB3206B6F859'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_1337C0DE5DABBEEF/addon.gproj' guid: '1337C0DE5DABBEEF'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_BADC0DEDABBEDA5E/addon.gproj' guid: 'BADC0DEDABBEDA5E'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_595F2BF2F44836FB/addon.gproj' guid: '595F2BF2F44836FB'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_629B2BA37EFFD577/addon.gproj' guid: '629B2BA37EFFD577'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_5E389BB9F58B79A6/addon.gproj' guid: '5E389BB9F58B79A6'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_5E524E4FEECCA92B/addon.gproj' guid: '5E524E4FEECCA92B'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERRI_65930CB4CD0237B2/addon.gproj' guid: '65930CB4CD0237B2'
13:41:53.320 ENGINE : gproj: '/tmp/erri-profile-native/final/addons/ERR_Core/addon.gproj' guid: '2528466DE220D91C'
13:41:53.321 ENGINE : GameProject load
13:41:53.321 INIT : GameProject load project data @"/tmp/erri-profile-native/final/addons/ERRI_595F2BF2F44836FB/addon.gproj"
13:41:53.321 RESOURCES (E): Wrong GUID/name for resource @"{0AFDD005CD669892}Language/rhs_localization.st" in property "StringTableSource"
13:41:53.321 INIT : GameProject load project data @"/tmp/erri-profile-native/final/addons/ERRI_629B2BA37EFFD577/addon.gproj"
13:41:53.321 RESOURCES (E): Wrong GUID/name for resource @"{41FA2A08B6971D4C}Language/wcs_armament_localization.st" in property "StringTableSource"
13:41:53.321 INIT : GameProject load project data @"/tmp/erri-profile-native/final/addons/ERRI_5E389BB9F58B79A6/addon.gproj"
13:41:53.321 RESOURCES (E): Wrong GUID/name for resource @"{84270E09F7A4A7A0}Language/wcs_spacecore_localization.st" in property "StringTableSource"
13:41:53.321 INIT : GameProject load project data @"/tmp/erri-profile-native/final/addons/ERRI_5E524E4FEECCA92B/addon.gproj"
13:41:53.321 RESOURCES (E): Wrong GUID/name for resource @"{E50E557B468C7073}Language/wcs_bmp1_localization.st" in property "StringTableSource"
13:41:53.321 ENGINE : Loading custom engine user config '$profile:.save/settings/ReforgerEngineSettings.conf'
13:41:53.321 ENGINE : No Enfusion settings file loaded. Continuing with defaults
13:41:53.321 RENDER : Basic screen setup:
13:41:53.321 RENDER : Back buffer width x height: 0x0
13:41:53.321 RENDER : Back buffer format : TEXFMT_UNKNOWN (0)
13:41:53.321 RENDER : MSAA : none
13:41:53.321 RENDER : GPU_DUMMY (0xFFFF) (Enfusion dummy render) with 1 GPU detected, VRAM 128MB (fast 128MB), shared 128MB, driver version Unknown version
13:41:53.321 RENDER : Detected output devices:
13:41:53.321 RENDER : * 1 device/s connected to Dummy:
13:41:53.321 RENDER : Dummy output (Dummy device for our dummy render.), 1920x1080 (offset 0x0), 60Hz
13:41:53.321 RENDER : Concurrent frames limit 2
13:41:53.321 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=7
13:41:53.334 PROFILING : Settings changed took: 0.029000 ms
13:41:53.336 ENGINE : Initializing inputs.
13:41:53.342 NETWORK : Initializing networking.
13:41:53.342 NETWORK : Using new GameRplScheduler.
13:41:53.342 SCRIPT : SCRIPT : Initializing scripts
13:41:53.342 SCRIPT : SCRIPT : ScriptProjectManager init
13:41:53.342 PROFILING : ScriptProjectManager init took: 0.009000 ms
13:41:53.358 PROFILING : Initializing scripts took: 15.414000 ms
13:41:53.358 BACKEND : Backend Services are disabled.
13:41:53.358 ENGINE : Enfusion engine successfully created.
13:41:53.359 GUI : Using default language (en_us)
13:41:53.359 GUI : Loading 'en_us' localization file.
13:41:53.360 INIT : INIT : Loading StringTable
13:41:53.382 PROFILING : Loading StringTable took: 22.845000 ms
13:41:53.382 SCRIPT : SCRIPT : Compiling GameLib scripts
13:41:53.410 SCRIPT : Module: GameLib; loaded 466x files; 608x classes; used 654K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: d66caacb
13:41:53.410 PROFILING : Compiling GameLib scripts took: 27.577000 ms
13:41:53.410 SCRIPT : SCRIPT : Compiling Game scripts
13:41:53.958 SCRIPT : Compiling Game scripts
13:41:53.958 SCRIPT (W): @"Scripts/Game/Parachutes/ParachuteDeployed.c,7": Pointer type 'Physics' can only be used with local variables
13:41:54.378 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete
13:41:54.378 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete
13:41:54.661 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_SiteService.c,359": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
13:41:54.673 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed
13:41:54.704 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete
13:41:54.814 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete
13:41:54.814 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete
13:41:54.814 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete
13:41:54.814 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete
13:41:54.846 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_CasualtyGroundSupport.c,21": 'GetBoneIndex' is obsolete: Use GetAnimation().GetBoneIndex() instead
13:41:54.895 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_SpawnLogic.c,64": 'GetPlayerIdentityId' is obsolete
13:41:54.905 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete
13:41:54.905 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete
13:41:54.906 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete
13:41:54.947 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_ExtractionService.c,45": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
13:41:54.947 SCRIPT (W): @"Scripts/Game/ERR/00_Core/ERR_ExtractionService.c,56": 'GetCompartmentType' is obsolete: Use GetType() on the compartment instance directly.
13:41:54.948 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api.
13:41:54.948 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api.
13:41:55.000 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete
13:41:55.168 SCRIPT : Module: Game; loaded 6631x files; 13269x classes; used 32026K of static memory; defines: "PLATFORM_LINUX,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG,WCS_DEFINES_ARMAMENTS"; CRC32: 4c8a0102
13:41:55.186 PROFILING : Compiling Game scripts took: 1775.662000 ms
13:41:55.186 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC.
13:41:55.209 ENGINE : Game successfully created.
13:41:55.243 PLATFORM : Save data from container 'settings' have been loaded
13:41:55.342 PLATFORM : Save data from container 'sessions' have been loaded
13:41:55.342 PLATFORM : System language differs from the saved one - using new language {new: 'en_us'; old: ''}
13:41:55.342 PLATFORM : Save data transaction to 'settings' started.
13:41:55.342 NETWORK : Starting local multiplayer server using command line args.
13:41:55.441 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{C1E20667DCE324ED}Missions/ERR_Everon.conf'.
13:41:55.443 WORLD : WORLD : Entities load '$ERR_Core:Worlds/ERR_Everon.ent'
13:41:56.214 PROFILING : Entities load took: 771.427000 ms
13:41:56.215 WORLD : WORLD : Game::LoadEntities
13:41:56.215 WORLD : WORLD : Initializing world systems @"{C50579A2EC48E8EF}Configs/Systems/MissionSystems.conf"
13:41:56.216 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits.
13:41:56.216 WORLD : WORLD : CreateEntities
13:41:56.216 WORLD : WORLD : CreateEntities
13:41:56.216 WORLD : WORLD : NotifyBeforeEntitiesCreated
13:41:56.218 RESOURCES : Loaded mission headers from 10 addon(s)!
13:41:56.218 PROFILING : NotifyBeforeEntitiesCreated took: 1.279000 ms
13:41:56.218 WORLD : WORLD : Wait for preloading data
13:41:57.426 PROFILING : Wait for preloading data took: 1208.849000 ms
13:41:57.488 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et"
13:41:57.488 PROFILING : PROFILING : Terrain load
13:41:58.697 PROFILING : Terrain load took: 1209.383000 ms
13:42:01.115 WORLD : Game::LoadEntities
13:42:01.115 WORLD : CreateEntities
13:42:01.115 WORLD : CreateEntities
13:42:01.115 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
13:42:01.115 ENTITY : CreateComponent 'ScriptedRadioComponent'
13:42:01.115 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
13:42:05.836 ENTITY : Create entity @"ENTITY:2305843009213693956" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{5414041A15DC4B54}Prefabs/ERR/FactionManager.et"
13:42:05.836 RESOURCES : GetResourceObject @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et"
13:42:05.836 WORLD : Entity prefab load @"{442939C9617DF228}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_FIA.et"
13:42:05.836 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
13:42:05.836 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
13:42:05.836 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
13:42:05.836 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
13:42:05.836 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)
13:42:05.836 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)
13:42:05.837 RESOURCES : GetResourceObject @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
13:42:05.837 WORLD : Entity prefab load @"{B47110AA1A806556}Prefabs/Vehicles/Wheeled/BTR70/BTR70_FIA.et"
13:42:05.837 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
13:42:05.837 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
13:42:05.837 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
13:42:05.837 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
13:42:05.837 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)
13:42:05.837 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)
13:42:05.837 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)
13:42:05.837 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)
13:42:05.917 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
13:42:05.917 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
13:42:05.917 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
13:42:05.917 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
13:42:05.917 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
13:42:05.917 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
13:42:05.917 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
13:42:05.917 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
13:42:05.917 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)
13:42:06.267 WORLD : WORLD : NotifyBeforeEntitiesInitialized
13:42:06.267 PROFILING : NotifyBeforeEntitiesInitialized took: 0.025000 ms
13:42:06.267 WORLD : InitEntities 'world'
13:42:06.267 ENTITY : Init entity @"ENTITY:3" ('SCR_MapEntity1', SCR_MapEntity) at <6400.000000 0.000000 6400.000000> @"{E1B88C66BF6CA1F9}Prefabs/World/Game/Eden/MapEntity_Everon.et"
13:42:06.267 SCRIPT (W): SCR_MapEntity: Cannot get the size from terrain. Using default.
13:42:06.753 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Reintroduced', ERR_GameMode) at <60.452000 1.000000 213.136002> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et"
13:42:06.753 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead.
13:42:06.756 WORLD : InitEntities 'world'
13:42:06.757 ENTITY : Init entity @"ENTITY:2305843009213693953" ('Reintroduced', ERR_GameMode) at <60.452000 1.000000 213.136002> @"{978E045E53EF36C8}Prefabs/ERR/GameMode.et"
13:42:06.757 SCRIPT : Reintroduced [config]: using $profile:Escapists.json; legacy files retained but no longer used.
13:42:06.762 SCRIPT : Reintroduced [welcome voice]: startup audio test enabled
13:42:06.763 WORLD : WORLD : NotifyEntitiesInitialized
13:42:06.763 TERRAIN : TERRAIN : Initializing road networks...
13:42:06.765 PROFILING : Initializing road networks... took: 2.440000 ms
13:42:06.808 SCRIPT : Reintroduced [terrain selection]: discovered 45 playable scenario headers; truncated=0
13:42:06.809 DEFAULT : DEFAULT : WorldVolumesCollection
13:42:06.861 PROFILING : WorldVolumesCollection took: 52.885000 ms
13:42:06.861 INIT : INIT : SoundWorldInit
13:42:06.872 PROFILING : SoundWorldInit took: 10.175000 ms
13:42:06.872 PROFILING : NotifyEntitiesInitialized took: 108.692000 ms
13:42:06.872 PROFILING : CreateEntities took: 10655.423000 ms
13:42:06.872 PROFILING : CreateEntities took: 10655.431000 ms
13:42:06.872 WORLD : WORLD : EOnActivate
13:42:06.899 PROFILING : EOnActivate took: 27.649000 ms
13:42:06.899 PROFILING : Game::LoadEntities took: 10684.373000 ms
13:42:06.944 NETWORK : Starting RPL server, listening on address 0.0.0.0:2001, fastValidation=false
13:42:07.421 DEFAULT : Entered online game state.
13:42:07.422 PROFILING : Settings changed took: 0.464000 ms
13:42:10.147 SCRIPT : Map load time: 1629ms
13:42:10.214 SCRIPT : ERR CONFIG PASS initial migration exists
13:42:10.217 SCRIPT : ERR CONFIG PASS unknown root extension
13:42:10.218 SCRIPT : ERR CONFIG PASS legacy mission import
13:42:10.220 SCRIPT : ERR CONFIG PASS terrain import
13:42:10.221 SCRIPT : ERR CONFIG PASS item import
13:42:10.227 SCRIPT : ERR CONFIG PASS mission save
13:42:10.232 SCRIPT : ERR CONFIG PASS preset save
13:42:10.237 SCRIPT : ERR CONFIG PASS terrain save
13:42:10.246 SCRIPT : ERR CONFIG PASS factions save
13:42:10.251 SCRIPT : ERR CONFIG PASS mods save
13:42:10.253 SCRIPT : ERR CONFIG PASS other sections do not clobber mission
13:42:10.254 SCRIPT : ERR CONFIG PASS voice preserved
13:42:10.255 SCRIPT : ERR CONFIG PASS document readback
13:42:10.255 SCRIPT : ERR CONFIG PASS unknown root preserved
13:42:10.255 SCRIPT : ERR CONFIG PASS duplicate root rejected
13:42:10.255 SCRIPT : ERR CONFIG PASS nonobject root rejected
13:42:10.263 SCRIPT : ERR CONFIG PASS block boundary and escaping
13:42:10.268 SCRIPT : ERR CONFIG PASS backup recovery
13:42:10.268 SCRIPT : ERR CONFIG PASS legacy originals retained
13:42:10.270 SCRIPT : ERR CONFIG PASS legacy ignored after migration
13:42:10.270 SCRIPT (E): Reintroduced [config]: unsupported Escapists.json configVersion; file preserved, writes disabled
13:42:10.270 SCRIPT (E): Reintroduced [config]: unsupported Escapists.json configVersion; file preserved, writes disabled
13:42:10.270 SCRIPT (E): Reintroduced [config]: unsupported Escapists.json configVersion; file preserved, writes disabled
13:42:10.270 SCRIPT (E): Reintroduced: invalid settings; defaults active, existing files preserved
13:42:10.270 SCRIPT : ERR CONFIG PASS future version cannot downgrade through backup
13:42:10.270 SCRIPT : ERR CONFIG PASS future file preserved
13:42:10.270 SCRIPT (E): Reintroduced [config]: cannot import $profile:EscapistsWelcomeVoice.json; repair it or its backup. Existing files preserved.
13:42:10.270 SCRIPT : ERR CONFIG PASS invalid migration blocks instead of losing settings
13:42:10.271 SCRIPT : Reintroduced [config]: using $profile:Escapists.json; legacy files retained but no longer used.
13:42:10.271 SCRIPT : ERR CONFIG PASS valid legacy backup imported
13:42:10.272 SCRIPT : ERR CONFIG PASS missing files receive mission defaults
13:42:10.273 SCRIPT : ERR CONFIG PASS voice backup retained
13:42:10.273 SCRIPT : ERR CONFIG COMPLETE
13:42:10.273 WORLD : Frame start
13:42:10.273 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated.
13:42:10.279 WORLD : UpdateEntities
13:42:10.279 WORLD : Frame
13:42:10.279 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME
@@ -0,0 +1 @@
{"reason": "complete", "exit": -15}
@@ -0,0 +1,80 @@
class ERR_ProfileProbe
{
static void Require(bool success, string detail)
{
if (success) Print("ERR CONFIG PASS " + detail);
else Print("ERR CONFIG FAIL " + detail, LogLevel.ERROR);
}
static void Run()
{
map<string, string> extra;
Require(ERR_ProfileConfig.Document(ERR_ProfileConfig.PATH, extra), "initial migration exists");
extra.Set("future", "{\"nested\":[\"comma , brace } escaped \\\" quote\",{\"value\":12}]}");
Require(ERR_ProfileConfig.Commit(extra), "unknown root extension");
ERR_Settings settings = new ERR_Settings();
Require(settings.Get("heliTimerMinutes") == 27, "legacy mission import");
ERR_TerrainPreference terrain = new ERR_TerrainPreference();
Require(terrain.Scenario() == "", "terrain import");
ERR_ItemPreferences items = new ERR_ItemPreferences();
Require(!items.Enabled("1111111111111111", "aaaaaaaaaaaaaaaa"), "item import");
Require(settings.Set("heliTimerMinutes", 42), "mission save");
Require(items.Preset("save", "custom"), "preset save");
Require(terrain.Save("{C1E20667DCE324ED}Missions/ERR_Everon.conf"), "terrain save");
ERR_ContentSettings content = new ERR_ContentSettings();
ERR_FactionSelection factions = new ERR_FactionSelection();
Require(factions.Save({"random", "ussr", "fia"}, content), "factions save");
foreach (ERR_ContentOption option : ERR_ContentRegistry.Definition().Options)
{ Require(content.Set(option.Id, 0), "mods save"); break; }
ERR_Settings reload = new ERR_Settings();
Require(reload.Get("heliTimerMinutes") == 42, "other sections do not clobber mission");
JsonLoadContext voice = new JsonLoadContext(); string url;
Require(ERR_ProfileConfig.Load(ERR_ProfileConfig.VOICE, voice) && voice.ReadValue("welcomeUrl", url) && url == "http://192.168.52.4:18947/welcome.b64", "voice preserved");
map<string, string> document;
Require(ERR_ProfileConfig.Document(ERR_ProfileConfig.PATH, document), "document readback");
Require(document.Contains("future") && document.Get("future") == extra.Get("future"), "unknown root preserved");
map<string, string> split = new map<string, string>();
Require(!ERR_ProfileConfig.Split("{\"x\":1,\"x\":2}", split), "duplicate root rejected");
Require(!ERR_ProfileConfig.Split("[1,2]", split), "nonobject root rejected");
string longText;
for (int i = 0; i < 4096; i++) longText += "a";
JsonSaveContext longJson = new JsonSaveContext(); longJson.WriteValue("long", longText); longJson.WriteValue("quoted", "\"{},[]\\");
Require(ERR_ProfileConfig.Split(longJson.SaveToString(), split) && split.Count() == 2, "block boundary and escaping");
// A corrupt primary recovers the last valid complete document on the next write.
FileHandle bad = FileIO.OpenFile(ERR_ProfileConfig.PATH, FileMode.WRITE); bad.Write("bad json"); bad.Close();
ERR_Settings recovered = new ERR_Settings();
Require(recovered.Get("heliTimerMinutes") == 42 && recovered.Set("heliTimerMinutes", 43), "backup recovery");
Require(FileIO.FileExists(ERR_Settings.PATH) && FileIO.FileExists(ERR_ItemPreferences.PATH), "legacy originals retained");
// Changing a legacy file after migration must never reactivate old settings.
FileHandle stale = FileIO.OpenFile(ERR_Settings.PATH, FileMode.WRITE); stale.Write("{}"); stale.Close();
ERR_Settings retained = new ERR_Settings();
Require(retained.Get("heliTimerMinutes") == 43, "legacy ignored after migration");
FileIO.CopyFile(ERR_ProfileConfig.PATH, "$profile:verified-config.json");
FileHandle future = FileIO.OpenFile(ERR_ProfileConfig.PATH, FileMode.WRITE); future.Write("{\"configVersion\":2}"); future.Close();
ERR_Settings unsupported = new ERR_Settings();
Require(!unsupported.Set("heliTimerMinutes", 10), "future version cannot downgrade through backup");
string untouched; ERR_ProfileConfig.Text(ERR_ProfileConfig.PATH, untouched);
Require(untouched == "{\"configVersion\":2}", "future file preserved");
FileIO.DeleteFile(ERR_ProfileConfig.PATH); FileIO.DeleteFile(ERR_ProfileConfig.PATH + ".bak");
foreach (string legacy : ERR_ProfileConfig.LegacyPaths()) { FileIO.DeleteFile(legacy); FileIO.DeleteFile(legacy + ".bak"); }
FileHandle invalid = FileIO.OpenFile(ERR_ProfileConfig.VOICE, FileMode.WRITE); invalid.Write("{\"welcomeUrl\":123}"); invalid.Close();
Require(!ERR_ProfileConfig.Ensure() && !FileIO.FileExists(ERR_ProfileConfig.PATH), "invalid migration blocks instead of losing settings");
JsonSaveContext backup = new JsonSaveContext(); backup.WriteValue("welcomeUrl", "http://192.168.52.4:18947/welcome.b64"); backup.SaveToFile(ERR_ProfileConfig.VOICE + ".bak");
Require(ERR_ProfileConfig.Ensure(), "valid legacy backup imported");
ERR_Settings fresh = new ERR_Settings();
Require(fresh.Get("heliTimerMinutes") == 15 && fresh.Get("responseRadiusMetres") == 2000, "missing files receive mission defaults");
JsonLoadContext recoveredVoice = new JsonLoadContext();
Require(ERR_ProfileConfig.Load(ERR_ProfileConfig.VOICE, recoveredVoice) && recoveredVoice.ReadValue("welcomeUrl", url) && url == "http://192.168.52.4:18947/welcome.b64", "voice backup retained");
Print("ERR CONFIG COMPLETE");
}
}
modded class ArmaReforgerScripted
{
protected bool m_ERRConfigProbe;
override void OnUpdate(BaseWorld world, float timeslice)
{
super.OnUpdate(world, timeslice);
if (m_ERRConfigProbe) return;
m_ERRConfigProbe = true;
ERR_ProfileProbe.Run();
}
}
@@ -0,0 +1,27 @@
{
"native_engine": "1.8.0.13 Linux dedicated server",
"native_checks_passed": 26,
"policy_test_scripts": [
"test_profile_config.py",
"test_settings_migration.py",
"test_terrain_selection.py",
"test_item_preferences.py",
"test_faction_selection.py",
"test_content_policy.py",
"test_random_settings.py",
"test_convoy_auto_settings.py",
"test_welcome_voice.py",
"test_environment_policy.py",
"test_admin_setting_policy.py",
"test_time_policy.py",
"test_admin_menu.py",
"test_hq_convoy_dispatch.py",
"test_ai_stinger_admin.py",
"test_view_distance.py"
],
"native_isolation": "private network namespace, no external routes, temporary source and profile, child process reaped",
"live_server_changed": false,
"workshop_published": false,
"scope": "Migration, default settings, menu storage operations, sibling and unknown-field preservation, presets, backup recovery, invalid migration and unsupported-version protection. Does not claim live RKS2 upgrade or player UI acceptance.",
"post_native_changes": "Documentation, regression harness adapters, and a ContentSettings comment only; no behavior changed."
}
@@ -0,0 +1,44 @@
from pathlib import Path
import os,sys,json,shutil,subprocess,time,signal
ROOT=Path('/home/jakub/devel/escapistsrereintroduced');sys.path.insert(0,str(ROOT/'tools'))
from external_addons import policy,prepare_profile
from source_manifest import addon_manifest
from dedicated_native import PROBE
base=Path('/tmp/erri-profile-native');base.mkdir(exist_ok=True)
run=base/sys.argv[1];run.mkdir();source=run/'source';source.mkdir()
for rel in addon_manifest(ROOT):
dest=source/Path(rel).relative_to('addons/core');dest.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(ROOT/rel,dest)
shutil.copy2('/tmp/erri-takeover-pair-source32/resourceDatabase.rdb',source/'resourceDatabase.rdb')
shutil.copy2('/tmp/erri-profile-probe.c',source/'Scripts/Game/ERR/00_Core/ERR_ZProfileProbe.c')
addons=run/'addons';addons.mkdir();steam=Path.home()/'.local/share/Steam'
prepare_profile(addons,steam/'steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons',policy(ROOT),run/'external-cache.json');(addons/'ERR_Core').symlink_to(source,target_is_directory=True)
profile=run/'profile/profile';profile.mkdir(parents=True)
import import_settings
settings=import_settings.merge()[0];settings['heliTimerMinutes']=27;settings['unknownFutureSetting']={'values':['brace } comma , quote \\"','ěščř']}
(profile/'rereintroduced.json').write_text(json.dumps(settings,ensure_ascii=False))
(profile/'EscapistsTerrain.json').write_text('{"scenario":""}')
(profile/'EscapistsFactions.json').write_text('{"escapists":"us","enemy":"ussr","independent":"fia"}')
(profile/'EscapistsContent.json').write_text('{"dormant_mod":0}')
(profile/'EscapistsItems.json').write_text(json.dumps({'version':1,'records':['active','active|1111111111111111|*|0','existing','existing|2222222222222222|*|1']}))
(profile/'EscapistsWelcomeVoice.json').write_text('{"welcomeUrl":"http://192.168.52.4:18947/welcome.b64"}')
(run/'network.py').write_text(PROBE)
runtime=Path('/tmp/erri-takeover-dedicated-runtime')
engine=['/tmp/runtime/ArmaReforgerServer','-server','{C1E20667DCE324ED}Missions/ERR_Everon.conf','-addonsDir',str(addons),'-addons','2528466DE220D91C','-profile',str(run/'profile'),'-noBackend','-noSound','-bindIP','127.0.0.1','-bindPort','2001','-maxFPS','30','-logconsole','-noSplash','-noThrow','-disableCrashReporter']
cmd=['bwrap','--unshare-net','--unshare-pid','--unshare-ipc','--unshare-uts','--die-with-parent','--cap-drop','ALL','--ro-bind','/','/','--tmpfs','/tmp','--ro-bind',str(runtime),'/tmp/runtime','--bind',str(run),str(run),'--proc','/proc','--dev','/dev','--chdir','/tmp/runtime','python',str(run/'network.py'),os.readlink('/proc/self/ns/net')]+engine
with (run/'stdout.log').open('w') as log:
p=subprocess.Popen(cmd,stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
reason='timeout';start=time.monotonic()
try:
while time.monotonic()-start<100:
files=sorted((run/'profile/logs').glob('logs_*/console.log'));text=files[-1].read_text(errors='replace') if files else ''
if 'ERR CONFIG COMPLETE' in text:reason='complete';break
if "Can't compile" in text:reason='compile-failed';break
if p.poll() is not None:reason='exit';break
time.sleep(.3)
finally:
if p.poll() is None:
os.killpg(p.pid,signal.SIGTERM)
try:p.wait(timeout=8)
except subprocess.TimeoutExpired:os.killpg(p.pid,signal.SIGKILL);p.wait()
(run/'result.json').write_text(json.dumps({'reason':reason,'exit':p.returncode}));print(reason)
print('\n'.join(line for line in text.splitlines() if 'ERR CONFIG' in line or 'SCRIPT (E)' in line))
@@ -0,0 +1,9 @@
{
"ERR_ProfileConfig.c": "ac28363fd5861523db278bb18aa5499f356fef69d35435d1f4ef547da704b67d",
"ERR_Settings.c": "2951c36cf3a72ae079ab8991879b4759fae783d719c61878f1aad7126836dae6",
"ERR_ContentSettings.c": "491c80ab32e3c914dea056327f639bc58159033d4917508c9848cca47546908a",
"ERR_FactionSelection.c": "04b8bd8a042cf743ab8a87ec3711f9758e7b0112995a9d363e81a63df4eabe5e",
"ERR_TerrainPreference.c": "93fc55f2c33e95adbcf2bead3430aa14bdb55154315760bcc9647f89dc8286ff",
"ERR_ItemPreferences.c": "690a39a28a84ffe7ccbd27d4af50679925a870b53accf18d6573fe94e71d35ba",
"ERR_WelcomeVoice.c": "a01d4163d3ab5b480ffbd2ceeff7384d8df6b7dd64036d580cd0c462b0135d25"
}
@@ -0,0 +1,41 @@
test_profile_config.py
PASS: shared config transaction rejects client writes, preserves first-save/prior/fallback state across open, write, backup, partial-copy, readback and mismatch failures
test_settings_migration.py
PASS: legacy values preserved, unsupported fields reported, invalid data rejected, existing files protected, runtime bounds aligned
PASS: failed initial settings promotion leaves defaults writable after restart; prior/fallback saves survive copy, readback and mismatch faults
test_terrain_selection.py
PASS: saved terrain GUIDs, defaults, restart persistence, clearing, backup recovery, corrupt-file preservation, write failures, and client write denial
PASS: startup terrain capture protects client/editor/menu worlds, default behavior, same-map loads and reload-loop recovery
PASS: actual transition waits for native startup, disconnects without bans, requires an empty session, retains every loaded mod, bounds waiting and consumes requests once
test_item_preferences.py
PASS: actual item rules, shared-source conflicts, missing/returning mods, bulk reset, independent named presets, bounds, malformed data and failed-save state preservation
test_faction_selection.py
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
test_content_policy.py
PASS: actual content policy gates parent packs, individual factions, faction identity and finite group rotation with vanilla fallback
test_random_settings.py
PASS: random mode restrictions, full numeric ranges, independent calendar dates and strict daylight boundaries
test_convoy_auto_settings.py
PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest
test_welcome_voice.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK
test_environment_policy.py
PASS: native settings policy matches calendar boundaries 1900-2050, date/profile parsing is strict, authored defaults preserve old worlds
test_admin_setting_policy.py
PASS: Core document-discovery alias, companion-only alias exclusion, strict integer parsing and setting boundaries
test_time_policy.py
PASS: every minute round-trips, malformed clocks rejected, defaults limited to added keys, progression bounds and day duration aligned
test_admin_menu.py
PASS: actual menu command routing covers all fifteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets
PASS: explicit weapon retention buttons use the same ready/authorized server command path
PASS: item editor, preset controls and dynamic item-row layout are structurally valid
test_hq_convoy_dispatch.py
PASS: actual authenticated convoy dispatch, active/ready admission gates, canonical receipt, safe unconsumed preflight retry, pool refusal, retained partial failure and consumed no-retry
test_ai_stinger_admin.py
PASS: actual Stinger show/set/help state precise actor-roll effects; read-only help, bounded values, malformed syntax and failed-save preservation; no rerolls/gameplay edits and no native persistence claim
test_view_distance.py
PASS: view-distance bounds, default, save failures, command parsing, temporary ownership, server/platform limits and lifecycle wiring
@@ -0,0 +1,39 @@
{
"terrain": {
"scenario": "C1E20667DCE324ED"
},
"items": {
"records": ["active","active|1111111111111111|*|0","existing","existing|2222222222222222|*|1","custom","custom|1111111111111111|*|0"],
"version": 1
},
"configVersion": 1,
"voice": {"welcomeUrl":"http://192.168.52.4:18947/welcome.b64"},
"future": {"nested":["comma , brace } escaped \" quote",{"value":12}]},
"factions": {
"enemy": "ussr",
"escapists": "random",
"independent": "fia"
},
"mission": {
"unknownFutureSetting": {"values": ["brace } comma , quote \\\"", "ěščř"]},
"automaticEquipmentChancePercent": 25,
"reportIntervalSeconds": 10,
"timeMultiplier": 1,
"automaticConvoyEnabled": 1,
"aiIntelChancePercent": 60,
"viewDistanceMetres": 0,
"startDateCode": 0,
"weatherProfile": 0,
"radioDefenceSeconds": 180,
"heliTimerMinutes": 43,
"supportSquadLimit": 4,
"responseRadiusMetres": 2000,
"antiAirChancePercent": 7,
"antiPersonnelMineChancePercent": 60,
"startTimeMinutes": 840,
"intelRevealChancePercent": 15,
"keepWeaponOnUnconscious": 1,
"convoyCount": 3
},
"mods": {"dormant_mod":0}
}