Quick Start
By the end of this page you'll have two actors on opposing teams that correctly read as enemies - the foundation everything else builds on. This needs only the agent component and some tags; declared teams, player auto-assignment, and cosmetics are separate How-To pages.
CrimsonTeams enabled, and a couple of team tags to use (e.g. Team.Red, Team.Blue).Team.Red and Team.Blue (or edit Config/DefaultGameplayTags.ini directly). Any tag strings work.1. Enable the plugin
Open Edit -> Plugins, type Crimson, tick CrimsonTeams, and restart the editor. For a Blueprint project that's the whole install.
2. Make two actors team agents
Add a Crimson Team Agent Component to each actor (prefer the Player State for players - it survives respawns). Give one Team.Red and the other Team.Blue, and mark each as hostile to the other.
Open the actor Blueprint (the Player State for players), click + Add in the Components panel and pick Crimson Team Agent - it is under Teams in the picker. Select the new component and, in its Details under Teams, fill the two tag containers: Team Tags = Team.Red, Hostile To Tags = Team.Blue. Do the same on the second actor with the tags swapped. Both are plain editable defaults, so no graph nodes are needed for a static setup.
JoinTeam, AddHostileTags, ...) are BlueprintAuthorityOnly and run only where HasAuthority() is true. There is no client->server RPC: clients receive the result by replication. A client-side call is a silent no-op.Get Team Tags).3. Check attitude
Ask the statics whether two actors are friend or foe - it resolves the component on an actor, its pawn, or its player state automatically.
Right-click in any graph and search Get Team Attitude Between (it sits under Teams). Wire Source = the asking actor and Target = the other actor; the Return Value is Friendly, Neutral, or Hostile. For a straight yes/no, use Should Cause Damage To Target (Source, Target) -> Branch instead - it returns a bool that is false only when the two are Friendly. Neither node needs a target object: both are static library nodes that resolve the team component on each actor, its pawn, or its player state for you.
Team.Red vs Team.Blue returns Hostile; two Team.Red actors return Friendly; an actor with no team returns Neutral.