How-To: Add a Front-End Experience

Goal: make a mode the player can pick from a menu, with a tile and a hosting request.

Prerequisites
Quick Start - a working UCrimsonExperienceDefinition, and the CrimsonUserFacingExperienceDefinition asset type registered in step 2.

A UCrimsonUserFacingExperienceDefinition is the presentation of an experience: what the player sees in a mode list, plus which map to travel to. The experience definition says what the session is made of; this says how it is offered.

1. Create the descriptor

It is Blueprintable - create a Blueprint Class from CrimsonUserFacingExperienceDefinition.

PropertyPurpose
MapIDThe map to travel to. Restricted to the Map primary asset type.
ExperienceIDThe experience to load there. Restricted to CrimsonExperienceDefinition.
TileTitle, TileSubTitle, TileDescription, TileIconWhat the menu shows.
bShowInFrontEndWhether it appears in the list at all. Default true.
bIsDefaultExperienceMarks the fallback entry.
MaxPlayerCountSession size. Default 16.
bRecordReplayStart a replay recording with the session.
ExtraArgsExtra URL options passed through to the travel.
LoadingScreenStyles the travel INTO this experience.
Maps inside a GameFeature plugin
A GameFeature plugin mounts after the asset manager's initial scan, so its maps are not in the primary asset registry when hosting is validated. For such a map, set MapID to the full package path: Map:/<PluginMountPoint>/Maps/L_Name. UCrimsonSession_HostSessionRequest::GetMapName falls back to the primary asset name only when it is a valid long package name; the short Map:L_Name form is not, and hosting fails in the editor with "Can't find asset data for MapID ...".
Verify
Both MapID and ExperienceID pickers are populated. An empty picker means step 2 of Quick Start has not been applied, or the editor has not been restarted since.

2. List them in a menu

Get All Front End Experiences returns every descriptor with bShowInFrontEnd set - build your tiles from that array. Get Default Front End Experience returns the one flagged bIsDefaultExperience.

Verify
The array contains your descriptor. If it is empty, the asset is outside the scanned directories from Quick Start step 2.

3. Host the session

The descriptor exposes everything a session request needs: MapID, MaxPlayerCount, GetTravelOptions() (the ExtraArgs plus Experience=<id>) and GetAdvertisementName(). Build your session system's host request from them, call ApplyLoadingScreenPresentation so the loading screen is styled, and travel. (CrimsonCore - requires all Crimson plugins) UCrimsonCoreExperienceStatics::CreateHostingRequestForExperience does exactly this for the suite's session system.

From your descriptor: Get Travel Options, Get Advertisement Name, and the Map ID / Max Player Count variables -> your session system's host call. Call Apply Loading Screen Presentation before it.

Offline by default
The descriptor carries no online mode. Choose it on your session request (CrimsonCore's statics default it to Offline).
Verify
Travel reaches the map and the experience loads there. Play As Client with 2 players to confirm clients receive it.

See also

  • Concept: What an Experience Is
  • API Reference -> UCrimsonUserFacingExperienceDefinition for the LoadingScreen block that styles the travel
  • API Reference - FCrimsonExperienceLoadingScreenRequest::OnRequested(), the channel ApplyLoadingScreenPresentation broadcasts on