Multiplayer Networking Architecture — UE5 Modular Game Framework
Version: 1.0 | Generated: 2026-05-19 | Status: Design Phase
This document defines the complete networking architecture for extending the single-player Blueprint-only framework to support multiplayer. All 135 blueprint specs are being updated with replication stubs, RPC definitions, and server-authoritative patterns.
1. Core Networking Principles
1.1 Server Authority Model
The framework uses a server-authoritative model:
- Server: Owns all game state. Validates every state-changing operation. Runs AI behavior trees. Calculates damage.
- Client: Renders locally. Predicts actions for responsiveness. Corrects when server state differs from prediction.
- Listen Server: One player is both server and client. Use
HasAuthority() to branch logic.
1.2 Authority Gating Pattern
Every mutator function MUST check authority before modifying replicated state:
1.3 RepNotify Pattern
All replicated variables use RepNotify with an OnRep_ function. The OnRep_ function fires the same event dispatchers that single-player code already binds to:
This means UI widgets, audio, and effects need zero changes for multiplayer — they already bind to dispatchers.
1.4 RPC Types Used
| RPC Type |
UE5 Node |
Use Case |
Server |
Run on Server, Reliable |
Client requests state change (fire weapon, use item, interact) |
Multicast |
Multicast, Reliable |
Server broadcasts cosmetic event to all (explosion FX, scare event) |
Client |
Run on Owning Client, Reliable |
Server sends client-specific message (inventory full, error toast) |
2. Variable Replication Strategy
2.1 What Gets Replicated
| Category |
Variables |
Condition |
| Game State |
Chapter, Phase, Objectives, PlayTime, EncounterActive |
Replicated Using OnRep_* on GS_CoreGameState |
| Player State |
Health, Stamina, Stress, Posture, MovementMode, HideState |
RepNotify on player components |
| World State |
Door state, Container slots, Pickup availability, Display mode |
RepNotify on world actors |
| Inventory |
Slots array, TotalWeight, OverEncumbered, EquippedItems |
RepNotify on inventory components |
| AI State |
Position, Rotation, AlertLevel, CurrentAction, Health |
Standard Actor replication + custom |
| Narrative |
ActiveObjectives, NarrativeFlags, DialogueState |
Through GS_CoreGameState |
| Adaptive |
AtmosphereTier, TensionLevel, ActiveScareEvent |
Through GS_CoreGameState or Adaptive Director |
2.2 What Stays Local (Never Replicated)
| Category |
Reason |
| All Widgets (WBP_*) |
Rendered per-client; bind to replicated dispatchers |
| Camera (FOV blending, shake) |
Local experience; only state enum syncs |
| Audio playback |
Local; gameplay parameters sync via SS_AudioManager |
| Embodiment (arms mesh, IK) |
First-person rendering is per-client |
| Debug/Analytics/Cheats |
Local development tools |
| Static Data Assets (DA_*) |
Read-only config; loaded identically on all clients |
| Tutorial system |
Per-player progression |
3. System-by-System Authority Map
3.1 Foundation Layer (01-core)
| System |
Authority |
Replication |
GI_GameFramework |
Server sets GamePhase; clients read |
Dispatchers broadcast to all |
GM_CoreGameMode |
Server-only; spawns players, routes death |
Extends replicated GameMode |
GS_CoreGameState |
Server sets all state |
Full replication — 5 vars with OnRep |
DA_GameTagRegistry |
Read-only on all |
Identical on all clients (ini-based) |
FL_GameUtilities |
Static; no state |
No replication needed |
I_InterfaceLibrary |
Contracts; no state |
No replication needed |
DA_ItemData |
Read-only config |
Identical on all clients |
3.2 Player Layer (02-player)
| System |
Mutators |
Client Prediction |
BPC_HealthSystem |
Server-authoritative ApplyDamage, ApplyHealing, KillInstant |
Client predicts damage flash; server corrects health value |
BPC_StaminaSystem |
Server-authoritative DrainStamina, StartContinuousDrain |
Client predicts sprint animation; server corrects if exhausted |
BPC_StressSystem |
Server-authoritative AddStress, AddStressSource |
Client plays local effects per tier; server is canonical |
BPC_MovementStateSystem |
Server-authoritative SetMovementMode, SetPosture |
CharacterMovementComponent handles this natively |
BPC_HidingSystem |
Server-authoritative EnterHideSpot, ExitHideSpot |
Client requests enter; server validates slot availability |
BPC_EmbodimentSystem |
Local rendering only |
Only visibility/overlay state syncs |
BPC_CameraStateLayer |
Local FOV/offset/shake |
Only state enum syncs |
BPC_PlayerMetricsTracker |
Server accumulates |
Snapshot replicates for scoreboards |
3.3 Interaction Layer (03-interaction)
| System |
Authority |
Client Request |
BPC_InteractionDetector |
Clients run trace locally; target synced |
Server validates interaction request |
BP_DoorActor |
Server-authoritative state machine |
Client calls Server_Interact → server validates → OnRep plays anim |
BP_PuzzleDeviceActor |
Server-authoritative |
Client calls Server_TrySolution |
BPC_ContextualTraversalSystem |
Client-predicted movement |
Server validates traversal target |
BPC_PhysicsDragSystem |
Client-predicted physics |
Server periodically corrects position |
BPC_UsableWorldObjectSystem |
Server-authoritative toggle/adjust |
Client calls Server_Use |
3.4 Inventory Layer (04-inventory)
| System |
Authority |
Anti-Cheat |
BPC_InventorySystem |
Server-authoritative add/remove/use/drop |
Server validates slot space, weight, stack limits |
BPC_ContainerInventory |
Server-authoritative open/loot/transfer |
Server validates distance, lock state, slot availability |
BP_ItemPickup |
Server-authoritative pickup |
Server validates inventory space before removing pickup |
BPC_EquipmentSlotSystem |
Server-authoritative equip/unequip |
Server validates slot type compatibility |
BPC_ConsumableSystem |
Server-authoritative use |
Server validates item exists, cooldown, applies effect |
BPC_ItemCombineSystem |
Server-authoritative combine |
Server validates recipe from DA_ItemData |
3.5 Save/Load Layer (05-saveload)
| System |
Authority |
Notes |
SS_SaveManager |
Server triggers save/load |
All clients receive load state via GS_CoreGameState |
BP_Checkpoint |
Server validates activation |
Replicates active checkpoint to all |
BPC_DeathHandlingSystem |
Server determines death outcome |
All clients see death animation via multicast |
BPC_PlayerRespawnSystem |
Server executes respawn |
Client receives respawn state via replication |
BPC_PersistentCorpseSystem |
Server spawns corpse |
Corpse replicated to all |
BPC_RunHistoryTracker |
Server tracks history |
Replicates for scoreboard |
3.6 UI Layer (06-ui)
| System |
Pattern |
| All WBP_* Widgets |
Local only. Bind to replicated dispatchers. Zero networking code in widgets. |
SS_UIManager |
Local per-client. Menu stack is per-player. |
3.7 Narrative Layer (07-narrative)
| System |
Authority |
Replication |
BPC_NarrativeStateSystem |
Server sets flags |
Flags sync via GS_CoreGameState or replicated array |
BPC_ObjectiveSystem |
Server activates/completes |
Active objectives replicated via GS_CoreGameState |
BPC_DialoguePlaybackSystem |
Server sequences dialogue |
Dialogue line index replicated; clients play audio locally |
BPC_DialogueChoiceSystem |
Client selects choice → Server processes |
Server validates choice availability against flags |
BPC_BranchingConsequenceSystem |
Server executes consequences |
Results sync to all |
BPC_CutsceneBridge |
Server triggers cutscene |
All clients enter cutscene via multicast |
3.8 Weapons Layer (08-weapons)
| System |
Authority |
Client Prediction |
BP_WeaponBase |
Server-authoritative state machine |
Client predicts fire animation/muzzle flash; server validates |
BPC_AmmoComponent |
Server-authoritative ammo |
Client predicts ammo count; server corrects via RepNotify |
BPC_FirearmSystem |
Server performs trace/damage calc |
Client predicts tracers; server hit result is canonical |
BPC_MeleeSystem |
Server validates hit detection |
Client predicts swing animation |
BPC_ReloadSystem |
Server validates reload |
Client predicts reload animation; server validates ammo state |
BPC_RecoilSystem |
Local only |
Recoil is cosmetic; handled per-client |
BPC_DamageReceptionSystem |
Server calculates damage |
HealthSystem is authoritative; damage reactions multicast |
BPC_HitReactionSystem |
Server triggers reaction |
Animation multicast to all |
BPC_CombatFeedbackComponent |
Local only |
Hit markers, kill confirm are per-client |
BPC_ShieldDefenseSystem |
Server validates block/parry |
Shield state replicated; client predicts visual |
3.9 AI Layer (09-ai)
| System |
Authority |
Notes |
AI_BaseAgentController |
Server only |
Behavior trees run on server; position/anim replicate natively |
BP_EnemyBase |
Server-authoritative health/state |
Standard Actor replication |
BPC_AlertSystem |
Server-authoritative alert state |
Replicates for awareness UI on clients |
BPC_AIStateMachine |
Server-authoritative |
State changes replicate |
BPC_AIPerceptionSystem |
Server runs perception |
Detection events replicate to clients for awareness indicators |
BPC_AIMemorySystem |
Server stores memory |
LastKnownLocation replicates for client UI |
BPC_BehaviourVariantSelector |
Server selects at spawn |
Variant choice replicates |
BP_PatrolPath |
Read-only on all |
Spline data is static; identical on all clients |
3.10 Adaptive Layer (10-adaptive)
| System |
Authority |
Notes |
BPC_AdaptiveEnvironmentDirector |
Server coordinates |
Atmosphere state replicates |
BPC_AtmosphereStateController |
Server sets tier |
Clients play local audio/lighting per replicated tier |
BPC_DifficultyManager |
Server adjusts difficulty |
Difficulty params replicate |
BPC_FearSystem |
Server-authoritative fear states |
AI fear behavior runs on server |
BPC_ScareEventSystem |
Server triggers scare |
Multicast plays scare FX on all clients |
BPC_RareEventSystem |
Server selects event |
Multicast plays event on all |
BPC_LightEventController |
Server triggers |
Replicated for synchronized light events |
BPC_MemoryDriftSystem |
Local only |
Hallucinations are per-player experience |
BPC_PacingDirector |
Server controls pacing |
Intensity band replicates |
BPC_PlaystyleClassifier |
Server classifies |
Classification replicates |
BPC_PerformanceScaler |
Local only |
Per-client hardware adaptation |
SS_AudioManager |
Local playback |
Only gameplay parameters (heart rate, tension) sync from server |
BP_RoomAudioZone |
Local only |
Each client applies room acoustics locally based on their position |
4. Client Prediction Strategy
4.1 Prediction Categories
| Category |
Strategy |
Examples |
| Cosmetic Only |
Client plays immediately, no correction needed |
Muzzle flash, recoil, footstep sounds, camera shake |
| Predicted with Correction |
Client plays, server corrects if prediction wrong |
Health bar, ammo count, stamina bar |
| Server Only |
Client shows nothing until server confirms |
Inventory changes, equipment changes, quest completion |
| Local Input with Server Validation |
Client processes input locally, server validates result |
Movement (handled by CharacterMovementComponent), interaction |
4.2 Weapon Fire Prediction Flow
4.3 Interaction Prediction Flow
5. RPC Naming Convention
| Prefix |
Direction |
Example |
Server_ |
Client → Server |
Server_Interact, Server_StartFire, Server_UseItem |
Multicast_ |
Server → All Clients |
Multicast_PlayExplosionFX, Multicast_TriggerScare |
Client_ |
Server → Specific Client |
Client_ShowErrorToast, Client_OpenInventory |
All RPCs are Reliable unless marked otherwise. Unreliable RPCs used only for frequent cosmetic updates (muzzle flash on full-auto).
6. Anti-Cheat Considerations
6.1 Server-Side Validation Required For:
- Health changes (validate damage source, range, fire rate)
- Inventory modifications (validate slot space, weight, stack limits)
- Ammo consumption (validate weapon fire rate, magazine capacity)
- Movement speed (validate against MovementSettings, no speed hacks)
- Interaction range (validate distance to target)
- Item combination (validate recipe exists in DA_ItemData)
6.2 Trust Model
- Trust nothing from clients. Every state-changing RPC must re-validate conditions server-side.
- Clients can predict, servers correct. Prediction improves feel; RepNotify ensures correctness.
- Cosmetic RPCs are fire-and-forget. Muzzle flashes, footstep sounds don't need validation.
7. Network Bandwidth Budget
7.1 High Priority (Every Tick / On Change)
- Player position/rotation (handled by CharacterMovementComponent)
- Current health (only on change)
7.2 Medium Priority (On Change)
- Weapon state, ammo count
- Door state, container state
- AI alert level
- Active objectives
7.3 Low Priority (On Change, Throttled)
- Stress level, stamina (throttled to ~4Hz)
- Atmosphere tier
- Narrative flags
- Collectible count
7.4 Never Replicated
7.5 Replication Condition Optimization
| Condition |
Use Case |
COND_OwnerOnly |
Inventory contents (only owning player needs full inventory) |
COND_SkipOwner |
Cosmetic effects (owner plays their own locally) |
COND_InitialOnly |
Spawn transform, initial state |
COND_Custom |
Distance-based: only replicate to nearby players |
8. Implementation Progress Tracking
| Phase |
Systems |
Status |
| 1: Foundation |
01-core (7 systems) |
Blueprint specs updated |
| 2: Player State |
02-player (8 systems) |
Blueprint specs updated |
| 3: Interaction |
03-interaction (8 systems) |
Blueprint specs updated |
| 4: Inventory |
04-inventory (11 systems) |
Blueprint specs updated |
| 5: Save/Load |
05-saveload (9 systems) |
Blueprint specs updated |
| 6: UI |
06-ui (14 systems) |
Blueprint specs updated |
| 7: Narrative |
07-narrative (11 systems) |
Blueprint specs updated |
| 8: Weapons |
08-weapons (11 systems) |
Blueprint specs updated |
| 9: AI |
09-ai (9 systems) |
Blueprint specs updated |
| 10: Adaptive |
10-adaptive (15 systems) |
Blueprint specs updated |
| 11-16: Meta/Settings/Polish/Data/Input/State |
(13 systems) |
Blueprint specs updated |
| Developer Docs |
All 11 docs |
Updated with networking sections |
| Architecture Docs |
Overview, Patterns, Networking |
All current |
Multiplayer Networking Architecture v1.0 — Authoritative reference for all networking patterns in the framework.