Editor Versions
Our release announcements include:
Release Notes
Breaking changes (make sure you check when updating)
Known issues
See this guide on how to update your existing project to a new editor release.
Latest: Morpheus Platform Release v38.1
Version released: 01/07/2025
Please note v38.1 removes support for any build on v34.0.0 on Pixel Streaming
Unreal Engine 5.5.4
The underlying version of Unreal Engine used by the Morpheus platform has been upgraded from 5.3.1 to 5.5.4.
This is a very significant upgrade, and we do recommend that users read the release notes for both 5.4 and 5.5, which are available here:
Not only does this upgrade provide a significant number of features and bug fixes, but it is also provides foundational improvements which will be necessary as we continue adding support for mobile.
Improved documentation for crowd animation
We've added documentation for the crowd animation system, including a full list of which nodes are supported in the crowd animation blueprint:
Live config per plugin
In addition to setting Live Config in your project, you can also do so on a per-plugin basis.
To do so, you could add e.g. game.schema.json
to your Config/LiveConfig/Schemas
folder in the plugin and it will be handled correctly.
HUD can now be hidden
You can now hide the HUD in the Example project by pressing Ctrl+Alt+H
Separated out the pubnub text chat integration into the M2Extra
What’s broken and why?
The pubnub chat system has been moved fully into M2Extras_PubnubChat
, and is not being used in the Morpheus Platform classes. This is because the pubnub authentication is being dropped by the web platform. The authentication flow we are moving into M2Deprecated
, and removing references to them in our example content.
The outline of the changes done is as follows:
BMPC_TextChatComponent
- moved toM2Deprecated
A similar component:
BPMC_Pubnub_TextChatComponent
has been added to theM2Extras_PubnubChat
plugin. This has all the “send messages throughBP_M2_PubnubConnection
logic, but has a stub for users to add their own pubnub auth.The
WebPlatform
logic in theM2Extras_PubnubChat
has been moved intoM2Deprecated
(e.g.BP_M2_SocialWorldService
)BPMC_M2Example_TextChatComponent
- removed theUsingPubnubChat
- now it will only use the local flow, and not refer to theBPMC_TextChatComponent
The main noticeable effect of this would be that if you were using BPMC_M2Example_TextChatComponent
, but had UsingPubnubChat
checked, that flow will now not work - you will default to the Unreal chat flow.
How to fix it?
Please switch to using the Unreal-based text chat https://docs.msquared.io/creation/unreal-development/features-and-tutorials/communication/unreal-text-chat. This should handle most in-game text chat requirements. If you need an external chat system like pubnub, please reach out to a support engineer. We have some docs on how to use the M2Extra as a starting point here: https://docs.msquared.io/creation/unreal-development/features-and-tutorials/communication/text-chat
How to test it?
Try using text chat as intended by your experience. If you have a web based text chat, things may have been affected.
Deprecated the (JM)
bootflow subsystem functions (plus some others)
(JM)
bootflow subsystem functions (plus some others)What’s broken and why?
We have marked the following bootflow functions as deprecated:
HandleAuthActorSpawned (JM)
HandleAuthPawnSpawned (JM)
GetAuthActor (JM)
We have also deprecated some other helpers:
GetM2HUD
Download Image (With Cache)
Therefore, any usage in your code will result in compiler warnings.
How to fix it?
Please use the advised alternative functions instead. These use the more generic base class MorpheusPawnActor
. If you truly need the logic to use the deprecated JM_CharacterBase
, you can cast the result.

Made Legacy UI Skinning "opt-in"
What’s broken and why?
We have removed some references to our legacy UI Skinning system in our BaseGame.ini
file, as the feature is due for deprecation and removal, and the default skin has already been deprecated. In order to eliminate spammed warnings about missing skins, we made the legacy Skinning system "opt-in".
How to fix it?
If you built your project from our example content or are not using the legacy HUD or skins, there is likely nothing for you to fix.
Launch the editor and go to Project Settings > M2 UI Skins and enable the Legacy Skinning System. Ensure your default skin is set, this will either be PDA_Skin_Origin (the previous M2 default) or something you have created project-side.

This will only continue to work while we still ship the M2 Deprecated
plugin which we plan to eventually retire. We also plan to officially deprecate the functionality of the Legacy in the near future, so it is advised customers that require UI Skinning migrate onto the M2 Extras Skinning System.
How to test it?
Check you’re able to boot into your world in PIE and see your UI.
Removed game mode override in ControlPanelsGym
What’s broken and why?
The game mode override for control panels test gym was a deprecated game mode that used the old “Origin” content. This has been removed.
How to fix it?
Copy the map into your project folder, then set the game mode override to BP_GameMode (in M2 Deprecated).
Long term we plan to drop all support of control panels and the BP_GameMode uses a character with a soon to be deprecated Roles component, so our advice is to not use this and to build your own Control Panel test content if needed, as this can no longer be relied on long term.
How to test it?
Check that the roles related content works in the test gym.
Deprecated User Collections and Purchaseable systems
What’s broken and why?
The following systems have been deprecated, along with any of their functionality:
User Collections
Purchasing/Transactions/Wallets
Avatar Editor
This is in line with the upcoming removal of the User Collections system from the web platform, at which point these Unreal APIs will stop functioning.
How to fix it?
If you need these systems, or encounter any compilation warnings as a result of these systems being deprecated, please reach out to your support engineer. Our intention is to not support these systems going forwards, so you will need to migrate off of these, onto other equivalents
How to test it?
Your game should build fine, with no additional compiler warnings.
Simplified BPMC_M2Example_CrowdAudioComponent
BPMC_M2Example_CrowdAudioComponent
What’s broken and why?
We have cleaned up the example crowd audio implementation (BPMC_M2Example_CrowdAudioComponent
) so that it no longer copies across all the functions from the deprecated BPMC_CrowdAudio
. These functions were not used by example content, so would only break if the functionality was used in a downstream project that is attempting to use the deprecated functionality.
The main changes of note:
The old functions to enable/disable voice e.g.
InformMicrophoneButtonPressed/Released
,SetPushToTalkMode
,StartLoudspeakerRequest
etc. have been removed. Instead we use the baseCrowdAudioComponent
's functions directly, e.g.SetVoiceInputEnabled
. We no longer support both push to talk and toggle. We only have push to talk in our default UI, but toggle could be implemented in downstream logic via theSetVoiceInputEnabled
functionThe “manually muted” logic has been removed, since it is unused
The “choppiness detection” logic has been removed, since it is unused
The
GetCanUseVoice
logic based on capabilities and moderation has been removed, but could be reimplemented downstream in the simplifiedCanUseVoice
function.
How to fix it?
Any deprecated logic that is depended on should be fixed up, either by writing equivalents in project code, or switching the functions used.
If the deprecated functions are definitely needed in the downstream project, the deprecated BPMC_CrowdAudio
is still present, and can be used as an off-ramp.
How to test it?
PIE - if there are any compile errors relating to usage of BPMC_M2Example_CrowdAudioComponent
, they will need to be cleaned up.
Deprecated functions in M2M_PartyComponent
What’s broken and why?
Previously we had messaged that we were dropping support for parties in Unreal, but had not actively deprecated the functions used by BPMC_PartyComponent
. That has been handled now, meaning BPMC_PartyComponent
or any other class using functions from M2M_PartyComponent
will give a compiler warning in Blueprints. The Unreal-to-web party functionality was deprecated and removed several versions ago leaving only basic party management which is implementable by anyone with Unreal experience.
How to fix it?
Firstly you need to remove BPMC_PartyComponent
from any characters you wish to continue using. Then you will need to create a new party system to use in it’s place if this functionality is desired.
If you are unsure of how to build a party system, please reach out to your support engineer for guidance. We also have documentation on how to use broadcasting channels to allow users to voice chat with specific users, which can help build a “party chat” system https://docs.msquared.io/creation/unreal-development/features-and-tutorials/spatial-audio#broadcast-channels
Live config functions and console commands renamed (no longer JunoGameData)
What’s broken and why?
Nothing broken, just a callout: The live config helpers and console commands have been renamed, to get rid of the out of date Juno Game Data
name. The following renames have happened:
Console commands:
JunoGameData.GetValue
/SetValue
,ClearOverride
→M2.LiveConfig.GetValue
/SetValue
,ClearOverride
GetGameDataAttributeValueAsString
/Integer
/etc. →GetLiveConfigValueAsString
/Integer
/etc.
How to fix it?
No changes necessary! The functions and console commands will all redirect, just be aware of the new names going forwards.
Launch Context removal from Live Config and Domain Configuration Subsystem
What’s broken and why?
Launch Contexts are not a user-facing concept and have been removed from the editor. The final change in this initiative is to remove LC from the domain configuration subsystem. This means content responding to the following live config variables will need to be changed:
(deployment.json)
Client.OverrideLaunchContextId
.
Existing systems and APIs have already been updated to use World so in most cases, LC can be replaced with World usage.
Additionally, the following UProperties have been removed:
(M2_UserDataStore)
LaunchContextId
.(M2_WorldConnectionApi)
LaunchContextId
.(M2_DomainConfigurationSubystem)
LaunchContextId
.(M2_DomainSettings)
LaunchContextId
.
How to fix it?
Replace usages of
Client.OverrideLaunchContextId
withClient.OverrideWorldId
Replace
LaunchContextId
UProperties withWorldId
Reach out to support if this does not resolve the issue.
How to test it?
Check that the BPs recompile.
Test that the system works as expected.
The boot-flow no longer blocks on having a player profile
What’s broken and why?
We are changing how user profiles work in MSquared. One part of this is that we are making the current user profiles system (the Profile Data Profiler class) optional, and so we no longer block in the boot-flow on the profile system loading a profile.
All existing MSquared logic is unaffected by this change, but there is a small chance that downstream project logic could encounter a race condition, if they attempt to get the profile early on in the bootflow (immediately after HandleBootflowStarted is satisfied), where they expect the profile to be ready, but it is not yet.
How to fix it?
If you have such logic, that expects the profile be ready early in the bootflow without checking (e.g. startup logic that happens before your character is spawned), it would be best to check that the profile is ready before attempting to use it. We have one such example implementation in BPMC_M2Example_PlayerNameComponent

How to test it?
Begin Play - all your custom logic that depends on the local player’s profile (e.g. find references to “profile data provider” in your codebase) should successfully get the profile when expected to.
Moved Carnival GetFromAssetId functions into UCarnivalWorldSubsystem
What’s broken and why?
Two static functions have been moved into a subsystem, to fix an issue with tracking meshes:
CarnivalSkeletalMesh::GetFromAssetId
→ CarnivalWorldSubsystem:: GetSkeletalMeshFromAssetId
UCarnivalStaticMesh::GetFromAssetId
→ CarnivalWorldSubsystem::GetStaticMeshFromAssetId
How to fix it?
Replace any calls to the GetFromAssetId
functions with the corresponding on the CarnivalWorldSubsystem.

How to test it?
Blueprints will compile and function as before.
Removed LC from web platform utilities
What’s broken and why?
Requests made to the web platform now all use world context. Launch contexts have been phased out and launch context utilities have been removed.
Additionally, the enum value EM2_HttpRequestScope::LaunchContext
has been removed.
How to fix it?
Replace the utilities and values that no longer exist:
Get M2 Web Platform Launch Context ID
>Get M2 Web Platform World ID
EM2_HttpRequestScope::LaunchContext
>EM2_HttpRequestScope::World
How to test it?
After making the replacements above, re-test your feature. If it still does not work, reach out to support.
Removed unused singletons from singletons list
What’s broken and why?
The following deprecated singleton classes have been removed from the named singletons list in the world settings:
ActivityManagerClass
(A deprecated system for tracking participants in “activities”, and loading appropriate sublevels)DataProviderSingletonClass
(A system for providing data to UI that was never used)EffectManagerClass
(A deprecated system for spawning gameplay effects, see uses ofFAS_[X]
assets orBP_[X]ApplicatorSettings
)UserTagManagerClass
PartyManagerClass
Before:

After:

In deprecating the user tags content, we have also removed the DT_M2_UserTags reference from the GameplayTagTableList, but this can easily be re-added downstream if needed:

How to fix it?
If you need any of the removed singleton classes, they can be re-added in your level using the AdditionalSingletons
list:

How to test it?
Your gameplay systems should behave as before, with no additional warnings related to missing singletons/systems
Modified the GetJsonObjectAtLocation function
What’s broken and why?
The GetJsonObjectAtLocation
function has had its nodes changed, so that instead of logging warnings and outputting a bool, it uses different execution pins for the assorted outcomes. This enables users to more clearly see the various failure cases and handle accordingly (instead of e.g. always warning if the object doesn’t exist, where it may actually be optional)

How to fix it?
Any nodes that fail to compile should be updated as in the screenshot above
How to test it?
Your logic should compile successfully.
Removed deprecated behaviors from BT_BotBehaviour
BT_BotBehaviour
What’s broken and why?
The bot “roles” and “interact” behaviors have been removed from the BT_BotBehavior
, since the functionality they were testing has been deprecated.

How to fix it?
If you referred to BT_BotBehavior
and specifically want to test these two behaviors in your “full” behavior, you will need to add them manually to your Behavior Tree.
How to test it?
PIE - your BT should perform the behaviors you want it to.
Removed Launch Context from world travel structs
What’s broken and why?
Users will be unable to perform local PIE world travel when using deprecated world travel content (BPs and WBPs)
World travel structs no longer have a launch context field. As a result, the previous logic of attempting to use the launch context and falling back on the world or map has been replaced with logic where the world or map names are used directly.
This will have no effect for deployments and everything should work as expected even if using deprecated world travel content
How to fix it?
Use non-deprecated world travel engine content
How to test it?
Perform PIE world travel
Changed Carnival memory usage live config into a CVAR
What’s broken and why?
The Carnival.StreamClientTargetMaxInMemoryBytes
live config value was used to specify how much crowd model data should be cached in memory. This has been changed to a scalability CVar r.CarnivalStreamClientMaxInMemoryMB
so it can be set independently for different client hardware. The default value of 512 is the same as previously.
How to fix it?
If you’ve modified the Carnival.StreamClientTargetMaxInMemoryBytes
live config default for your project you should instead add the CVar into your project’s <project>/Config/DefaultConsoleVariables.ini
file with the same value. Example file contents:
[WorldBuilder]
r.CarnivalStreamClientMaxInMemoryMB=512
How to test it?
Crowd rendering should behave as before with the same memory usage.
M2M_CharacterBase not receiving tick
We have identified a bug with our M2M_CharacterBase
which means that children of the class will not receive the tick event in BP. This has been fixed now, and will be in the next release.
In the meantime, we recommend working around the issue by e.g. using a looping timer

DefaultPawnSet isn't guaranteed to be cooked
We received a report that if you set your DefaultPawnSet
to an asset that is not referenced elsewhere in your codebase, it is not guaranteed to be cooked. If this affects you, you will get errors along the lines of:
LogStreaming: Warning: LoadPackage: SkipPackage: /VaultCore/Core/Base/[Your DA_PawnSet] (0xF739E326EC32E612) - The package to load does not exist on disk or in the loader
We are investigating this, and will work on a fix. In the meantime, if you encounter this issue, you can resolve it by adding a reference to your pawn set in your cooked content, e.g. by adding a variable that is set to your pawn set

Control Panels don't work on native mobile
We have identified that control panels don't work on native mobile. They still work fine on streaming mobile, and on PC/Mac. We don't expect this to have significant impact, given control panels are intended for specialist use, and not for general participants. If you expect this to impact your project, please reach out to support.
Crash when using Movie Player on Mac native
We have identified a crash with Unreal Engine 5.5 when using movie playback on Mac native. The client will immediately crash when attempting to play a video.
We are currently investigating the issue and will provide a hotfix as soon as possible.
Missing Audio Component events
We have identified an issue with Unreal Engine 5.5 when it comes to playing audio components. After the world has initialized, the component's OnAudioPlaybackPercent
and OnAudioFinished
events stop playing (due to some internal failing when passing work between the audio thread and the game thread). So far we have not seen any other issues with the playing of audio, and the lack of these events can be worked around with tick behavior and delays based on the audio source's duration.

Last updated
Was this helpful?