Open-ended object introspection: any object exposes structured data as a bag of FInstancedStruct payloads, and tooltips, AI or search panels read only the types they understand.
Coming Soon · Gameplay · Unreal Engine 5
Kill the fat tooltip struct. Let any object describe itself.
Any UObject can describe itself to a tooltip, AI context builder, search index or comparison panel, and neither side includes the other's headers. Providers fill a bag of FInstancedStruct payloads; consumers read only the types they understand. New data never means editing a shared struct.
Why CrimsonInspector
Providers say what they know; consumers take what they can use. Neither side knows the other exists.
One interface, any provider
Implement ICrimsonInspectable on an actor, component, item or any other UObject and fill Provide Inspector Data. It is a BlueprintNativeEvent, so a Blueprint class and a C++ override both work. The provider never knows who is reading.
Consumers read what they understand
A tooltip pulls names and stats, a crafting panel pulls crafting data, an AI builder pulls whatever it needs. Each calls Get Inspector Data and picks out its own types. Unknown entries are skipped: nothing breaks, nothing couples.
A vocabulary for the basics
Five ready structs every consumer can render: display name with subtitle, soft-referenced icon, stat line (label, value, unit, gameplay tag), text line for lore or descriptions, and a section header for grouping. Typed adders and getters ship for each.
Your own payload types
Emit any struct: a Blueprint Structure through Make Instanced Struct, or any USTRUCT with AddEntry<T> in C++. Consumers that know it read it with Filter By Type. Your existing tooltip, which never heard of it, stays unchanged.
Ask only for what you need
Consumers pass request tags (Identity, Stats, Description, Tags) and providers guard each group with IsCategoryRequested. A query that wants only stats skips the cost of building names, icons and lore. An empty request returns everything.
Merge objects into one bag
The output array is appended to, never cleared, so one consumer can merge an item and its enchantments into a single payload. Section headers group what follows into Combat or Lore; flat-list consumers simply skip them.
A closer look
A hover tooltip without a shared struct
The weapon emits a name, damage and attack speed. The tooltip calls Get Inspector Data, then Try Get Display Name and Get Stat Lines, and spawns one row per stat. Neither class includes the other.
- Stat lines carry a label, value, unit and optional gameplay tag
- The same provider and consumer helpers work from Blueprint and C++
New data without touching old consumers
Crafting requirements, quest hints, anything no built-in struct covers: define a struct, add it to the bag, and read it in the one panel that cares. Every other consumer keeps working exactly as before.
- Define it as a Blueprint Structure or a C++
USTRUCT - Read it back with Filter By Type, or
GetPtr<T>in C++
One provider feeds tooltips, AI and search
The providers behind your tooltips also answer an AI context builder, a search index, an item comparison panel or a debug log. Each consumer requests the categories it needs and reads the types it knows.
- Built-in request tags: All, Identity, Stats, Description and Tags
- Compare two items by collecting the same stat types from both
- A local, read-only query: each machine describes the object as it currently sees it
Technical details
- Engine
- UE 5.8
- Tested platforms
- Windows
- Blueprint-ready
- Yes
- C++ required
- No
- Network replicated
- No
- Dependencies
- Core, CoreUObject, Engine, GameplayTags
Frequently asked questions
Do I need C++ to use it?
AddEntry<T> template (Blueprint uses Make Instanced Struct) and ICrimsonInspectable::CollectInspectorData (Blueprint uses Get Inspector Data).Does it draw the tooltip for me?
Does it work in multiplayer?
Does it depend on other Crimson plugins?
Core, CoreUObject, Engine and GameplayTags modules. CrimsonCore ships no dedicated Inspector wiring and none is needed: any system from any plugin becomes a provider by implementing ICrimsonInspectable.Can I buy it yet?
Describe it once. Read it everywhere.
Enable the plugin, add Crimson Inspectable to one actor, and print its name and stats from any Blueprint in a handful of nodes. The Quick Start walks the provider and consumer side by side.
Completes your setup
Each Crimson plugin runs standalone, so add only what your game needs:
Game-agnostic CommonUI foundation for menus and HUDs.
- Layer & Dialog System
- Activatable Widgets
- MVVM Base Classes
- World-Space Indicators
Layout-agnostic, fully replicated inventory with bags and containers.
- Pluggable Topology
- Runtime Constraints
- Scoped Containers
- No RPCs to Write