Inventory Showcases

Requires every Crimson plugin
CrimsonCore is free to download, but compiles only with all Crimson plugins installed. Every showcase actor and item definition named below ships in CrimsonCore's own content - you place them in a level of your own.

Build an InventoryShowcase station in a level of your own out of the shipped actors: sixteen B_CrimsonItemSpawnerPads (/CrimsonCore/GameplayTesting/, one per shipped item definition), the containers (B_Chest_Shared, B_Stash_Personal, the one-time B_LootChest, the player-owned B_OwnedStash), a pre-filled B_LootBag, and B_ItemVendingMachine (every item definition in stock, refilled as you take) - the containers, bag, and machine all live in /CrimsonCore/Inventory/Actors/. For locked doors gated by interaction conditions (keys, a lockpick, Health at or above 50), see Doors -> Build a door showcase. Walk over a pad to receive its item, open the inventory, and try each feature below. The pads cool down (CooldownSeconds) and refill.

Show Plugin Content
Tick Settings -> Show Plugin Content in the Content Browser to see the /CrimsonCore/Inventory/... and /CrimsonCore/GameplayTesting/... assets named here.

Showcase content

AssetPath (/CrimsonCore/Inventory/)Notes
ItemDef_Apple, ItemDef_HealthPotion, ItemDef_ManaPotionItems/Stackable consumables (Item.Type.Consumable); consumable tooltip.
ItemDef_IronSword, ItemDef_RustySword, ItemDef_IronHelm, ItemDef_Shield, ItemDef_Boots, ItemDef_GoldRing, ItemDef_SilverRingItems/Equippable (UCrimsonInventoryItemFragment_Equippable). ItemDef_RustySword carries UCrimsonInventoryStateFragment_Durability.
ItemDef_Satchel, ItemDef_GridPouchItems/Bags (UCrimsonInventoryItemFragment_Bag). Both only contribute once dragged into one of the player's two bag slots (the Bags strip; Crimson.Inventory.Constraint.BagSlots = 2 on the GFA). Grid Pouch = Mode: SeparatePanel, Layouts/DA_InvLayout_Grid 4 x 2 - its own panel. Satchel = Mode: ExpandRoot, Slots 4 - no panel, the main grid grows 24 -> 28 while it is slotted. A slotted bag refuses to leave while it holds items.
ItemDef_IronOreItems/Stackable material (Item.Type.Material).
ItemDef_TorchItems/UCrimsonInventoryStateFragment_Lifetime (TotalLifetime) - it burns down.
ItemDef_GoldCoins, ItemDef_GemItems/UCrimsonInventoryItemFragment_GrantCurrency (Item.Type.Currency) - picking them up adds to Currency.Gold / Currency.Gems instead of taking a slot.
T_Item_*Items/Icons/One icon per item definition.
DA_CrimsonInventoryLayout_FlatSlot(root)Flat slot layout used by the player inventory, the chests, and the Satchel.
DA_InvLayout_Grid, DA_InvLayout_WeightLayouts/Grid layout (used by the Grid Pouch) and weight layout (shipped as a reference; no showcase pad uses it).
DT_Currencies(root)Currency.Gold, Currency.Gems. Registered by CrimsonGameFeatureAction_AddInventory.
EquipDef_IronSword, EquipDef_Shield, EquipDef_IronHelm, EquipDef_Boots, EquipDef_RingEquipment/CrimsonEquipment definitions the equippable items reference.
ItemTypeActionSet_Core(root)Context actions per Item.Type.* (Use, Equip, Split, Drop, ...) - see Context Menu.
B_Chest_Shared, B_Stash_Personal, B_LootChest, B_OwnedStash, B_ItemVendingMachine, B_LootBagActors/12-slot shared and personal containers, the one-time loot chest, the player-owned stash, the vending machine, and the loot bag. The plugin's PerParty / PerMapInstance scopes have no showcase (per-run storage, not persisted).

Tag labels (Equipment.Slot.*, Item.Type.*, Crimson.Inventory.Constraint.*, Currency.*) come from [/Script/CrimsonUI.CrimsonTagLabelSettings] in the project's Config/DefaultGame.ini; UCrimsonCoreInventoryUIStatics::GetTagLabel reads them for tab names, meter labels, and paper-doll labels.

Showcase matrix

ShowcasePlugin piecesTry it with
Flat slot listUCrimsonInventoryLayout_FlatSlot -> UCrimsonCoreInventoryGroupPanel (Flat) with W_Inventory_Slot per cellThe player inventory: DA_CrimsonInventoryLayout_FlatSlot, 24 slots from CrimsonGameFeatureAction_AddInventory.
Grid with rotationUCrimsonInventoryLayout_Grid -> group panel (Grid): Grid_Cells + Canvas_Items overlays, Rotate verb, bSupportsRotationPick up ItemDef_GridPouch, open it, drop ItemDef_IronSword inside and press RT / R while carrying.
Weight listUCrimsonInventoryLayout_Weight -> group panel (Weight): Box_List + Meter_CapacityLayouts/DA_InvLayout_Weight - assign it as a bag or inventory layout; no pad is wired to it.
Shared chestACrimsonCoreContainerActor (Scope = Shared) + W_Container_ScreenB_Chest_Shared - everyone sees the same contents.
Personal stashScope = PerPlayerB_Stash_Personal - each player has a private instance.
Party and map-instance chestsScope = PerParty, Scope = PerMapInstanceNo showcase asset: these scopes are per-run storage (UCrimsonInventoryInstanceSubsystem), not persisted. Duplicate B_Chest_Shared and set Scope to try one.
Loot bagACrimsonCorePickupActor + W_Loot_Window + W_Loot_EntryThe placed B_LootBag.
Nested bagsUCrimsonInventoryItemFragment_Bag -> child UCrimsonCoreInventoryGroupViewModel (ParentGroupId, Depth) rendered as its own group panelItemDef_Satchel (flat, 4) and ItemDef_GridPouch (grid, 4 x 2).
Paper dollUCrimsonCoreEquipmentPanel + W_Equipment_Slot per Equipment.Slot.* via ICrimsonEquipmentHostCarry ItemDef_IronHelm onto the Head slot; double-click ItemDef_Boots.
Hotbar dragUCrimsonCoreInventoryDragDropOperation (a UCrimsonSlotBindingDragDropOperation) dropped on W_ActionBarDrag ItemDef_HealthPotion from the inventory onto an action-bar slot - see Radial Slot Bindings.
Currency, HUD, toastsUCrimsonInventoryItemFragment_GrantCurrency, W_Inventory_HUD at HUD.Slot.Inventory, W_Inventory_Toast at HUD.Slot.ToastsWalk over ItemDef_GoldCoins / ItemDef_Gem: the HUD currency row updates and a toast shows.
Sort, filter, search, lockUCrimsonCoreInventoryPanelWidget (SearchBox, TabList_Categories from CategoryTags, Button_Sort), Lock verbCollect a mix, type "potion", switch tabs, press Sort, lock a sword and try to drop it.
Split and context menuSplit verb -> W_SplitStack_Dialog; Secondary -> UCrimsonCoreContextMenuSubsystem with ItemTypeActionSet_CoreStack five ItemDef_Apple, press X (hold) / X to split; right-click for the menu, X (tap) for the default action.
Tooltips per kindTooltipClassByItemType -> W_ItemTooltip_Consumable / _Equipment / _Bag, W_ItemTooltip fallbackFocus a potion, a sword, a bag, and ItemDef_IronOre in turn.
Durability and lifetimeDurability01 -> Bar_Durability on slot, paper doll, and tooltip; UCrimsonInventoryStateFragment_LifetimeItemDef_RustySword shows a durability bar; ItemDef_Torch counts down.

How the showcase is wired

PieceAssetKey settings
Player inventory + routingYour experience action set -> CrimsonGameFeatureAction_AddInventoryInventoryList[0]: B_CrimsonPlayerState (/CrimsonCore/Player/), DA_CrimsonInventoryLayout_FlatSlot, Crimson.Inventory.Constraint.Slots = 24, RuntimeConstraints = [CrimsonInventoryConstraint_Slot], DT_Currencies. RoutingList[0]: B_PlayerController (/CrimsonCore/Player/).
Equipment slotsYour experience action set -> CrimsonGameFeatureAction_AddEquipmentSlotsSlotsList[0]: BP_CrimsonCharacter (/CrimsonCore/Characters/), SlotLayout for Head / Chest / Legs / Feet / MainHand / OffHand / Ring, bAddEquipmentManager = true.
HUD strip + toastsYour experience action set -> CrimsonGameFeatureAction_AddWidgetW_Inventory_HUD at HUD.Slot.Inventory; W_Inventory_Toast at HUD.Slot.Toasts.
Inventory screenGA_ShowWidget_Inventory (/CrimsonCore/Input/Abilities/)Pushes W_Inventory_Screen on UI.Layer.Menu.
Screen verbsW_Inventory_Screen, W_Container_Screen, W_Loot_Window Class DefaultsInput|Verbs entries point at IA_UI_Inventory_*; keys in IMC_UI_Inventory.
Tooltips and split dialogPlugins/CrimsonCore/Config/DefaultCrimsonCore.iniUCrimsonCoreInventoryUISettings defaults (see Inventory UI).
Item padsB_CrimsonItemSpawnerPad (/CrimsonCore/GameplayTesting/)ItemToGrant, StackCount, CooldownSeconds; bIsAvailable replicates so the DisplayMesh hides during cooldown - see Gameplay Testing.
Weight overflow -> movement slowA CrimsonInventoryConstraint_FloatTag child with bAllowOverflow, a CrimsonCoreConstraintActionSet asset, and the ConstraintActions component on B_CrimsonPlayerState (/CrimsonCore/Player/)CrimsonGameFeatureAction_AddInventory: DefaultFloatConstraints = [Crimson.Inventory.Constraint.Weight, 50], RuntimeConstraints += your overflow constraint. The action set binds that tag to Apply Gameplay Effect While Over Threshold (SetByCallerTag = SetByCaller.Encumbrance.Overflow, SetByCallerScale = -0.5). Nothing ships pre-wired - see How-To: Constraint Actions.

Build your own station

Place B_CrimsonItemSpawnerPad actors and set ItemToGrant to each definition you want to demo (StackCount 5 for the consumables so Split has something to split). Drop in a duplicate of each chest Blueprint and a B_LootBag. Make sure the level runs an experience whose action set includes the CrimsonGameFeatureAction_AddInventory, CrimsonGameFeatureAction_AddEquipmentSlots, and CrimsonGameFeatureAction_AddWidget entries above.

Verify (Play As Client)
Two players, Play As Client. Both collect from the pads (each pad refills after CooldownSeconds), one fills B_Chest_Shared, the other sees it; each fills B_Stash_Personal and sees only their own.

See also

  • Inventory UI
  • Pickup Actor & Loot Window
  • Gameplay Testing
  • Context Menu
  • Radial Slot Bindings
  • How-To: Constraint Actions