XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8

Original Thargoid panel published cache

This is static PE/ActionScript evidence and a private allocated-memory fixture. No game was started, attached to, queried over a network, or modified. No original update, callback, metadata loader, or HTTP function is invoked by the adapter. Runtime freshness and current live contents remain unverified.

Original UI and DS contract

artifacts/galaxy-marker-research/map-as/scripts/components/leftHandPanels/GMThargoidWarComponent.as binds Signals, States, ProbedSystems, HarvestedSystems, ControlledSystems, and the separate recoverySystemCount. AntiXenoSignalButton.as separately consumes affectedSystemsCount and isRoutePlotted. Selecting an entry calls OnAntiXenoSignalSelected(id) or OnAntiXenoSuggestedSystemSelected(id); the adapter does not send either callback.

Original old-build DS generator 3AA9F20, retained in artifacts/navigation-target-qa-20261021/decompiled/solo-3aa9f20.c, reads these exact published interfaces:

UI value Original source
States 33–36 interface virtual +18(state)
Recovery count 37 same getter, a separate UI property
Signals interface virtual +20() returning a 32-byte vector header; each row is 16 bytes
Recommended Probed/Harvested/Controlled virtual +28(state33/34/35), five fixed 16-byte slots per state

The main map constructor 3A05660 binds its +290 source from the dynamic component ID at global 5F5428C. Component constructor 3A0E740 installs the source interface at base+70, primary vtable old 55276E8, component vtable +8 old 5527718, published interface old 55278C0. Owner is base+10. Original interface getter 3A4C0C0 returns that same dynamic ID; it is not a guessed numeric component enum.

Published getter 3A565B0 returns count base+318+4*(state-33) only for states33–38. Getter EC00F0 returns base+510, and getter 3A57E40 returns base+330+50*(state-33). Original state names are independently declared in factions/consts/FactionStates.as: 33 Probing, 34 Harvest, 35 Controlled, 36 Stronghold, 37 Recovery, 38 Pseudo_HumanControlled. The UI presents states33–36, with 37 separately; the adapter preserves all six original counters without relabelling 38 as another war state.

Meaning of the rows

Original parser 3A6E3E0 parses the systems dictionary. Keys are decimal real system addresses. It adds a signal when raw state is36 or the original Titan flag is set. Signal row+0 is that address, row+8 is state==36; the remaining bytes are padding and are not interpreted. The DS displays the translated key Maps_AntiXeno_Panel_Signal_System{address} and appends Maps_AntiXeno_Panel_Signal_Destroyed exactly when that boolean is false. The callback id is the signal's original array index, not its 55-bit address.

Recommended slots contain the real system address and the original progress float at +8. The original parser considers only strict 0 < progress < 1, keeps five entries per state in descending progress order, and the DS 3A161C0 stops at the first zero address. Its callback id is (state << 8) | rank. The adapter copies those three published lists, preserves their order and progress, and never synthesizes recommendations from a public catalogue or current view filtering.

affectedSystemsCount comes from the existing generic metadata lookup 39BED80: it returns hash node+10, the DS requires descriptor+1D0, and sums descriptor+1C8/+1CC (stronghold_controlled_systems / stronghold_attacked_systems). The adapter traverses the two existing maps read-only and leaves the value null when unavailable, malformed, changed during copying, or overflowing. It never requests that descriptor.

Readiness and completeness

Original component ready predicate 3A62630 requires base+1A2 and +1A3 together in the relevant original mode. Response handler 3A2B090 sets +1A3 after response completion even when the HTTP result fails or the parse is unsuccessful. Therefore neither flag, nor an empty vector, proves that all current war information is available.

The managed snapshot preserves metadataObserved and responseObserved. State counts are null until both flags are set. Positive existing signals/recommendations can remain useful while either flag is false, but they must be presented as unverified original cached data. Even with both flags set, complete remains false; a zero count is an original cache value, not an exhaustive world assertion. There is no proven total-system-count/completeness field. Recommendation length (maximum five per group) and signal length must never substitute for original state totals.

Current ED5A compatibility

research/galaxy_thargoid_compatibility.py regenerates artifacts/galaxy-query-research/thargoid-account-sources/compatibility.json from exact full old/new image hashes. Six complete relevant functions match normalized instruction bytes; constructor references close all six interface vtable bindings. Four actual published leaf getters are additionally verified through RET. Current vtables used by the adapter are 55276B8, 55276E8, and 5527890; dynamic ID global 5F5428C is unchanged. This is a bounded extension to the runtime-neutral compatibility evidence, not a hook-installation approval or change to the shared profile/hash.

The parser is a genuine changed body: old 3A6E3E0 → new 3A6E340 is uniquely called from the fully matched response handler 3A2B090 → 3A2AFF0. It has 613 versus611 instructions: stack locals moved and one duplicate JSON cleanup call+lea was removed. All 25 instructions referring to its published member range +318..528 match exactly. Whole-body equivalence is deliberately not asserted; the adapter never calls this parser.

Implementation and fixture

native/ManagedPlugin/Navigation.GalaxyAccountThargoid.cs adds an owning-thread-only read adapter, validates all relevant source vtables/owner, bounds vector sizes, validates addresses and original boolean/progress fields, and checks source bytes again before publishing. No negative account or world facts are inferred from missing entries. Navigation.GalaxyAccountThargoidTests.cs exports XFENavigationGalaxyThargoidSelfTest, expected mask65535, covering real 55-bit addresses, callback ids, source order, readiness/unknown counts, empty partial results, owner/vtable guards, malformed counts/flags/addresses/duplicates, invalid progress/order, zero-slot termination, optional metadata and byte-for-byte read-only behavior.

Isolated build: dotnet publish native/ManagedPlugin/Standalone/Standalone.csproj -c Release --artifacts-path artifacts/galaxy-thargoid-tests. Fixture runner: research/Invoke-GalaxyThargoidFixture.ps1. Results live under artifacts/galaxy-thargoid-tests/thargoid-selftest.json; loading that private test DLL is limited to its allocated-memory self-test export. It is never installed into the game.