Inventory Dev Tools Window

An immediate-mode SlateIM panel for the full inventory feature surface during PIE. Open it from Tools -> Crimson Inventory -> Inventory Dev Tools or with the console command Crimson.Inventory.DevTools.

What it covers
Every action the runtime API supports: granting items, splitting/locking/dropping, layout swap, runtime constraint mutation, cap bumps, currency add/remove, container scope routing, party / dungeon scope-key overrides, force crafting, live message tail, save snapshots, custom cheats.

Target selector

A dropdown above the tabs enumerates every UCrimsonInventoryManagerComponent in the PIE world - player pawns, container actors, instance actors, and personal containers held by routing components. Every tab retargets when you switch.

Tabs

TabPurpose
ItemsGrant items by definition + placement policy + quantity; live entries table with EntryId / slot / grid / rotation / group / locked / stacks; per-row Lock / Drop 1 / Drop All / Delete; per-row Sel checkbox feeding the Drop Selected as Bag (N) button (needs DefaultBagActorClass set); 'Clear All' / 'Clear Selection'; 'Grant All Starter Items' shortcut driven by UCrimsonInventoryDevToolsSettings::StarterItems.
LayoutInspect layout asset (class, capacity hint, grid size, occupancy). Swap layout from a dropdown. Bump int/float tag-stack caps by entering a tag and delta. Add/remove runtime UCrimsonInventoryConstraint subobjects from a class picker.
CurrencyList currencies on the target. Pick a registered currency data table + row, set an amount, click Add / Remove.
ContainersEvery ACrimsonContainerActorBase in the world with scope + tag + entry count. Click Target to retarget the window. Sub-section: registered virtual stashes (UCrimsonContainerSubsystem).
RoutingRouting-component readout for the first PIE PlayerController. Personal containers list. Scope-key overrides: type a party id or dungeon id and click Apply; the routing component returns it from ResolvePartyKey / ResolveDungeonInstanceKey for the next OpenContainer call (no real party/dungeon system required). Live instance-subsystem table with per-row Add Me / Remove Me / Destroy.
CraftingPick a crafting station in the level + a recipe asset. Live table of required ingredients vs. quantity in the targeted inventory. 'Craft (force)' button calls Station->CraftItem.
MessagesCoalesced live tail of all eight inventory message tags (StackChanged, InventoryUpdated, ConstraintFailureMessage, ConstraintChanged, ItemDropped, CurrencyDropped, CurrencyChanged, Container_Message_Changed). Pause / Resume / Clear, tag-substring filter. Caps at 20 entries.
SaveSnapshot Now -> renders a human-readable summary of FCrimsonInventorySaveData (layout, entries, constraints, caps, currencies). 'Snapshot -> Re-apply (round-trip test)' button verifies the data path. 'Clear Inventory' empties the selected target while preserving its layout.
CheatsButtons defined in Project Settings -> Crimson -> Crimson Inventory Dev Tools -> Custom Cheats. Each cheat has Label / Command / Category - cheats with the same category render in one row. Commands route through the first PIE PlayerController's ConsoleCommand.

UCrimsonInventoryDevToolsSettings

Project Settings -> Crimson -> Crimson Inventory Dev Tools. Config saved to DefaultGame.ini, source-controlled so the whole team shares the setup.

PropertyUsed by
CustomCheatsCheats tab: array of { Label, Command, Category } entries
StarterItemsItems tab: 'Grant All Starter Items' shortcut - one of each in order
DefaultDebugLayoutRouting tab: layout assigned to a personal container created via the debug button
DefaultBagActorClassItems tab: pickup actor class spawned by the 'Drop Selected as Bag' button (multi-select checkboxes in the entries table)

PIE / scope-key overrides

The Routing tab calls UCrimsonInventoryRoutingComponent::SetTestPartyKeyOverride / SetTestDungeonInstanceKeyOverride (both WITH_EDITORONLY_DATA, no shipping cost). The overrides clear automatically on PIE end so they never leak into the next session.

Editor-only
The dev tools window, its settings UClass, and the routing-component test setters all live in the editor module + WITH_EDITORONLY_DATA blocks. None of it ships with a packaged build.