Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
68 lines
3.5 KiB
Markdown
68 lines
3.5 KiB
Markdown
# Reforger 1.8 AI ownership probe
|
|
|
|
Standalone diagnostic addon. Do not include this folder in Escape's Workshop build.
|
|
It depends only on vanilla Reforger. It uses vanilla Game Master Everon and creates
|
|
one US soldier in one empty group. Run with `-aidProbe` on both machines.
|
|
|
|
The dedicated process advances through five phases, each at least 20 seconds:
|
|
|
|
1. Server-owned baseline after the worker acknowledges both replicated entities.
|
|
2. Soldier hierarchy transferred with `GiveExt(workerIdentity, true)`.
|
|
3. Group hierarchy also transferred.
|
|
4. Worker explicitly attempts `AIControlComponent.ActivateAI()` and group activation.
|
|
5. Ownership returned to the dedicated process and AI explicitly reactivated.
|
|
|
|
Phase 4 is a separate intervention, not a consequence attributed to ownership.
|
|
A static MP observer and explicit per-connection streaming put the soldier within
|
|
worker replication coverage. This diagnostic assumes exactly one worker connection.
|
|
Both processes must have the same mod and game version. LOD 0 is forced on the
|
|
server agent/group to make an idle one-soldier baseline observable.
|
|
|
|
Each side logs replication flags, component/agent presence, activation flags,
|
|
LOD, native perception simulation count, and actual engine-entered soldier/group
|
|
behavior decision callbacks. Overrides call the original implementation once.
|
|
No behavior callback is invoked manually. An owner-directed PlayerController RPC
|
|
runs a small deterministic script calculation and returns an acknowledgement;
|
|
this proves worker script execution, not expensive AI migration or CPU savings.
|
|
|
|
## Local hidden runner
|
|
|
|
First copy this addon's `addon.gproj` and `Scripts` to a disposable directory and
|
|
open that copy in matching 1.8 Workbench. This creates `resourceDatabase.rdb`;
|
|
a loose script-only folder without an index was silently omitted by the Linux
|
|
runtime in the initial attempt. Do not index or change the production mod.
|
|
Workbench needs vanilla `ArmaReforger.gproj` available in its addon search path.
|
|
|
|
The Linux helper requires the repository's existing `tools` helpers, bubblewrap,
|
|
gamescope, Steam/Proton Experimental, a private idle test prefix, and a private
|
|
1.8 Linux dedicated runtime. Close the normal game first. Example:
|
|
|
|
```sh
|
|
python tests/native/ai_delegation/run_local.py \
|
|
--runtime /tmp/erri-takeover-dedicated-runtime \
|
|
--indexed-addon /tmp/aid-indexed \
|
|
--compat /tmp/erri-takeover-client-compat \
|
|
--run /tmp/aid-new-run
|
|
```
|
|
|
|
The run path must not exist. `--server-only` checks baseline without starting a
|
|
client. The full run refuses an existing game and uses a private hidden, muted
|
|
display/profile. The dedicated server has a private network namespace; a
|
|
loopback-only UDP/Unix datagram bridge admits one local worker. No production
|
|
server, server configuration or mission files are changed. A deadline and owned
|
|
process cleanup bound the experiment. Results and frozen inputs stay in the run
|
|
folder; source hashes are saved before launch.
|
|
|
|
```sh
|
|
python tests/native/ai_delegation/summarize.py \
|
|
/tmp/aid-new-run/server/logs/logs_*/console.log \
|
|
/tmp/aid-new-run/client/logs/logs_*/console.log
|
|
```
|
|
|
|
The summary discards the first and last two samples of each phase before calculating
|
|
counter deltas. Missing native perception components use `-1`, not zero. Require
|
|
positive server baseline deltas and client acknowledgements before interpreting
|
|
any zero worker counters. This is an execution-locality experiment, not a CPU
|
|
benchmark. A single idle soldier cannot establish scalability, combat behavior,
|
|
vehicle behavior or exclusive native subsystem costs.
|