Morpheus Platform Release v35
See this guide on how to update your existing project to a new editor release.
Version Released: 20/02/2025
Please note v35 removes support for any build on v31 on Pixel Streaming.
Nameplate simplification
Nameplates have been simplified, allowing for a Blueprint-only implementation. An example has been provided in M2 Example.
AI State Tree support for bots

AI State Trees can now be used and MSquared-specific documentation is available here: https://docs.msquared.io/creation/unreal-development/features-and-tutorials/bots#using-state-tree
SkeletalCrowd supports dynamic addition of meshes at runtime
What’s broken and why?
SkeletalCrowdMeshStore
mesh list is now ignored - meshes are now processed and useable bySkeletalCrowdComponent
on demand at runtime. This shouldn’t break anything, but may mean processing of meshes is happening at a different time in the fame.This change in turn has simplified a lot of setup required to get meshes added during
BeginPlay
, and means we can remove theISkeletalCrowdMeshProviderInterface
and all uses of itAll code related to avatars and attachments has been updated to handle this
How to fix it?
ISkeletalCrowdMeshProviderInterface
is removed. If code/BP was previously using this it can now be removed. When creating an FAnimatedCrowdMemberInitializer
using one of these (formerly) provided meshes:
For skeletal meshes there is nothing to do
For static meshes, previously the crowd got its attachment information from the mesh store data, which in turn was supplied from the mesh provider interface. This no longer exists. Therefore it must be passed in using the new
StaticMeshSocket
andStaticMeshTransform
members on theFAnimatedCrowdMemberInitializer
.
Similarly, CharacterAssetComponent
’s AddedCrowdStaticMeshesOverride
array has changed type. It is no longer a list of static meshes, but a list of M2_StaticMeshAttachment
types (including socket, transform and custom data as well). Code / BP usage of this array will need fixing up, or ideally, changing to use the AddAttachment
function which is the preferred path.
Carnival Model Component
What’s broken and why?
Blueprint functions to manually add and remove carnival meshes.
How to fix it?
To manually add a mesh (e.g. attachment) to a Carnival model, you can use the UJ_ModularCharacterComponent
as usual.
How to test it?
Carnival characters and attachments should work as usual.
Made the example map use new simplified character classes
What’s broken and why?
The base classes used by the example map, and the example plugin have been reparented, so that they use less of the deprecated content (e.g. the interaction system). The example map’s functionality should remain largely unchanged, but any classes extending off the M2Example bases that depend on features in M2Deprecated may not work.
The changes to the example content are as follows:
The ExampleMap now uses its own
BP_M2Example_BotBehaviorStore
, instead of the default oneThis uses a different chat behavior
WBP_M2Example_TextChat
has been retargeted to use theBPMC_M2Example_TextChatComponent
instead of the deprecated text chat component. If you are using this widget without using the other example classes, this may fail.BPM_Example_PlayerCharacter
has been reparented to a simplified base class. This removes some functionality, such as the deprecated interaction systemBP_Example_PlayerCharacter
has been reparented toBP_M2_PlayerCharacter
. This replaces some features, such as nameplates, and removes some deprecated functionality
NOTE: This change does not affect users exclusively using the content in M2Deprecated, e.g. WBP_Origin_HUD
and BP_Origin_PlayerCharacter
, only those using content in the M2Example
plugin.
How to fix it?
If you have assets extending example content, but that depends on deprecated content, you will need to either migrate away from using the deprecated content, or reparent your assets onto the deprecated base classes, e.g. BP_Origin_PlayerCharacter
.
How to test it?
Check whether your core classes extend any of the following:
BP_M2_PlayerCharacter
BP_Example_PlayerCharacter
BPM_Example_PlayerCharacter
And check whether your UI includes WBP_M2Example_TextChat
. If these are true, you may need to update their usage, if there are any compile errors, or deprecated features stop working.
Made M2_WorldBuilderUXSubsystem::bUpdateRequired read only
What’s broken and why?
UpdateRequired
was previously BlueprintReadWrite
, but is not intended to be modified externally in blueprints. It has therefore now been made BlueprintReadOnly
. Any downstream uses where it was set should be removed.

Change to Persistence Subsystem Read Query
What’s broken and why?
The response after reading from the KVStore has been minorly adapted to also return information about whether a key exists within the store. Instead of a map of key and value strings, it’s replaced with a struct that also contains a success boolean that indicates whether that key exists.
This means that the On Persistent Value Query Complete delegate will execute for both successfully found keys and non-successfully found keys.
How to fix it?
If you’re relying on the above delegate to execute only for successfully found keys, you will need to use Get Session Value String in your custom event to add an additional check for whether the key exists or not, before continuing with any logic.
How to test it?
Persistence systems should operate as normal.
Last updated
Was this helpful?