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.
ECrimsonOnlinePlatform
Subsystem name(s) matched
DLC mapping field used
Steam
Steam
SteamDLCAppId
EOS
EOS
EOSOfferId
PlayStation
PS4, PS5
PSNProductId
Xbox
XboxOne, XboxOneGDK, GDK
XboxProductId
Switch
Switch
SwitchNsuid
Null
Null, NULL
none - entitlements are not implemented by the Null subsystem
Unknown
anything else, or no IOnlineSubsystem at all
none - DLC lookups return an empty platform ID
15 services at a glance
Service class
Accessor
Underlying OSS interface
UCrimsonOnlineIdentityService
GetIdentityService()
IOnlineIdentity
UCrimsonOnlineSessionService
GetSessionService()
IOnlineSession
UCrimsonOnlineFriendsService
GetFriendsService()
IOnlineFriends
UCrimsonOnlinePresenceService
GetPresenceService()
IOnlinePresence
UCrimsonOnlinePartyService
GetPartyService()
IOnlinePartySystem
UCrimsonOnlineAchievementService
GetAchievementService()
IOnlineAchievements
UCrimsonOnlineStatsService
GetStatsService()
IOnlineLeaderboards
UCrimsonOnlineRawStatsService
GetRawStatsService()
IOnlineStats
UCrimsonOnlineStoreService
GetStoreService()
IOnlineStoreV2
UCrimsonOnlinePurchaseService
GetPurchaseService()
IOnlinePurchase
UCrimsonOnlineEntitlementService
GetEntitlementService()
IOnlineEntitlements
UCrimsonOnlineUserService
GetUserService()
IOnlineUser
UCrimsonOnlineVoiceService
GetVoiceService()
IOnlineVoice
UCrimsonOnlineExternalUIService
GetExternalUIService()
IOnlineExternalUI
UCrimsonOnlineCloudSaveService
GetCloudSaveService()
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".
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.