Four typed slot variables (Slot_Hull/Thruster/Power/Storage, one per block class) plus a RecalculateStats event that reads each slot (via IsValid + external-member Get on the slot's block instance) and derives MaxHull, ShipMovement.MaxSpeed, MaxPower/Power, and StorageCapacity from base values plus whatever's attached. Called at the end of BeginPlay. All slots empty = base values, matching current gameplay exactly. New technique discovered: VariableGet/VariableSet support an external member reference via a "variable_class" field (full asset path required for Blueprint-generated classes, not just the short class name) -- this is how block-instance properties and component properties (e.g. FloatingPawnMovement.MaxSpeed) get read/written at runtime without needing a formal Function or the broken array/loop path.
302 KiB (Stored with Git LFS)
302 KiB (Stored with Git LFS)