Skip to main content

Character Customization Flow

How a skin picked in the Locker ends up on every party member's screen and in the match.

The Pieces

PieceRole
WB_LockerThe locker room UI where the player picks a character and variation.
CharacterDataAsset instancesDefine each character: mesh variations map (string key → mesh), portraits, anim BP, unique Skin Type Key. See Character Data Asset.
BPC_CharacterCustomizationApplies a skin to its owning character (menu avatar or game character).
BPC_PlayerDataPersists the chosen skin locally + Steam Cloud.
Steam lobby member dataShares the chosen skin with other party members.

Two string keys describe any skin: Skin Type Key (which character, e.g. Manny/Quinn) and Skin Variation Key (which mesh variation of that character).

Selection Flow (Menu)

  1. Player opens the Locker (WB_Locker) and clicks a character/variation.
  2. The selection is saved through PDATA_SavePlayerCharacterData (local save + cloud).
  3. The keys are written into the local player's lobby member data.
  4. On every member, HandleOnLobbyDataUpdateCharacter Data Update reads the new keys, resolves the mesh through Get Skin Mesh with Anim (from BP_SPM_Library, using the CharacterDataAsset), and applies it to that member's avatar via BPC_CharacterCustomization → Set Character Skin and Color. Meshes are soft references loaded async with BPML_Components → LoadAndSetSkeletalMesh.

Validation

Because members may come from different builds, Validate Skin Type checks the received Skin Type Key against All Characters in DA_PM_Settings. Unknown skins fall back to default via Reset Skin Type, so a modified client can't crash the menu.

In-Match Flow

BP_GameCharacter also carries BPC_CharacterCustomization (Character Type = Game Character). In the match (a real replicated level), the component uses the Refresh RepNotify (OnRep_Refresh) to replicate skin application: the server sets the skin keys from the player's data, and each client applies the mesh in the RepNotify.

Component Details

BPC_CharacterCustomization functions:

FunctionPurpose
Set Character Skin and Color / Get Character Skin and ColorApply/read the current skin keys on the owner.
Set Spot Index / Get Spot IndexWhich party spot this avatar belongs to.
Get User Steam IDWhich Steam user this avatar represents.
Set Menu Avatar VisibilityShow/hide the avatar (used when spots empty).
Get Used As AvatarWhether the owner is a menu avatar vs game character.
OnRep_RefreshRepNotify handler that reapplies the skin on clients.

Name plate placement is adjusted with the Name Plate X/Y/Z Offset variables (see Character Customization).

Adding Your Own Character

  1. Create a new CharacterDataAsset instance in DataAssets/Characters/ with a unique Skin Type Key, your mesh variations map, portraits and anim BP.
  2. Add it to All Characters in DA_PM_Settings.
  3. Done. The Locker, avatars and validation all read from that array.