Morpheus Platform Release v39
See this guide on how to update your existing project to a new editor release.
Version released: 29/08/2025
Release notes
NPC crowds

It is now possible for your project to have crowds of NPCs which can be customised with your own models and animation. See the documentation here: Crowds of NPCs.
New default avatars

The default avatars have been changed to use MSquared Avatars. These avatars are highly optimised for our crowd system and guaranteed to work at scale.
Testing reconnection flow
You can now simulate players disconnecting and reconnecting, or connecting as late joiners through the /disconnect
and /reconnect
commands. See our Testing Reconnection and Disconnection page for more information.
Replicated vehicles
Experimental: This feature is experimental. It has not been widely tested, may be incomplete, and is subject to change at any time.

We've added support for replicated vehicles within the Morpheus Platform, causing them to look physically simulated in LOD 0.
iOS support
Experimental: This feature is experimental. It has not been widely tested, may be incomplete, and is subject to change at any time.
MSquared has been making steady progress towards an iOS native client, and v39 is the first version which allows deploying to iPhone. This is currently highly experimental and requires an iPhone 15 Pro or iPhone 16. If you are interested in the iOS native client, please reach out to one of your support engineers.
Crash reports dashboard

We've created a dashboard which allows an organisation to see reports for any crashes that players experience. The full documentation can be found in Crash reporting.
Known issues
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.
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.
Millicast screens
If a Millicast Screen is in a BP loaded sublevel, it's possible for the controls not to detect this screen as an option to stream to. We have updated our documentation to address this.
Breaking changes
Removed OWLMediaProductionToolkit plugin
What’s broken and why?
The third party plugin OWLMediaProductionToolkit has been in the Morpheus Platform, but unused. As it is a licensed plugin, keeping it would incur significant costs and it increases our maintenance area without providing a tangible benefit.
As such, the plugin has been deleted and is no longer available.
How to fix it?
As the plugin has been removed, there is no workaround. If this removal causes you issues, please contact MSquared.
How to test it?
Check if your project loads successfully using the latest version of the Morpheus Platform.
Removed Example Purchaseables
What’s broken and why?
The following classes and structs were removed:
FAnotherPurchaseableTableRow
UAnotherPurchaseable
AExamplePlayer
FExamplePurchaseableTableRow
UExamplePurchaseable
AExampleSingleton
These were used in C++ only internally to validate the purchasing system. No content was added that referenced these, but there is a very small chance someone has created a class that inherits from these test classes accidentally.
How to fix it?
If you have never used M2’s Currency, Transaction or User Collections it is highly unlikely you will have used these.
If you have, it is still unlikely you will have used these but check your purchaseables to ensure they don’t inherit from or reference these classes.
It is important to note that support for Transactions/Currency has been previously dropped, with large areas of it deprecated in C++. If this change does affect you, please speak to your support contact for advice on this.
How to test it?
Content using this should not be fixed, it needs to be migrated to use another system such as the KV Store. Support will be able to outline alternatives for you.
Morpheus Arrays working with redirectors
What’s broken and why?
Morpheus Arrays in BPs will no longer have their correct inner type defaulting to integers.
This is due to a refactor in the Morpheus Arrays inner type to integrate with Unreals redirectors preventing crashes when redirected types are used as an Inner type to the MorpheusArray.
How to fix it?
Find the broken BPs containing a Morpheus Array
Re-pick their correct Inner Type.
Re-compile the blueprint and save it.
How to test it?
Make sure Morpheus Arrays are working as expected and all blueprints are compiling fine.
Replaced the example character’s footsteps logic with a simplified equivalent
What’s broken and why?
BPC_Audio_MovementSystem
has been deprecated, in favor of a simplified component (outlined in https://docs.msquared.io/creation/unreal-development/features-and-tutorials/the-m2-example-plugin/footsteps-audio), along with some dependent assets. The old component and assets will still be accessible from the M2Deprecated
plugin, but will not be actively maintained.
How to fix it?
If your project relies on the old BPC_Audio_MovementSystem
, we recommend migrating across, or making a copy of the required assets in your own project.
For more details of the changes, see https://docs.msquared.io/creation/unreal-development/features-and-tutorials/the-m2-example-plugin/footsteps-audio#i-was-using-the-now-deprecated-bpc_audio_movementsystem.-anything-to-be-aware-of
How to test it?
Walk around in PIE. Footsteps should sound as expected.
Moved misc assets to M2Deprecated
What’s broken and why?
The following folders have been moved into M2Deprecated, since they are not part of the core Morpheus Platform offering:
M2Content/Audio/Ambience
M2Content/Audio/System/UnifiedAmbience/
M2Content/Audio/System/CrowdSimulation
M2Content/Geometry
M2Content/InputActions
M2Content/Environment
M2Content/MaterialLibrary/SmartSurfaces
M2Content/Props
If you reference assets in these folders, you may get errors due to them being missing.
How to fix it?
If you enable the M2Deprecated
plugin, the assets will redirect. Any assets that you depend on, we advise making local copies of and referencing in your own content, since we do not intend to support the assets long-term
How to test it?
Check for any errors or compilation failures - if there’s anything related to missing Audio
assets from these folders, they can be fixed as outlined above.
J_CharacterMovementComponent and J_AnimVarsComponent have been deprecated, simplifying to CharacterMovementComponent and M2_AnimVarsComponent
What’s broken and why?
The following changes have been made to the M2
character and morpheus actor, meaning that if you are using blueprints based off of those classes, you will be impacted. If you are still using the deprecated character (extending e.g. J_
classes or Origin
classes), you will not be affected by this:
The existing
JM_AnimVarsComponent
has now been deprecated, in favour of a stripped backM2M_AnimVarsComponent
.The following anim vars have been removed:
IsWalking
IsDoubleJumping
HasBeenLaunched
HasLowGravity
HasZeroGravity
IsMovingInLowGravity
IsThrustingUp
IsThrustingDown
IsBouncing
IsSliding
IsAiming
The following anim vars have been modified:
IsJogging
IsSprinting
IsInCombatMode
IsDead
The existing
J_CharacterMovementComponent
has now been deprecated, in favour of using the native defaultCharacterMovementComponent
.The following features have been removed:
The “Custom Movement Mode Primary Asset” system
Some minor helper functions, like
AddGravityMultiplier
andAddGaitSpeedMultiplier
The following features have been modified:
“Gait speeds”
“Combat mode”
Due to
M2_CharacterBase
'sCharacterMovementComponent
class being changed, unfortunately assets extending it will have their component corrupted. If this affects your character, you will see the following popup when attempting to play or open your asset.image.png
For more details on this change, see https://docs.msquared.io/creation/unreal-development/release-notes/breaking-changes-further-details/breaking-change-details-deprecating-j_charactermovementcomponent
How to fix it?
NOTE: This breaking change is best fixed with knowledge of the project prior to upgrading. If you think you may be affected by this change (if you are not certain that you are using the deprecated classes), please either check this flow before starting the upgrade, so you can make appropriate notes, or have access to a version of the project prior to the upgrade to hand, to easily compare between them.
If you are using the example plugin content as a base, or building off of the core M2
classes, you will have one of two options:
Use the simplified components (Recommended)
Using the logic in the Morpheus Plugin as reference you will be able to achieve the same functionality as was achieved via the deprecated code classes entirely in blueprints.
Switch back to the deprecated components (only recommended as a temporary solution)
For details on these, see https://docs.msquared.io/creation/unreal-development/release-notes/breaking-changes-further-details/breaking-change-details-deprecating-j_charactermovementcomponent
How to test it?
Open your character asset. Then PIE to verify that your character begins play, and moves as expected. If you see the Asset had a corrupted CharacterMovementComponent
popup in either of the above steps, you will need to go through the How to fix it? process.
We recommend also checking the animated crowd (e.g. by testing with multiple clients and setting thePlayerClient.Rendering.NumInLOD0
live config override to 0), to ensure that it is also animating as expected.
AActor.bReplicateMovement replaced with MorpheusActorMovementComponent.bMorpheusReplicateMovement
What’s broken and why?
Morpheus no longer uses the AActor.bReplicateMovement property to determine whether movement is replicated. This field is now hidden and you should use MorpheusActorMovementComponent.bMorpheusReplicateMovement.
How to fix it?
For any classes that have changed the bReplicateMovement property from the default, the movement will continue to replicate as per your custom setting for this release, but you will get an error log at runtime asking you to resave your asset. This error and auto-fix will be removed in future version.
Resave all your assets that have changed the bReplicateMovement value from the default. This will fix up the bMorpheusReplicateMovement property to its previous value.
How to test it?
Ensure that movement is replicating property for all objects in your game.
Removed r.SkylightIntensityMultiplier override on low/medium graphics settings
What’s broken and why?
We previously made a change to the Unreal defaults to set the r.SkylightIntensityMultiplier
to 0.05
on Low and Medium graphics settings, which can improve visual fidelity on indoor scenes. However it can lead to very black shadows on outdoor scenes, which can look bad.
The change is to remove the override and restore the Unreal default value of 1
. Projects are free to make their own tweaks to this value based on their own lighting setups, and the default is now the same as in a vanilla Unreal project.
How to fix it?
To restore the previous behaviour, edit or create a file called DefaultScalability.ini
in <ProjectDirectory>/Config
, which will override the defaults. Add this to the file to apply the old settings (or change the values as you like):
[GlobalIlluminationQuality@0]
r.SkylightIntensityMultiplier=0.05
[GlobalIlluminationQuality@1]
r.SkylightIntensityMultiplier=0.05
How to test it?
Test your level on Low and Medium graphics settings to ensure the lighting looks correct.
Hidden Assets upload button behind setting
What’s broken and why?
There is no change unless you were already using the Assets and Releases system. If you are not aware what this system is then you can ignore this breaking change.
The assets upload button has been hidden behind a new setting that is default set to off. For projects using this functionality they will need to toggle this setting and commit the changes.
How to fix it?
Navigate to and enable Project Settings
> Morpheus Platform
> M2 World Builder
> Assets
> Enable Assets Upload (Experimental)
.
How to test it?
You should see the assets button in the top right of your editor again.
You can also verify the change was successful by looking for the setting bEnableAssetsUpload=True
in DefaultGame.ini
for your project. If the setting is set here, it can be source controlled so other developers do not need to make this change too.
Removed several unused maps
What’s broken and why?
The following maps have been fully removed from the platform:
/M2Core/Content/JunoAssetLoader/Maps/ - These maps were for internal testing and no longer used
LevelInstanceLoader_TestWorld
LevelStreamer_TestSublevel
LevelStreamerUnload_TestWorld
LevelStreamer_TestWorld
/M2Content/Maps/TestGyms/Video/M2VideoTestGym
The VideoPlayer asset has been deprecated and an alternative is being provided in the ExampleMap
/M2Core/JunoActivities/Maps/TestLevel
Activities are already deprecated and due for removal in v39
How to fix it?
If you need these maps you can copy them into you project locally, but there is no good reason to given the reasons listed above.
Deprecated BPM_VideoPlayer
What’s broken and why?
The old BPM_VideoPlayer
has now been deprecated, due to being temperamental, and very C++ driven (making it difficult for downstream users to dig into). It has now been replaced by some completely BP example content: BPM_M2Example_SyncedVideoPlayer
and BP_M2Example_VideoPlayerMirror
.
Since M2Deprecated
has now been turned off by default, this means that if you were using the old video player, it will be missing until you manually enable the plugin.
How to fix it?
If you need the old video player, you can re-enable M2Deprecated
as a stop-gap, but best approach would be to migrate to using the BP-only examples, or making your own.
How to test it?
Check for any uses of video players in your map. They should still work.
Disabled M2 Deprecated plugin by default
What’s broken and why?
The M2 Deprecated plugin that contains things like the Legacy Origin and Approachability characters has been disabled by default. This content is still available in the latest release, but will need enabling to use. This has been done because MSquared no longer tests, maintains or supports this content as part of our initiative to reduce the surface area of the platform to deliver higher quality content and API’s we intend to support going forwards. Disabling this by default reduces the risk of customers using content they are unaware has been deprecated.
How to fix it?
If you are concerned that your project will not load correctly as there is M2 Deprecated content in your default map, you can add the following to your projects .uproject
file to ensure it is enabled on launch.
{
"Name": "M2Deprecated",
"Enabled": true
}
Alternatively you can enable the plugin by launching the editor and ticking M2 Deprecated in Edit > Plugins

We advise that you start working out a migration plan for breaking your dependency on content within M2 Deprecated. There are a number of ways of doing this:
Build your own base classes to replace the legacy M2 ones
Reparent your content to non-deprecated content in the platform
Migrate the desired legacy content from the M2 Deprecated plugin into your own project
Option 1 gives you the greatest long term stability and control. You will be building using our API’s directly and should be far less impacted by breaking changes by reducing dependence on shipped content.
Option 2 is a great way to get a similar level of stability but at the potential sacrifice of control, given there is a Blueprint layer between your content and underlying code. This may be a worthwhile trade-off as it does mean there could be less that you need to implement yourself if we have already provided base/example functionality.
Option 3 may well be the fastest way to keep your project functioning as expected. This route does pose a degree of risk as there may be BP API within the content that has also been deprecated, that you will need to replace or risk losing all related functionality. You will want to ensure all content needed (the desired content and any dependencies) has been migrated, so make sure you test by turning M2 Deprecated off from time to time.
How to test it?
If you are not using any content from the M2 Deprecated plugin, there is nothing to do.
If you are using M2 Deprecated content, check your content functions as expected after re-enabling.
Last updated
Was this helpful?