Version 1.6
Changes since 1.5. The placeholder bullet path is now a configurable, predicted runtime: one definition can fire single shots, chains, and emitters, with local responsiveness and server authority. TraceInstance, TaggedValues, and combat-side attachment mapping are removed instead of patched further. This is a source- and asset-breaking upgrade.
Added
- Ranged attacks can be data-authored instead of spawning a custom actor per pattern.
UGCS_BulletSystemComponentis the runtime you attach to a character.RequestSpawnBullet/RequestSpawnBulletWithEntryIdcreate batches; pooling and Fast Array replication track entries, per-bullet state, and hits. - Melee-like responsiveness without applying damage twice. Only the owning player's first volley predicts trajectory and presentation; predicted bullets do not apply Gameplay Effects. Chain and emitter follow-ups spawn on the server. Blueprints can implement confirm / deny callbacks. Default timeout is 2 seconds.
- Projects can swap bullet presentation without rewriting hit resolution. Implement
IGCS_BulletInterface, or keep subclassingAGCS_BulletInstance. The system owns identity, pooling, and authoritative hits; the instance owns motion and FX. - A hit can grow follow-up shots without a second spawner. Definitions can chain on hit or emit later shots on an interval. Those requests are authority-only.
- The same volley will not keep hitting the same target. Definitions can share a hit list, apply a hit cooldown, and delay explosion.
- Ability fire and animation windows are separate.
UGCS_AbilityTask_BulletTracereads the AttackRequest from a Gameplay Event. AnimNotifyStates carry data; they do not run traces. - Combat flow can be inspected in Gameplay Debugger. The
GenericCombatSystemcategory shows attack results, traces, bullets, targets, and weapons. - Mac is a supported development and target platform. This release targets Unreal Engine 5.8.
Changed
- Lock-on no longer requires a Pawn host.
UGCS_TargetingSystemComponentis aUActorComponent. The current target replicates OwnerOnly; candidates refresh on the authority and the local AutonomousProxy. C++ that searched forUPawnComponentwill miss it. - A predicted hit is not processed again when the replica arrives. Sharing a PredictionKey marks the replicated result as matched and skips a second LocalPredicted processor.
- Settings names match the other Generic plugins.
UGCS_CombatSystemSettingsis nowUGCS_DeveloperSettings. Plugin config isDefaultGenericCombatSystem.ini. - Poise sits with the GGA attribute menus.
AS_PoiseusesGGA|Attributes|Stamina. Names and defaults are unchanged; Blueprint menu grouping changes. - The old bullet subsystem is no longer the path forward. New code uses the component.
SpawnBulletonUGCS_BulletSubsystemis deprecated.
Removed
- Combat no longer keeps its own attachment map. Use Generic Game System socket relationship mapping instead of maintaining two rulesets.
- CollisionTraceInstance and the filter that depended on it are gone. Hits go through trace definitions plus
IGCS_TraceCauserInterfaceon bullets and weapons. - TaggedValues on attack results and UserSettings on attack definitions are gone. Use the combat payload plus
Extension/NativeExtension. PlayPredictableMontageForTargetand the replicated montage path are gone. There is no in-plugin replacement. Montage sync is a project responsibility.
Upgrade Notes
Source- and asset-breaking. C++, Blueprints, attack / bullet Data Assets, and any copied ini may need edits. Skipping the migration fails to compile, or ranged fire, attachments, and custom magnitudes stop working.
- Change C++ references from
UGCS_CombatSystemSettingstoUGCS_DeveloperSettings. If the host copiedBaseGenericCombatSystem.ini, confirm it now loadsDefaultGenericCombatSystem.ini. - Implement
IGCS_BulletInterfaceon custom bullets, and moveSpawnBullet/UGCS_BulletSubsystemcalls toRequestSpawnBullet. Do not apply Gameplay Effects on the predicted path. - For ranged fire, use
UGCS_AbilityTask_BulletTraceto read the AttackRequest. Do not treat an AnimNotifyState as a trace executor. - Replace attachment, TaggedValues, UserSettings, and TraceInstance calls.
PlayPredictableMontageForTargethas no plugin replacement. - Look up targeting as a
UActorComponent, not aUPawnComponent.
