Base-Game Unlock Classes
Every base-game FGUnlock class, with paths, exact field types, accepted values, nested structs, examples, and caveats.
Type: schematic → Instanced unlocks
and Type: unlock both work with any concrete
FGUnlock subclass. The mechanism is fully generic (resolve class:, NewObject it onto the
schematic’s CDO, apply properties:, append to mUnlocks). Only a couple of unlock types show up
in most examples (FGUnlockRecipe, FGUnlockInventorySlot); this page catalogs every one the base
game ships, so you don’t have to go spelunking through engine headers to find them. For the unlock
classes installed mods add on top, see
Mod Unlock Classes.
ℹ️ Native
/Script/FactoryGame.FGUnlock…paths with shipped Blueprint variants are accepted. KDataForge remaps them to concrete generated classes; exact Blueprint paths remain accepted. Linter reports native mapped form as warningclass.native-remapped, never error. Abstract classes with no Blueprint variant cannot be instanced. Every property name below comes from FactoryGame reflection data.
Complete class/path matrix
Section titled “Complete class/path matrix”Unreal Asset Registry scan found 26 native classes and 22 shipped Blueprint variants in
FGUnlock hierarchy. Native paths in mapped rows resolve to same Blueprint automatically.
| Native class | Abstract | Blueprint variant / use this path | Configurable fields and accepted types |
|---|---|---|---|
FGUnlock | yes | base only; never instance | |
FGUnlockArmEquipmentSlot | yes | /Game/FactoryGame/Unlocks/BP_UnlockArmEquipmentSlot.BP_UnlockArmEquipmentSlot_C | mNumArmEquipmentSlotsToUnlock: int32 |
FGUnlockBlueprints | yes | /Game/FactoryGame/Unlocks/BP_UnlockBlueprints.BP_UnlockBlueprints_C | inherited mRecipes: TArray<TSubclassOf<UFGRecipe>> |
FGUnlockBuildEfficiency | yes | /Game/FactoryGame/Unlocks/BP_UnlockBuildEfficiency.BP_UnlockBuildEfficiency_C | |
FGUnlockBuildOverclock | yes | /Game/FactoryGame/Unlocks/BP_UnlockBuildOverclock.BP_UnlockBuildOverclock_C | |
FGUnlockBuildProductionBoost | yes | /Game/FactoryGame/Unlocks/BP_UnlockBuildProductionBoost.BP_UnlockBuildProductionBoost_C | |
FGUnlockCentralStorageItemLimit | yes | /Game/FactoryGame/Unlocks/BP_UnlockCentralStorageItemLimit.BP_UnlockCentralStorageItemLimit_C | mItemStackLimitIncrease: int32 |
FGUnlockCentralStorageUploadSlots | yes | /Game/FactoryGame/Unlocks/BP_UnlockCentralStorageUploadSlots.BP_UnlockCentralStorageUploadSlots_C | mNumSlotsToUnlock: int32 |
FGUnlockCentralStorageUploadSpeed | yes | /Game/FactoryGame/Unlocks/BP_UnlockCentralStorageUploadSpeed.BP_UnlockCentralStorageUploadSpeed_C | mUploadSpeedPercentageDecrease: float (Percent) |
FGUnlockCheckmark | yes | /Game/FactoryGame/Unlocks/BP_UnlockCheckmark.BP_UnlockCheckmark_C | inherited mUnlockName: FTextmUnlockDescription: FTextmUnlockIconBig: TObjectPtr<UTexture2D>mUnlockIconSmall: TObjectPtr<UTexture2D>mUnlockIconCategory: TObjectPtr<UTexture2D> |
FGUnlockCircuitDaisyChaining | no | /Game/FactoryGame/Unlocks/BP_UnlockCircuitDaisyChaining.BP_UnlockCircuitDaisyChaining_C | |
FGUnlockCustomization | no | /Script/FactoryGame.FGUnlockCustomization | mCustomizationUnlocks: TArray<TSubclassOf<UFGPlayerCustomizationDesc>> |
FGUnlockCustomizer | yes | /Game/FactoryGame/Unlocks/BP_UnlockCustomizer.BP_UnlockCustomizer_C | |
FGUnlockEmote | yes | /Game/FactoryGame/Unlocks/BP_UnlockEmote.BP_UnlockEmote_C | mEmotes: TArray<TSubclassOf<UFGEmote>> |
FGUnlockGiveItem | yes | /Game/FactoryGame/Unlocks/BP_UnlockGiveItem.BP_UnlockGiveItem_C | mItemsToGive: TArray<FItemAmount> |
FGUnlockInfoOnly | yes | /Game/FactoryGame/Unlocks/BP_UnlockInfoOnly.BP_UnlockInfoOnly_C | mUnlockName: FTextmUnlockDescription: FTextmUnlockIconBig: TObjectPtr<UTexture2D>mUnlockIconSmall: TObjectPtr<UTexture2D>mUnlockIconCategory: TObjectPtr<UTexture2D> |
FGUnlockInventorySlot | yes | /Game/FactoryGame/Unlocks/BP_UnlockInventorySlot.BP_UnlockInventorySlot_C | mNumInventorySlotsToUnlock: int32 |
FGUnlockItemDescriptor | yes | /Game/FactoryGame/Unlocks/BP_UnlockItemDescriptor.BP_UnlockItemDescriptor_C | mItemDescriptors: TArray<TSubclassOf<UFGItemDescriptor>> |
FGUnlockMap | yes | /Game/FactoryGame/Unlocks/BP_UnlockMap.BP_UnlockMap_C | |
FGUnlockRecipe | yes | /Game/FactoryGame/Unlocks/BP_UnlockRecipe.BP_UnlockRecipe_C | mRecipes: TArray<TSubclassOf<UFGRecipe>> |
FGUnlockSAMIntensity | yes | /Game/FactoryGame/Unlocks/BP_UnlockSAMIntensity.BP_UnlockSAMIntensity_C | mSAMIntensity: int32 |
FGUnlockScannableObject | yes | /Game/FactoryGame/Unlocks/BP_UnlockScannableObject.BP_UnlockScannableObject_C | mScannableObjects: TArray<FScannableObjectData> |
FGUnlockScannableResource | yes | /Game/FactoryGame/Unlocks/BP_UnlockScannableResource.BP_UnlockScannableResource_C | mResourcePairsToAddToScanner: TArray<FScannableResourcePair>legacy mResourcesToAddToScanner: TArray<TSubclassOf<UFGResourceDescriptor>> |
FGUnlockSchematic | yes | /Game/FactoryGame/Unlocks/BP_UnlockSchematic.BP_UnlockSchematic_C | mSchematics: TArray<TSubclassOf<UFGSchematic>> |
FGUnlockTape | no | /Script/FactoryGame.FGUnlockTape | mTapeUnlocks: TArray<TSubclassOf<UFGTapeData>> |
FGUnlockVisualizationMode | yes | provide concrete mod subclass | mVisualizationModes: TArray<TSubclassOf<UFGVisualizationModeDescriptor>> |
Each properties entry’s path uses field name exactly. TSubclassOf<T> accepts Unreal class path;
TObjectPtr<T> accepts object asset path or null; TArray<T> accepts YAML sequence; reflected
struct accepts YAML mapping. C++ access (protected/private) does not change KDataForge property
path because application uses Unreal reflection. Fields marked transient are not configuration
contract and are omitted.
Struct value shapes
Section titled “Struct value shapes”| Struct field | Accepted type |
|---|---|
FItemAmount.ItemClass | TSubclassOf<UFGItemDescriptor> |
FItemAmount.Amount | int32 (non-negative) |
FScannableObjectData.ItemDescriptor | TSubclassOf<UFGItemDescriptor> |
FScannableObjectData.ActorsAllowedToScan | TArray<TSubclassOf<UObject>> |
FScannableResourcePair.ResourceDescriptor | TSubclassOf<UFGResourceDescriptor> |
FScannableResourcePair.ResourceNodeType | EResourceNodeType: Node, FrackingSatellite, FrackingCore, Geyser, or Deposit |
Recipes & schematics
Section titled “Recipes & schematics”unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockRecipe.BP_UnlockRecipe_C properties: - path: mRecipes value: - /KDataForge/Gen/MyPack.Gen_MyPack_Recipe_MySuperIngot - class: /Game/FactoryGame/Unlocks/BP_UnlockSchematic.BP_UnlockSchematic_C # unlocks OTHER schematics directly — properties: # bypasses MAM/HUB purchase entirely - path: mSchematics value: - /Game/FactoryGame/Schematics/Progression/Schematic_2-3.Schematic_2-3_CThe current game build ships no Blueprint variant for FGUnlockVisualizationMode; use a mod-provided concrete subclass for that abstract native type.
| Class | Key property | What it does |
|---|---|---|
FGUnlockRecipe | mRecipes: TArray<TSubclassOf<UFGRecipe>> | Unlocks the given recipes for manufacturing |
FGUnlockSchematic | mSchematics: TArray<TSubclassOf<UFGSchematic>> | Directly purchases/unlocks other schematics (no MAM/HUB step for those) |
FGUnlockBlueprints | mRecipes (inherited from FGUnlockRecipe) | Unlocks the Blueprint Designer feature and the designer’s own recipe together |
Player capability & inventory
Section titled “Player capability & inventory”unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockInventorySlot.BP_UnlockInventorySlot_C properties: - path: mNumInventorySlotsToUnlock value: 3 - class: /Game/FactoryGame/Unlocks/BP_UnlockArmEquipmentSlot.BP_UnlockArmEquipmentSlot_C properties: - path: mNumArmEquipmentSlotsToUnlock value: 1| Class | Key property | What it does |
|---|---|---|
FGUnlockInventorySlot | mNumInventorySlotsToUnlock: int32 | Adds inventory slots |
FGUnlockArmEquipmentSlot | mNumArmEquipmentSlotsToUnlock: int32 | Adds arm-equipment slots (extra equipped tool) |
FGUnlockGiveItem | mItemsToGive: TArray<FItemAmount> | A container of items other systems read; it doesn’t hand out items on its own. Use FGUnlockRecipe/direct inventory grants for an actual give-on-purchase effect |
FGUnlockItemDescriptor | mItemDescriptors: TArray<TSubclassOf<UFGItemDescriptor>> | Makes descriptors available to item-selection UIs such as Smart/Programmable Splitters |
Central Storage
Section titled “Central Storage”Three separate classes, one per axis. Combine as many as you need on one schematic:
unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockCentralStorageItemLimit.BP_UnlockCentralStorageItemLimit_C properties: - path: mItemStackLimitIncrease value: 5 - class: /Game/FactoryGame/Unlocks/BP_UnlockCentralStorageUploadSpeed.BP_UnlockCentralStorageUploadSpeed_C properties: - path: mUploadSpeedPercentageDecrease value: 10 # % faster upload (decreases UFGCentralStorageSettings::mDefaultTimeToUpload) - class: /Game/FactoryGame/Unlocks/BP_UnlockCentralStorageUploadSlots.BP_UnlockCentralStorageUploadSlots_C properties: - path: mNumSlotsToUnlock value: 1| Class | Key property | What it does |
|---|---|---|
FGUnlockCentralStorageItemLimit | mItemStackLimitIncrease: int32 | More item stacks storable in Central Storage |
FGUnlockCentralStorageUploadSpeed | mUploadSpeedPercentageDecrease: float (Percent) | Faster central-storage uploads |
FGUnlockCentralStorageUploadSlots | mNumSlotsToUnlock: int32 | More concurrent upload queue slots |
Scanning & world interaction
Section titled “Scanning & world interaction”unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockScannableResource.BP_UnlockScannableResource_C properties: - path: mResourcePairsToAddToScanner value: - ResourceDescriptor: /Game/FactoryGame/Resource/RawResources/Bauxite/Desc_OreBauxite.Desc_OreBauxite_C ResourceNodeType: Node # Node | FrackingSatellite | FrackingCore | Geyser | Deposit - class: /Game/FactoryGame/Unlocks/BP_UnlockScannableObject.BP_UnlockScannableObject_C # Add mScannableObjects entries for world-object scan targets such as crates or POIs.| Class | Key property | What it does |
|---|---|---|
FGUnlockScannableResource | mResourcePairsToAddToScanner: TArray<FScannableResourcePair> (ResourceDescriptor + ResourceNodeType) | Grants Object Scanner detection for a resource |
FGUnlockScannableObject | mScannableObjects: TArray<FScannableObjectData> | Grants Object Scanner detection for non-resource world objects |
FGUnlockMap | (no properties) | Unlocks the in-game map |
Customization & cosmetics
Section titled “Customization & cosmetics”unlocks: - class: /Script/FactoryGame.FGUnlockCustomization # Add mCustomizationUnlocks entries for outfits or skins. - class: /Game/FactoryGame/Unlocks/BP_UnlockEmote.BP_UnlockEmote_C properties: - path: mEmotes value: - /Game/FactoryGame/Emotes/Wave/Emote_Wave.Emote_Wave_C| Class | Key property | What it does |
|---|---|---|
FGUnlockCustomization | mCustomizationUnlocks: TArray<TSubclassOf<UFGPlayerCustomizationDesc>> | Player outfit/skin customization options |
FGUnlockCustomizer | (no properties) | Unlocks the build-gun paint customizer feature itself |
FGUnlockEmote | mEmotes: TArray<TSubclassOf<UFGEmote>> | Grants emotes |
FGUnlockVisualizationMode | mVisualizationModes: TArray<TSubclassOf<UFGVisualizationModeDescriptor>> | Grants factory visualization modes (e.g. production/power overlays) |
Feature flags (no properties, presence alone unlocks the feature)
Section titled “Feature flags (no properties, presence alone unlocks the feature)”These have no configurable properties at all; adding one to unlocks: is a bare class: entry:
unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockBuildOverclock.BP_UnlockBuildOverclock_C - class: /Game/FactoryGame/Unlocks/BP_UnlockBuildProductionBoost.BP_UnlockBuildProductionBoost_C - class: /Game/FactoryGame/Unlocks/BP_UnlockBuildEfficiency.BP_UnlockBuildEfficiency_C - class: /Game/FactoryGame/Unlocks/BP_UnlockCircuitDaisyChaining.BP_UnlockCircuitDaisyChaining_C| Class | What it does |
|---|---|
FGUnlockBuildOverclock | Unlocks overclocking (potential shards) on buildings |
FGUnlockBuildProductionBoost | Unlocks inserting production-boost shards into buildings |
FGUnlockBuildEfficiency | Unlocks the build-efficiency display on buildings |
FGUnlockCircuitDaisyChaining | Unlocks power-line daisy-chaining between poles |
unlocks: - class: /Game/FactoryGame/Unlocks/BP_UnlockSAMIntensity.BP_UnlockSAMIntensity_C properties: - path: mSAMIntensity value: 2 - class: /Game/FactoryGame/Unlocks/BP_UnlockInfoOnly.BP_UnlockInfoOnly_C properties: - path: mUnlockName value: 'A cosmetic note' - path: mUnlockDescription value: 'Shown in the unlock UI grants nothing by itself.'| Class | Key property | What it does |
|---|---|---|
FGUnlockSAMIntensity | mSAMIntensity: int32 | Sets the intensity of SAM-node effects (e.g. VO) |
FGUnlockInfoOnly | mUnlockName/mUnlockDescription: FText, mUnlockIconBig/Small/Category: UTexture2D | Pure UI entry in the unlock list, grants no gameplay effect on its own |
FGUnlockCheckmark | (inherits FGUnlockInfoOnly’s fields) | Same as FGUnlockInfoOnly, plus tracks a per-player “seen/unlocked” checkmark in the save |
FGUnlockTape | mTapeUnlocks: TArray<TSubclassOf<UFGTapeData>> | Unlocks audio tapes in tape-player content |
These classes plug into schematic instanced unlocks.
Use Type: unlock to reuse one preconfigured unlock
class across several schematics. Schematic dependencies:
uses the equivalent instanced-array mechanism for mSchematicDependencies.
