> For the complete documentation index, see [llms.txt](https://pmc-docs.gitbook.io/pmc-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pmc-docs.gitbook.io/pmc-docs/replication-modes/client-authoritative.md).

# Client Authoritative

#### ⚠ Default Behavior & Blueprint Responsibility

> <mark style="color:$success;">PMC runs in</mark> <mark style="color:$success;"></mark><mark style="color:$success;">**Client Authoritative mode by default**</mark> <mark style="color:$success;"></mark><mark style="color:$success;">to provide smooth, low-latency physics-based movement.</mark>
>
> Since PMC is built entirely in Blueprint, replication behavior is highly configurable - but also requires proper understanding.
>
> <mark style="color:$warning;">**This page is required reading before using Client Authoritative mode.**</mark>\
> Misconfigured values can cause desync, jitter, or inconsistent multiplayer results.
>
> Use <mark style="color:blue;">Client Authoritative</mark> mode only in trusted environments (2–6 players, co-op / party games).\
> For competitive or untrusted scenarios, switch to <mark style="color:blue;">Server Authoritative</mark> or <mark style="color:blue;">external replication plugins</mark>.

<figure><img src="/files/wd7mOIMN46TgOZ8cc54U" alt=""><figcaption></figcaption></figure>

### <mark style="color:$success;">Recommended Network Settings (Client Authoritative)</mark>

PMC provides flexible smoothing and replication controls, but optimal values depend on player latency and packet loss.\
Use the following guidelines to achieve stable and responsive movement:

## <mark style="color:$warning;">Interpolation Speed</mark>

**Default:&#x20;**<mark style="color:$success;">**5 (Recommended)**</mark>

Provides the best overall stability for most multiplayer scenarios.

***

<mark style="color:orange;">**Net Send Rate**</mark>

> <mark style="color:orange;">Strongly Recommended:</mark> <mark style="color:blue;">32 Hz</mark>

<mark style="color:blue;">PMC is optimized around a 32 Hz send rate</mark>, offering an excellent balance between bandwidth usage and movement fidelity.

Higher values may slightly improve responsiveness but will increase <mark style="color:$danger;">network traffic and CPU cost.</mark><br>

***

## <mark style="color:$warning;">Transform Encoding</mark>

Controls how PMC packs and replicates transform data over the network.

PMC provides multiple encoding modes to balance precision and bandwidth depending on your project needs.

All modes always include an additional <mark style="color:blue;">**1-byte Flags field**</mark> (used internally for teleport, state changes, and sync control).

### <mark style="color:blue;">Raw (No Compression)</mark>

Sends the full transform without compression.

* Location: Vector (X, Y, Z floats)
* Rotation: Rotator (Yaw, Pitch, Roll floats)
* Scale: Vector (X, Y, Z floats)
* Flags: 1 byte

### <mark style="color:blue;">Compressed</mark>

Compresses location and rotation into byte-packed values while keeping scale uncompressed.

* Location: 6 bytes (X/Y/Z packed as Low + High bytes)
* Rotation: 3 bytes (Yaw / Pitch / Roll as UInt8)
* Scale: Vector (3 floats = 12 bytes)
* Flags: 1 byte

This mode reduces network payload size while still supporting dynamic scale changes.

### <mark style="color:blue;">Compressed (No Scale) - Default</mark>

Fully compressed transform replication without scale.

* Location: 6 bytes (X/Y/Z packed as Low + High bytes)
* Rotation: 3 bytes (Yaw / Pitch / Roll as UInt8)
* Scale: Not replicated
* Flags: 1 byte

Total transform payload: <mark style="color:blue;">**10 bytes**</mark>**&#x20;(excluding packet overhead)**\
\ <mark style="color:blue;">Compressed (No Scale)</mark> reduces transform payload to \~10 bytes (+1-byte flags) and can lower bandwidth by \~30–40% in real gameplay tests.

### <mark style="color:$warning;">Position Range</mark>

Since location is encoded using signed 16-bit integers, valid range per axis is:

```
-32767 to +32767
```

Applies to [<mark style="color:blue;">**Compressed**</mark>](#compressed) and [<mark style="color:blue;">**Compressed (No Scale)**</mark>](#compressed-no-scale-default) modes only.

Raw replication uses float values and has no such limitation.

***

## <mark style="color:$warning;">**⚠**</mark> <mark style="color:$warning;"></mark><mark style="color:$warning;">Frame Rate Limiting & Smoothing (Important)</mark>

PMC’s visual smoothing system runs inside *<mark style="color:blue;">**Event Tick**</mark>*, meaning smoothing behavior is directly affected by the game’s frame rate.

For this reason, **limiting the maximum FPS is** <mark style="color:orange;">strongly recommended</mark> to reduce unnecessary CPU overhead on high-refresh systems.

Instead of forcing an engine-level hard lock, we recommend providing **user-selectable FPS limits inside your game settings**:

**Recommended options:**

* **60 FPS**
* <mark style="color:$success;">**120 FPS**</mark>**&#x20;(Default)**
* **240 FPS**

This allows players to choose based on their hardware while keeping Tick frequency under control.

***

#### ❌ <mark style="color:$danger;">Do NOT use</mark> “Use Fixed Frame Rate”

**Never enable** Unreal Engine’s **Use Fixed Frame Rate** option.

This setting forces a fixed Delta Time and can cause <mark style="color:orange;">unexpected behavior</mark> **in** <mark style="color:orange;">physics simulation</mark>**,** <mark style="color:orange;">networking</mark>**, and** <mark style="color:orange;">gameplay logic</mark>, especially in multiplayer scenarios.

***

#### ✅ <mark style="color:$success;">Best Practice</mark>

* <mark style="color:$success;">Keep</mark> <mark style="color:$success;"></mark><mark style="color:$success;">**Use Fixed Frame Rate disabled**</mark>
* Allow players to select their preferred FPS cap (via <mark style="color:blue;">`t.MaxFPS`</mark>)
* Let PMC handle smoothing naturally through <mark style="color:blue;">Tick</mark>
* Use FPS limiting only to control CPU cost and Tick frequency

<mark style="color:green;">This approach preserves correct physics behavior while preventing excessive Tick updates on high-FPS systems.</mark>
