Skip to content

Compatibility support matrix ​

What the editor can prove for each fixture family, per platform. Every cell says what evidence exists; anything not proven is written as unverified, never left blank. Code: SaveVersionRegistry, SaveHeaderEvidence, CompatibilityAnalyzer and OperationSupportEvaluator under src/AbioticEditor.Core/Services/Compatibility/.

What a save header can identify ​

Every GVAS header carries the container version (3), the UE4/UE5 object versions (522 / 1012), the engine version (5.4.4), an engine changelist with a licensee bit, the branch (++DF+ABF), and a 74-entry custom-version table. It does not carry the game's own version string or the build hash, so the exact game build can never be read from a save. The editor therefore reports one of four results (BuildIdentification):

ResultMeaning
UnknownNo readable header evidence. The exact build is not known. Nothing is inferred from the installed game.
ValidatedEngineBuildChangelists 1030002 and 1050002; validation scope differs by fixture family below.
ObservedEngineBuildChangelist 1030001: seen in fixtures, byte-exact round-trip proven, no per-area edit evidence.
UnrecognizedEngineBuildHeader parsed, build never seen. Higher than every known build: writes unverified. Lower than every known build: writes unsupported.

Build stamps are per file. The game restamps a region only when it saves that region, so one world folder can mix changelists (the Steam client "Chrissie" world is 1030001 apart from a few stragglers; the rest is 1030002). Classify each file, not each folder.

Older or newer ABF_SAVE_VERSION values are handled separately: below the recorded minimum is OlderVersion (writes unsupported), above the maximum is NewerVersion (writes unverified). Evidence combined into a report: ABF version, engine build and custom-version fingerprint (header), save class (kind), and unknown flags/keys/enums (schema).

Fixture inventory ​

Engine changelist counts come from SaveHeaderEvidence over every .sav under tests/fixtures/.

Fixture familyFilesEngine buildCustom-version fingerprint
Dedicated server (DedicatedServerSaves/Worlds/Cascade)641030002 (64)one shared table
Steam client (SteamSaves/SaveGames)881030002 (66), 1030001 (22)one shared table
Steam legacy standalone world (SteamSaves/Legacy/Cascade)471030002 (45), 1030001 (2)one shared table
Community Update 5 (Update1_5)31050002 (3)native player, world and metadata fixtures
Game Pass wgs container (GamePassSaves)1 containerderived from a Steam save, see belowsame as its source

The legacy families share one custom-version table. Community Update 5 adds a native schema migration, with world/metadata ABF_SAVE_VERSION 4 and player version 1. Its focused native read/edit evidence and remaining limitations are documented in Community Update 5. The matrix below describes the legacy families unless explicitly marked otherwise.

Matrix ​

Legend: proven = fixture test asserts it; unverified = no evidence recorded; n/a = does not exist for that platform.

ColumnSteam clientSteam legacyDedicated serverGame Pass
Read (parse to typed model)proven, all files (CompatibilitySupportTests, reader tests)provenprovenproven for the bundle members the fixture holds
Unchanged round-trip, byte for byteproven, every .sav (Every_fixture_round_trips_byte_for_byte_and_has_identified_header)provenprovenproven for decoded members (Game_pass_fixture_members_round_trip_when_the_bundle_can_be_read; skips if the Oodle library is missing)
Edit: player stats, inventory, skillsproven on fixtures, build 1030002 (PlayerSave*, SkillEditTests, InventoryAssetIdWriteTests)proven on the same code path; build 1030002 files onlyproven on the same code path (server Player_*.sav)unverified beyond wrapper conversion
Edit: world containers, deployables, creaturesproven on fixtures, 1030002 (WorldSave*, PetEditTests, VehicleEditTests)unverified on 1030001 regionsproven, 1030002unverified
Edit: metadata (story flags, chapter)proven, 1030002 (StoryProgressionTests, FlagGateTests)unverified on 1030001 metadata (Chrissie)proven, 1030002unverified
Edit: customizationproven (CustomizationSaveSessionTests)n/an/aunverified
In-game reload after editunverified (no recorded evidence in the repo for this matrix)unverifiedunverifiedunverified (see game-pass-format.md for what was observed by hand)

Notes:

  • The Game Pass fixture is a sanitized container assembled from a Steam save (see GamePassTests), not a container written by the Xbox app. It proves the wrapper and codec, not that the game accepts a re-synced container.
  • "In-game reload" is deliberately never marked proven here. It needs a person launching the game, and this matrix only records what a fixture or a dated manual note establishes. Add a dated row when someone does it.
  • Cross-platform conversion (Steam to Game Pass and back) is covered by SaveConversionServiceTests and SaveBundleTests for structure; it is not listed as an edit area.

Per-area verdicts the UI can use ​

CompatibilityReport.Operations (an OperationSupport) lists one verdict per editing area for the analyzed save. Rules, most restrictive first:

  1. Unrecognized save class, unreadable version, OlderVersion, or an engine build older than every known build: Unsupported for every write area. Inspection stays available whenever the class is recognized.
  2. Unrecognized (newer) engine build, ObservedEngineBuild, no header evidence, or NewerVersion: Unverified. A host may allow the write behind an explicit warning.
  3. Validated engine build with a known version: Supported (fixture-tested on this build; in-game reload is tracked in the table above, not by this verdict). Unknown content is preserved untouched and does not lower the verdict.

Areas: Inspection, PlayerStats, PlayerInventory, PlayerProgression, PlayerIdentity, WorldStoryAndFlags, WorldContainers, WorldDeployables, WorldCreatures, Customization, CatalogWrites. Which apply depends on the save kind (OperationSupport.Find returns null for an area that does not apply). Today all write areas of a save share one verdict because the evidence (build, version) is per file, not per area; the per-area shape exists so an area can be downgraded independently once area-specific evidence (for example a field that differs between builds) appears.

The CLI info command prints every non-supported area on stderr. No Razor surface consumes the report yet.

Live compatibility ​

The live code already carries these facts, kept independent in LiveCompatibilityInfo:

FieldSource today
Agent protocol versionhello reply (TcpLiveGameChannel, editor speaks 1)
Agent versionhello reply
Game buildNot reported by the agent. Null, never guessed from the installed game.
Agent capabilitiesNot advertised by protocol 1. Null (distinct from an empty list).
UE4SS runtime versionNot reported through the connection. The bundled package version is in live-agent/ue4ss/runtime.json, which describes what the editor would install, not what runs. Null on a connection.

LiveCompatibilityEvaluator.Evaluate(info, requirement) returns Unsupported for a missing handshake, a protocol mismatch, or a capability the agent advertises without; Unverified when the game build, capability list or UE4SS version is unknown or differs from the validated build; Supported only when every fact is known and compatible. Until the agent reports game build, capabilities and UE4SS version, every live action evaluates to Unverified at best. That is the honest state, and adding those three fields to hello is the remaining work before live actions can be gated per capability. TcpLiveGameChannel.AgentHandshake exposes what the last handshake returned.

Live actions that depend on server RPCs, replication or game-thread behavior additionally need in-game verification before being called supported; a stub-harness pass does not establish it.

Remaining evidence to collect ​

  • A save written by an earlier game build than 1030001 (none exists in the fixtures), to test the older-version path against real data instead of a synthetic ABF version.
  • Edit fixtures on 1030001 regions and metadata, to move ObservedEngineBuild toward validated.
  • Dated in-game reload notes for each platform and edit area.
  • A Game Pass container written by the Xbox app, not derived from Steam.

A fan-made tool. Not affiliated with or endorsed by the developers of Abiotic Factor.