reznok/gmcabilitysystem/gmas-debug
Claude Code and agent skill by reznok/gmcabilitysystem
- community
Checking that the SKILL.md file is still in the repository.
Use when GMAS or GMC gameplay misbehaves - desync, double activation, late or missing effects, attributes stuck at zero, replay oddities, crashes in the ability component; covers logs, console variables, the debugger and a symptom table.
Install
npx vskill@latest install reznok/gmcabilitysystem/gmas-debugSKILL.md
Behavior below was verified against GMC 2.3.x and GMAS 1.4. Confirm signatures in this project's own headers (paths are relative to each plugin's root, e.g.Source/GMCCore/Public/Components/GMCReplicationComponent.h); GMC's source is not part of this plugin.
A GMAS fault is almost always one of three things: the two sides of a move disagreed (a correction and a replay), an operation did not reach the move it was meant for (dropped or forced), or something ran on a replayed or combined move that should have run once. This skill lists the places where GMAS and GMC show that, a procedure that separates the three, how a healthy activation reads in the log, and a symptom table: references/symptoms.md. The rules the symptoms violate live in gmas:gmas-rules and gmas:gmc-prediction; the networked test setup in gmas:gmas-testing. GMAS paths below are relative to Source/GMCAbilitySystem/.
Surfaces
Log categories. Raise one with Log <Category> Verbose in the console (VeryVerbose for the per-move lines), -LogCmds="LogGMCAbilitySystem Verbose" on the command line, or [Core.Log] in DefaultEngine.ini. All default to Log.
| Category | Declared in | Covers | |
|---|---|---|---|
LogGMCAbilitySystem | Public/GMCAbilitySystem.h | everything the ability component, abilities, effects, tasks and the bound queue log; the trace tags below. 1.4.1+: the only category GMAS writes to | |
LogGMCReplication | Source/GMCCore/Public/Utility/GMCLogCategory.h | GMC moves, corrections, replays, smoothing, the world-time notice; on 1.4.0 also GMAS's task heartbeat timeout | |
LogGMCMovement, LogGMCPawn, LogGMCController | same header | the movement components (VeryVerbose traces every executed move), pawn lifetime, controllers | |
LogTemp | engine | 1.4.0 only: server-side mirrors of [AbilityCut], [TaskDiag], [BatchOp], [TaskHeartbeat] and one [ServerProcessOperation] rejection. 1.4.1+ writes nothing here |
Trace tags (1.4+). Bracketed prefixes in LogGMCAbilitySystem lines (Private/Components/GMCAbilityComponent.cpp, Private/Ability/GMCAbility.cpp, Private/Ability/Tasks/GMCAbilityTaskBase.cpp). op is the operation id: negative for client-made operations, positive for server-made ones; move_ts is the move timestamp, identical on both machines for the same move.
| Tag | Level | Traces | |
|---|---|---|---|
[AckTrace:Client:GenTick], [AckTrace:Server:GenTick] | Verbose | the operation slot read at the start of each prediction tick: on the owner what it is about to process, on the server what the client's move carried | |
[AckTrace:Client:WroteAck], [AckTrace:Client:BatchEnd], [AckTrace:Client:BatchAckWritten] | Verbose | the owner acknowledging a server operation (single, or a batch with the acknowledged ids) | |
[AckTrace:Server:ProcessAck] | Verbose | the server receiving an acknowledgement: has_payload, has_grace must both be 1 for it to apply | |
[ImpulseTrace] | Verbose | every AddImpulse operation applied, on both sides: auth, replay, move_ts, velocity before and after | |
[ReconnectSnapshot] | Verbose | an owning client rehydrating active effects after a reconnect | |
[TaskDiag] | Verbose for benign end races; Warning for task-id or ability-id divergence; Error for a task registered during a replay | task payload and heartbeat routing (gmas:gmas-task) | |
[AbilityCut] | Error on the client confirm timeout; Warning for an ability ending with unfinished tasks or cancelled by the server | abnormal ability ends, with a diagnostics dump (below) | |
[ReplayActivation] | Warning | an activation whose first run on this side happened inside a replay | |
[AbilityGate] | Warning | a single-instance refusal whose blocker is older than 2 s | |
[EffectLeak] | Warning | a declared effect id that no longer resolved at ability end (replay renumbering); removed by tag instead | |
[BatchOp] | Error | a batched server operation whose payload is missing on this side | |
[ReplayBurst] | Warning | the replay-burst detector tripped (settings below) | |
[ServerProcessOperation] | Warning | the server rejecting a client-auth ability or effect | |
[TaskHeartbeat] | Error (LogGMCAbilitySystem on 1.4.1+, LogTemp on 1.4.0) | the server watchdog cancelling (1.4.1+; ending on 1.4.0) an ability after 3 s without heartbeats | |
[EffectID] <Generator>: (1.4.1+; <Generator> = Predicted, ServerAuth or ClientAuth) | Error | effect-id generation: ids are ActionTimer × 100 offset into the generator's range. ActionTimer is 0: no id, the apply fails (a smoothed listen-server pawn, or an apply before the first move). outside the id range ... ids wrap: the clock left the range (a session past about 83 days, or a negative clock) and ids wrap inside it from here on, reported once per component. every id ... is live or reserved: the range is exhausted. VeryVerbose: every id generated. On 1.4.0 the same faults were [ApplyAbilityEffect] / [GetNextAvailable*EffectID] lines, and the range overflow was Fatal | |
[OperationLost] (1.4.1+) | Error | the server read a client operation (negative id) whose payload it never cached: not applied. Once per id | |
[RemoveEffectByIdSafe] | Warning | a client-auth removal with an id outside the client-auth range, rejected | |
[ProcessOp], [ServerOpAccept], [ServerOpDrop], [ApplyTrace] | Log (1.4.1+; Warning on 1.4.0), only while GMAS.LogApplyTrace is on (on 1.4.0 one [ServerOpDrop] Error, a failed base-struct cast, was always on) | every activation and effect operation through ProcessOperation, each client operation the server accepted or dropped (with the reason), and a C++ plus script call stack per effect instance created | |
[AttrBindMap] (1.4.1+; [BLMoveEnqueue] on 1.4.0) | Log | the output of GMAS.DumpAttrBindMap | |
[RPC] | VeryVerbose | the client receiving the server's confirm, end-ability and end-effect RPCs |
Untagged lines worth knowing, same category: RPCOnServerOperationAdded: N (Verbose, the owner received a server operation), Forcing Operation On Server (Verbose, the grace expired and the server applied the operation outside the move; one frame after the call for AI and unpossessed pawns), Activation operation N already consumed on this side (redelivery/replay) — skipped (Verbose, a replay re-delivering an activation that already ran), Ability Activation for Ability.Dash Stopped By Cooldown / ... Stopped By Cost (1.4.1+) / ... Failing PreExecution check / ... Blocked By Other Ability / ... Stopped by an OnAbilityActivated listener (1.4.1+) / ... Stopped By Tags (Verbose, a refused activation; Stopped (Already Instanced) at VeryVerbose), Input tag not granted: X / Input tag not in the ability map: X (Warning, 1.4.1+; Ability Tag Not Granted / Ability Tag Not Found before), Effect X Not Confirmed By Server (ID: N), Removing... (Error), Dropped client operation N: payload expired after M moves (Warning), No Abilities Granted for InputTag (Error), Client attempted to apply server-auth event (Warning), Client operation type X is not allowed by server as client input (Error), X is deprecated ... Reported once. (Warning, 1.4.1+: a deprecated function was called, once per component). GMAS <version> loaded (Log, 1.4.1+) is the module's version line; on 1.4.0 it was the [GMAS-LIVE-CHECK] Module loaded banner at Warning.
Console (1.4+, `Private/Components/GMCAbilityComponent.cpp`, not in Shipping builds).
| Name | Default | Does | |
|---|---|---|---|
GMAS.LogApplyTrace (bool) | false | enables the four gated tags above (at Log on 1.4.1+). The [ApplyTrace] stack dump fires for every effect instance created on this machine whose class name contains the filter | |
GMAS.ApplyTraceFilter (string) | empty (1.4.1+; 1.4.0 shipped a leftover non-empty default, so set it explicitly there) | class-name substring for [ApplyTrace] and the effect half of [ProcessOp]; empty traces every effect, so set it to your class (GMAS.ApplyTraceFilter MyEffect_Burn) to isolate one | |
GMAS.DumpAttrBindMap (command; BL.GMAS.DumpAttrBindMap on 1.4.0, a deprecated alias until 1.5) | – | logs [AttrBindMap] lines: for the local player's pawn, each bound attribute's float binding index (Float[i] = Value, Float[i+1] = RawValue) with its tag and combine mode. GMC's own sync-data dumps (gmc.LogClientReplay, gmc.LogClientMoveTrace) list bound values by type and index, so this is how a deviating float becomes an attribute name |
GMC console variables. Full table, with the GMC .cpp files that define them: gmc-diagnostics.md. The five that matter most for GMAS work:
| Variable | Reach for it when | |
|---|---|---|
gmc.ShowNetRole | anything differs per machine: label every pawn with its role on this machine first | |
gmc.ShowClientCorrections | the owner snaps, an ability or effect misbehaves after a correction: marks each correction (predicted red, server green) | |
gmc.LogClientReplay | a correction needs a name: dumps the client state, the server state and the replayed history, every bound value by type and index | |
gmc.StatNetMovementValues | the live movement values of pawns with a chosen role (1 authority, 2 autonomous, 3 simulated) on screen | |
gmc.LogClientMoveTrace | moves seem not to arrive: follows individual moves around the round trip |
Gameplay Debugger. The runtime module registers category GMCAbilitySystem (Private/GMCAbilitySystem.cpp, slot 9, enabled in game and simulate). Open the debugger with its activation key (' by default, an engine setting) and enable the category. For the debugger's selected actor it prints the server's data pack ([server]) and the local component ([client]) for granted abilities, active abilities, bound active tags, client-auth tags (1.4+), attributes, active effects (1.4.1+: one ToString() line each, with its state and the client's answer for its id: Pending, Validated, Timeout, or Authority on the server; 1.4.0 never showed the answer) and cached operation payloads (1.4+); a row whose count differs between the two is marked [INCOHERENCY] in red. 1.4.0 also had an Active Effects Data row that printed UNDER CONSTRUCTION; 1.4.1 removed it. On a listen server the server rows are read from the movement component's server state, so the host's own pawn shows its authoritative view.
Project Settings → GMC Ability System (1.4+), stored in DefaultGame.ini:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingClaude/gmas/skills/gmas-debug/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/reznok/gmcabilitysystem/gmas-debug)