Skip to content

Salvage Data Model

The salvage data model separates authored item facts, physical item runtime state, and station-owned scan memory.

The authored data lives in:

UAndromedaSalvageItemData

The physical runtime actor is:

AAndromedaSalvageItem

The station-owned scan memory is:

UAndromedaStationDatabankComponent

The shared structs and enums live in:

AndromedaScanTypes.h

Authored Data

UAndromedaSalvageItemData is a UPrimaryDataAsset. It gives each salvage item authored metadata without requiring a new C++ class per item.

For example, DA_DamagedReactorCoil can define:

Item Name
Manifest Claim
Legal Requirement
Scan Profile
Package Requirement

Changing those values changes scan and package-handling output without changing C++.

Runtime Item State

AAndromedaSalvageItem stores physical item state:

ScanInstanceId
bPackageAssigned

The item can build a scan result from its data asset, but it does not remember whether it has been scanned and does not cache scan data. Scan memory belongs to the station databank.

ScanInstanceId is a runtime FGuid generated for the physical item instance. It distinguishes two actors that share the same UAndromedaSalvageItemData when scanned.

Scan Result And Station Databank

FAndromedaScanResult is the UI-facing result built by a scannable object. Salvage items populate that generic payload from their item data asset, but the scan payload does not store a salvage data asset pointer.

FAndromedaScannedItemRecord stores the station-owned scan memory:

ScanInstanceId
ScanResult
ScannedAt

UAndromedaStationDatabankComponent stores records by item ID for the current play session. It stores invalid scan results too, so the scanner can remember that a result was already shown even when item data was missing.

Future save/load work should serialize station databank records through USaveGame. There is no disk persistence in the current slice.

Packaging

Package assignment is handled by the packager workstation after it verifies that the workstation's owning station databank has a valid scan record for the item.

AssignRequiredPackage rejects:

item has no data

If the item has data, it sets:

bPackageAssigned = true;

The operation is idempotent; calling it on an already packaged item leaves the item packaged.

Processing

Final sale, quarantine, reporting, cargo transfer, and consequence handling are intentionally absent from the current placement foundation. The old warehouse zones and terminal processing flow have been removed from active source.

Future consequence gameplay should introduce its own cargo/finalization owner after physical storage rules are proven.