How-To: Debug at Runtime (Dev Tools)
Goal: inspect and drive teams during Play-in-Editor - read every agent's tags, see who's friendly/hostile to whom, edit teams server-side, and confirm state replicates to clients - without building any UI.
Prerequisites
You're in PIE and at least one actor has a
UCrimsonTeamAgentComponent. The tool is editor-only and inert outside PIE.1. Open the window
Open it from Tools -> Crimson Teams -> Teams Dev Tools, or type `Crimson.Teams.DevTools` in the console. It can stay open across Play sessions.
Verify
Before Play it shows a "PIE not running" gate; hit Play and it populates.
Sections are dock tabs
Every titled section of a tab is a real dock tab: drag one to reorder it, drop it onto another to stack them as tabs, drag it to a window edge to split them side by side, or drag the divider between two to resize. Drag a section out to tear it off into its own window, or right-click it for Dock to Sidebar - sections that are reference-only start in the sidebar. The arrangement is saved per window and comes back after you switch tabs, close the window, or restart the editor. Reset layout (top of the window) restores the default arrangement.
2. Pick a net context
The Net Context dropdown at the top selects which world you're viewing - the Server or any Client - so you can verify each side independently. Every tab reflects the selected context.
Edits are server-authoritative
Team state has no client->server RPC, so the Agents tab's Join / Leave / +Host / -Host buttons enable only on authoritative agents. Switch the Net Context to Server to edit, then watch the change reach clients in the Replication tab. (On a client context the buttons are disabled - that's expected, not a bug.)
3. The tabs
| Tab | What it does |
|---|---|
| Agents | Every team agent in the world with its team/hostile tags + authority badge. Type a tag, then Join / Leave / +Host / -Host any authoritative agent |
| Attitude Matrix | An NxN grid of GetTeamAttitudeBetween for every agent pair, color-coded F (friendly) / N (neutral) / H (hostile) - your whole faction graph at a glance |
| Teams | The subsystem registry: each declared team, its display asset, and live member counts |
| Replication | Server-vs-client compare of every agent's tags (players matched by PlayerId, others by name), listing only differences, plus a desync log |
| Event Log | A live, coalesced feed of team/hostile tag changes in the selected context |
| Parties | Every party actor in the context (roster, leader, online state) and a per-player table of party id, pending / sent invites and leader suggestions. In the Server context, pick an actor and a target and press Invite / Suggest / Accept Latest Invite / Leave / Kick / Promote; results are logged |
4. Verify dynamic re-aggro in multiplayer
This is the fastest way to confirm the dynamic-attitude system end to end:
- Run PIE as Client with 2+ players (and an AI that perceives by affiliation).
- In the Agents tab, with the Net Context on Server, add or remove a hostility tag on a player.
- Watch the Attitude Matrix flip that pairing, the Event Log record the change, and the Replication tab stay green as it reaches the client.
- Confirm a nearby AI re-evaluates (aggros or de-aggros) without the target leaving and re-entering its perception.
Verify
The Replication tab reports
0 mismatches once the change settles, and the desync log briefly logs then resolves.Console cheats (quick alternative)
| Command | Effect | Authority |
|---|---|---|
CycleTeam | Move the local player to the next registered team (wraps) | server / host |
SetTeam <index> | Move the local player to the team at that registry index | server / host |
ListTeams | Print all registered team tags | any |
PartyInvite <name> | Invite the named player into the local player's party (created on demand) | |
PartySuggest <name> | Ask the leader to invite the named player | |
PartyAccept / PartyDecline | Answer the most recent pending invite | |
PartyLeave | Leave the party | |
PartyKick <name> / PartyPromote <name> | Leader only | |
ListParties | Print the parties visible in this world (a client sees only its own) |
See also
- Concept: Dynamic Attitude & Multiplayer - the server-authoritative model the tool drives
- How-To: Query Attitude & Gate Damage - the same attitude from your own code