Skip to content
Back to wiki

Best Practices

A

Author

Author

Created: Oct 21, 2026Updated: Oct 21, 2026

Table of contents

Best Practices

These trade-offs come from GCS component boundaries and the prediction contract. Land one melee or ranged hit as an Attack Result before stacking combos, weapons, and multiplayer presentation.

Start with the smallest loop

One pawn, one FGCS_AttackDefinition, and one hit path (Trace or bullet) is enough to prove Flow. Wiring a combo table, several weapons, lock-on, and prediction at the same time hides “not compiled,” “wrong channel,” and “ASC not initialized” in the same failure. The smallest loop is Quick Start and Attach Combat Components.

Definitions describe rules; requests open windows

FGCS_AttackDefinition, FGCS_TraceDefinition, and FGCS_BulletDefinition are reusable rows. UGCS_AttackRequest_Melee and UGCS_AttackRequest_Bullet only say which row this window uses, which Traces to start, and where to aim. GCS_ANS_AttackTrace and GCS_ANS_BulletTrace store the request; the Task executes it. Putting the whole rule on a notify or in an AnimBP means every new attack copies animation.

Authoritative results before presentation

The server Attack Result or confirmed Bullet Entry is the settlement source. Predicted client bullets may show a trail and cues; they do not apply GE. Fix the authoritative path before tuning LocalPredicted processors, camera, or hit reaction. The Shared prediction summary in the Debugger distinguishes Pending, Matched, and Conflict.

Keep the combo entry separate from attack abilities

UGCS_ComboAbility selects a row from the entity GetComboDefinitionTable and updates ComboStep. Child abilities own the Trace or bullet. Do not let every attack ability increment the step, and do not store a combo counter in the AnimBP. Step replication and failed selection both lose a single entry point.

Weapon activation is not an equipment bar

SetWeaponActive controls whether this AGCS_WeaponActor creates traces and is usable. SetCurrentWeapon only marks which weapon this action uses; the comment says it is not weapon switching. Equipment bars, slots, and spawned world actors belong to the project or an inventory layer. Several weapons can be active; only one is the current-action weapon.

Do not treat GIPS as a GCS module

Input buffering, Input Setups, and key-to-ability mapping belong to the Generic Input System that ships with the product. The GCS .uplugin hard-depends on GGA and engine plugins, not GIPS. Missing keys are a GIPS or project-input problem, not a combat-component asset. UGCS_AbilityActionSetSettings is a DataAsset for tag-based action selection. It is not an input module.

Put prediction policy on the right processor

EGCS_AttackResultProcessorPolicy:

Policy

Put here

LocalPredicted

Local feedback only: hitch, light cues, predicted hit pose

Default

Results every relevant machine should see, excluding predicting contexts

ServerOnly

Authoritative state such as death, drops, or resource spend

Damage or death on LocalPredicted can run again when the replicated result matches, or change state the client should not own. Use bEditorDebugEnabled in the editor to turn one processor off for a comparison. The death processor is a native no-op; the project must implement death.