UCrimsonAbilityContract
A UPrimaryDataAsset that publishes an ability's schema - every property, event, asset slot, and augment slot it exposes. Augments are authored against a contract, so the editor can populate mutation dropdowns from the contract instead of free-text tag pickers.
Replaces UCrimsonAbilityDefinition
UCrimsonAbilityContract supersedes the old UCrimsonAbilityDefinition (deprecated, scheduled for removal). New abilities should use a contract via the ability's AbilityContract property.What a contract publishes
| Section | Type | Example |
|---|---|---|
IdentityTags | FGameplayTagContainer | Categorize the ability for ContractFamily augment queries / UI grouping |
Properties | FCrimsonContractProperty[] | Cooldown, range, damage, projectile count |
Events | FCrimsonContractEvent[] | OnHit, OnCrit, OnEnd channels the ability broadcasts |
ClassSlots | FCrimsonContractClassSlot[] | Projectile actor class, spawned-actor template |
ObjectSlots | FCrimsonContractObjectSlot[] | Sound cue, particle system, icon |
AugmentSlots | FCrimsonContractAugmentSlot[] | Augment slot categories + capacity the ability accepts |
Runtime lookups resolve through UCrimsonGameplayAbility::GetConfigurableValue / Int / Bool / Vector, GetConfigurableClass<T>, GetConfigurableObject<T>, and GetConfigurableStruct<T> - all backed by the ability's PropertyCache.
Why a contract
- No silent footguns - an augment can't target a property/slot the contract doesn't publish; mutation dropdowns are constrained to the contract's schema.
- Save-time validation -
IsDataValidfails a broken augment in the editor, not at PIE time. - Self-documenting - the contract is the single place to see everything an ability exposes.