CrimsonOnlineSubsystem

CrimsonOnlineSubsystem gives your game one Blueprint- and C++-friendly entry point for platform online features - login, sessions, friends, presence, parties, achievements, stats and leaderboards, store purchases, DLC, cloud saves, voice and the platform overlay - so the same calls work on Steam, EOS, PlayStation, Xbox and Switch without writing raw OnlineSubsystem code. CrimsonOnlineSubsystem wraps Epic's OnlineSubsystem (OSS) v1 behind a typed, Blueprint-friendly GameInstance subsystem. One UCrimsonOnlineSubsystemGI instance owns 15 service objects - one per OSS interface - and exposes each through a BlueprintPure accessor that also works from C++. Platform detection happens in Initialize(); in PIE the DebugPlatformOverride project setting lets you pin any platform without relaunching from a storefront.

Supported platforms

UCrimsonOnlineSubsystemGI::DetectActivePlatform() reads IOnlineSubsystem::GetSubsystemName() and maps it to ECrimsonOnlinePlatform. Any name not in this table resolves to Unknown and logs a warning.

ECrimsonOnlinePlatformSubsystem name(s) matchedDLC mapping field used
SteamSteamSteamDLCAppId
EOSEOSEOSOfferId
PlayStationPS4, PS5PSNProductId
XboxXboxOne, XboxOneGDK, GDKXboxProductId
SwitchSwitchSwitchNsuid
NullNull, NULLnone - entitlements are not implemented by the Null subsystem
Unknownanything else, or no IOnlineSubsystem at allnone - DLC lookups return an empty platform ID

15 services at a glance

Service classAccessorUnderlying OSS interface
UCrimsonOnlineIdentityServiceGetIdentityService()IOnlineIdentity
UCrimsonOnlineSessionServiceGetSessionService()IOnlineSession
UCrimsonOnlineFriendsServiceGetFriendsService()IOnlineFriends
UCrimsonOnlinePresenceServiceGetPresenceService()IOnlinePresence
UCrimsonOnlinePartyServiceGetPartyService()IOnlinePartySystem
UCrimsonOnlineAchievementServiceGetAchievementService()IOnlineAchievements
UCrimsonOnlineStatsServiceGetStatsService()IOnlineLeaderboards
UCrimsonOnlineRawStatsServiceGetRawStatsService()IOnlineStats
UCrimsonOnlineStoreServiceGetStoreService()IOnlineStoreV2
UCrimsonOnlinePurchaseServiceGetPurchaseService()IOnlinePurchase
UCrimsonOnlineEntitlementServiceGetEntitlementService()IOnlineEntitlements
UCrimsonOnlineUserServiceGetUserService()IOnlineUser
UCrimsonOnlineVoiceServiceGetVoiceService()IOnlineVoice
UCrimsonOnlineExternalUIServiceGetExternalUIService()IOnlineExternalUI
UCrimsonOnlineCloudSaveServiceGetCloudSaveService()IOnlineUserCloud
Services always exist; interfaces may not
All 15 service objects are created in Initialize() on every platform, so an accessor never returns null. What varies is the OSS interface underneath: on the Null subsystem, entitlements, cloud save, voice and the platform overlay are simply unavailable. Those calls fail safely - a function that reports through a delegate broadcasts it with bSuccess = false, and a function that returns bool returns false. Always handle the failure branch; do not treat "the call returned" as "the platform did it".

Plugin dependencies

TypeNames
Crimson pluginsNone - fully standalone
Engine modules (public)Core, CoreUObject, Engine, OnlineSubsystem, OnlineSubsystemUtils, GameplayTags
Engine modules (private)DeveloperSettings, Json
Engine plugins (.uplugin)OnlineSubsystem, OnlineSubsystemUtils
Using with other Crimson plugins
This plugin works alone and needs no integration layer: nothing in it expects another Crimson plugin, and CrimsonCore ships no wiring for it. To call its services from your other systems, see CrimsonCommon -> Concept: Connecting Crimson Plugins.