Combos, Weapons, and Combat Entity
Combo, weapon, and the pawn contract reference each other. UGCS_ComboAbility only selects and activates a child ability; it does not change damage numbers. AGCS_WeaponActor registers Traces on the owner when activated and may carry its own combo table. IGCS_CombatEntityInterface lets abilities ask for the current target, death state, current weapon, and combo table. SetCurrentWeapon only marks which already-attached weapon the next action uses; it does not switch loadouts.
Related pages: steps in Configure Combo and Weapon, fields in Combo, Weapon, and Targeting, overrides in Interfaces and Custom Instances.
How Combo Ability selects a row
UGCS_ComboAbility extends UGCS_CombatAbility and defaults to LocalPredicted with replication. It reads GetComboDefinitionTable() from the combat entity, then uses the current ComboStep, the Gameplay Event tag, instigator/owner tag queries, and an optional CanActivateAbility test to pick the first matching FGCS_ComboDefinition. It TryActivateAbility on that child. Selection runs on the locally controlled side; a successful UpdateComboStep then replicates and RPCs to the other machines.
Row rules: MinComboStep == 0 is opener-only. A non-reset row is skipped once the current step exceeds MinComboStep. bResetComboStep with MinComboStep > 0 writes the step back to the opener after a match. CanSelectedComboDefinition defaults to true so you can read weapon tags from Extension. Combo Ability does not write SetByCaller or apply damage GEs—those stay on the selected attack ability and attack definition.
ComboStep lives on the combat component: replication skips the owner, and the owning side uses reliable RPCs. Gameplay Debugger shows the current step.
Combat-entity interface
After a pawn or component implements IGCS_CombatEntityInterface, abilities can ask for runtime context:
- Target:
GetCombatTargetActor/GetCombatTargetObject, usually forwarded to the Targeting component. - Life:
IsDead,StartDeath,FinishDeath. The death processor does not call these by default. - Weapon:
GetCurrentWeapon,SetCurrentWeapon,QueryWeapon. The comment onSetCurrentWeaponis explicit: several weapons can be active at once; this only marks which one the next action uses (for example X for primary, Y for secondary). - Combo table:
GetComboDefinitionTable, or null when unused. - Movement tags:
Set/GetRotationMode,MovementSet,MovementStatefor face-target or guard poses. - Action query:
QueryAbilityActionsByContextpicks montage-like actions from project data by ability/source/target tags. The matching asset type is Data AssetUGCS_AbilityActionSetSettings, not Developer Settings.
Weapon interface and Weapon Actor
IGCS_WeaponInterface exposes owner, weapon tags, activation, the main primitive, and GCS_GetTargetingStartTransform for ranged origin. ToggleTrail only toggles a visual trail, not collision Trace.
AGCS_WeaponActor is the default replicated implementation. bWeaponActive uses push replication; authoritative SetWeaponActive runs OnWeaponActiveStateChanged. On activate, RefreshTraceInstance adds TraceDefinitions to the owner's UGCS_TraceSystemComponent, using the mesh tagged WeaponMeshTagName as the default source; handles are removed on deactivate or EndPlay. ComboDefinitionTable is this weapon's own table; the entity's GetComboDefinitionTable usually returns the current weapon's table. bGiveAbilitiesFromComboDefinitionTable expresses the intent that listed abilities travel with the weapon. Native AGCS_WeaponActor does not Give them; the project still uses an AbilitySet or its own Give onto the ASC.
Bullet requests using WeaponForward / WeaponTowardsFocus ask the current weapon for an origin. Melee windows still Start/Stop those already-registered Traces from the Ability Task.
A concrete scene
The pawn holds a blade and a gun; both can have bWeaponActive. A melee press calls SetCurrentWeapon on the blade. UGCS_ComboAbility receives a light-attack event, selects GA_LightSlash, and the combat component ComboStep moves from 0 to 1. The blade already registered its edge Trace; the slash ability only Starts it inside the notify window. Switching to the gun calls SetCurrentWeapon again; the ranged ability reads the spawn from the weapon socket. Replacing the blade with an axe in the backpack is project equipment, not SetCurrentWeapon.