QA Team Guide

Project: Friendly Steps
Networking layer: Mirror

Build of game demo lacted at: Friendly Steps Branch "qa-demo" Password: 91838193189183846245

IngameDebugConsole Cheat Commands

Important usage notes

Command list

Command Arguments What it does Requirements / Notes Example
checkpoint.unlock checkpointIndex (int) Enables checkpoint cheat mode and stores target checkpoint index for reset teleport. Must be connected and running on server/host. checkpointIndex >= 0. After enabling, use normal reset action to teleport players to that checkpoint. checkpoint.unlock 3
checkpoint.disable none Disables checkpoint cheat mode and returns reset behavior to normal progress-based teleport. Must be connected and running on server/host. checkpoint.disable
checkpoint.status none Prints whether checkpoint cheat mode is enabled and current checkpoint index. Must be connected and running on server/host. checkpoint.status
consumable.list none Prints all consumable prefab names available for spawning. Server-only, must be connected. Use this before consumable.spawn to get valid names. consumable.list
consumable.spawn prefabName (string) Spawns the specified consumable network prefab near local player. Server-only, must be connected. prefabName must exactly match a registered consumable prefab name. consumable.spawn <name-from-consumable.list>
skin.set hat (int), shirt (int), pants (int) Sets local player skin element indices. Applies only to local player skin object. Each index must be within valid range for corresponding element type. skin.set 1 4 2
skin.color colorIndex (int) Sets local player body/skin color by index. Applies only to local player. colorIndex must be in available color range (0..N-1). Change is cheat/runtime only and is not saved. skin.color 5

Suggested QA flow for cheat commands

  1. Join session as host when testing server-only commands.
  2. Run consumable.list and then spawn several entries with consumable.spawn <name>.
  3. Validate reset behavior with checkpoint.unlock <index>, then trigger player reset, then checkpoint.status.
  4. Revert with checkpoint.disable.
  5. Validate cosmetic commands locally via skin.set and skin.color.

NetworkProfiler


Note to the QA team

We expect you to use this tool when simulating game network disruptions, such as through the mass use of abilities, artificial net lags etc. Thanks to the profiler data, it will be much easier for us to identify exactly where network overhead is causing issues in the gameplay.


What is NetworkProfiler?

NetworkProfiler is a runtime diagnostics tool that tracks all Mirror network traffic on a per-frame basis. It captures bytes sent/received, RPC calls, entity lifecycle messages (spawn/destroy/owner change), SyncVar and SyncObject updates, and ping — split across Reliable and Unreliable transport channels. Every frame's data is stored in a rolling window of up to 500 frames and optionally written to disk as a .nprof binary file for post-session analysis.

It is intended to help developers and testers identify bandwidth spikes, chatty entities, and unexpected message patterns during networked gameplay.


How to Enable It

In a Build (standalone/server)

Pass the launch argument when starting the executable:

FriendlySteps.exe -enableNetworkProfiler

Without this argument the profiler initialises but collects no data, so there is no runtime overhead in production builds that don't need it.


Session Recording

The embedded ProfilerSessionRecorder automatically writes data to disk while a network session is active.

Output location

Environment Path
Editor <ProjectRoot>/ProfilerData/
Standalone build <ExecutableFolder>/ProfilerData/

File naming

<role>_<yyyy-MM-dd_HH-mm-ss_fff>_seg-<NNN>.nprof

What Data Is Collected

Transport-level (bytes)

Recorded for every frame on both Reliable and Unreliable channels:

Field Description
SentBytesByClient Total bytes the client sent this frame
SentBytesByServer Bytes sent per connectionId (server-side)
ReceivedBytesByClient Total bytes the client received this frame
ReceivedBytesByServer Bytes received per connectionId (server-side)
TotalBytesSent / TotalBytesReceived Aggregated totals across all connections

RPC / Command calls (Reliable channel)

Field Description
ClientRpcSentByMethod Per-method count + payload bytes for ClientRpc calls
TargetRpcSentByMethod Same for TargetRpc calls
CommandSentByMethod Same for Command (client→server) calls

Each entry stores (callCount, totalBytes) keyed by method name.

Entity lifecycle & sync (Reliable channel)

Per networkEntityId, the profiler records:

Ping

Captured at frame creation time from Mirror.NetworkTime.rtt * 1000 (milliseconds).