Global System & Game Phases

UCrimsonGlobalAbilitySystem

A UWorldSubsystem tracking all registered UCrimsonAbilitySystemComponent instances. Apply abilities or effects to every ASC at once - global buffs, weather, round-start grants:

cpp
auto* Gas = GetWorld()->GetSubsystem<UCrimsonGlobalAbilitySystem>();
Gas->ApplyEffectToAll(UGE_GlobalSlowDebuff::StaticClass());
Gas->RemoveEffectFromAll(UGE_GlobalSlowDebuff::StaticClass());

The ASC registers itself in InitAbilityActorInfo and unregisters in EndPlay - no manual registration needed.


UCrimsonGamePhaseSubsystem

A server-authoritative UWorldSubsystem managing game-phase flow using GAS abilities as phase tokens. Each active UCrimsonGamePhaseAbility is a running phase; starting a new phase in the same tag hierarchy ends the previous one.

cpp
auto* Phases = GetWorld()->GetSubsystem<UCrimsonGamePhaseSubsystem>();
Phases->StartPhase(UCrimsonGamePhaseAbility_WarmUp::StaticClass(),
FCrimsonGamePhaseDelegate::CreateUObject(this, &AGameMode::OnWarmUpEnded));
Phases->WhenPhaseStartsOrIsActive(TAG_Phase_InProgress,
EPhaseTagMatchType::PartialMatch,
FCrimsonGamePhaseTagDelegate::CreateUObject(this, &AGameMode::OnPhaseInProgress));
bool bInProgress = Phases->IsPhaseActive(TAG_Phase_InProgress);
Server-authoritative
UCrimsonGamePhaseSubsystem exists in Game / PIE worlds; every phase-changing operation is server-authority (BlueprintAuthorityOnly), and phase transitions replicate through normal GAS ability replication.