LogoLogo
API Status
  • 👋Welcome
  • 🌐What is Morpheus Platform?
    • Interoperability
  • â„šī¸Help
    • 📗Glossary
    • 🆘Support
    • Firewall problems
    • EULA
  • CREATION
    • 🎮Unreal Development
      • ⚡Get Started
        • âš’ī¸Download the Editor
        • âĢUpload Content
        • 🌎Creating your own map
        • 📝Morpheus Base Project
        • ❓Differences from Unreal
          • 🧍Character Configuration
        • 📡Morpheus Networking
          • Introduction to Morpheus Networking
          • Network Levels
          • Replicated Properties
          • RPCs
          • Morpheus Render Targets
          • Morpheus Array
          • Networking FAQ
          • Replicating Sublevels
      • 📚Features & Guides
        • 📒Example Plugin
          • Nameplates
          • In-game roles
          • Resizing
        • 🏊Actor Pooling
        • 🔊Audio
        • 🎭Avatars
          • Creating an Avatar
          • Attachments
            • MML Attachments
          • Custom Animation Variables
          • Importing an NFT collection
          • Capsules and Mesh Transforms
        • 🤖Bots
        • đŸŽ™ī¸Chat
          • Unreal Text Chat
        • đŸŽ›ī¸Control Panels
          • Control Panel Configuration
          • DJ booth mission control
          • Observer Controls
        • 🔉Crowd Audio
        • đŸ¤ŧCrowd Rendering
          • Legacy Animated Crowd
            • Animated Crowd Console Commands
            • Attaching static meshes to crowd members
          • Crowd Materials
          • Performance Parameters
          • Live Config Settings
          • Crowd Animation
            • Crowd Anim Blueprint
              • User Guide - Crowd Anim Blueprint
              • Reference Guide - ABP Nodes
                • Animation Playback
                • States and State Machines
                • Variables
                • Transitions
                • Special
                • Blends
                • Additional Notes
        • 🍱Helpers & Extras
          • "Instanced Objects" in Blueprints
          • Objects with "world context"
          • Making DataAsset classes
          • Duplicate Objects
          • The Bootflow Subsystem
          • The "Wait For Condition" System
          • Advanced Graphics settings
          • Listening to inputs on UObjects
          • Morpheus UserID
          • World Services
          • M2Extras: Skins System
        • đŸ–Ĩī¸Loading Screen
        • ⚡Live Config
          • Editing for a World
          • Editing Locally
          • Default Settings
          • Accessing via Blueprint
          • Adding New Settings
          • Overriding Defaults
          • Using Arrays
        • 🧊MML
        • đŸ•ēMotion Capture
        • 📡Networking
        • đŸ“ĸNotifications
        • Raycastable Crowd
        • 🌐Singletons
        • 📱Streaming & Multiplatform
          • GFN on mobile
        • đŸ–Ĩī¸UI
          • "UI Mode"
        • đŸ—ƒī¸User Collections
          • Creating a New Object Definition
          • Accessing from Unreal
            • Creating Objects Definitions
            • Transfer Objects
            • User Collection Views
            • Receiving Updates
        • đŸ“ēVideo Players
          • Embedded Video Player
          • Millicast video streaming
            • How to Setup an In-Game Video Stream
            • Picture-in-Picture mode
          • Streaming Video Player
            • How to Setup a URL Video Player
            • Picture-in-Picture mode
        • 🐞Visual Debugging
          • Inspector
        • đŸĒŸWeb UI
        • Online Services
          • KV Store Service
        • 💠Web Requests
          • Http Requests
            • Legacy HTTP Nodes
          • JSON Handling
          • WebSockets
          • Identity Validation
          • Allowed External URLs
          • Walkthrough Example
            • Example Counter Service
        • âœˆī¸World Travel
          • World Travel in the editor
        • Avatar Physics Assets
        • Action Gameplay Helper Components
      • 🔑Workflows
        • â†—ī¸Upgrade the Editor
          • đŸ–Ĩī¸Version History
        • âš™ī¸Editing Project Settings
        • 📈Profiling
        • đŸ§ēMarketplace Importing
        • đŸ› ī¸Extra Workflows
          • Setup Play-in-Editor
          • Setup Local Asset Validation
          • Adding Gameplay Tags
          • Validating Game Assets
          • Custom Connection Modes
          • Connect Editor to a World
          • Common Issues
      • 📚Useful Reading
        • ⭐Best Practices
    • 🌎Worlds
      • 📩Invite Players
        • Setting Role Groups
      • Persistent Worlds
      • Always on Worlds
    • 📅Running events
      • ✅Large scale events - Checklist
      • 👾Anti-Cheat (EAC)
      • 🎮Player Entry
        • 📱React Native
        • Steam
        • đŸ’ģHardware Reqs
      • đŸŽĨBroadcast
        • 📹OBS Integration
      • Failover
      • 🏁Capacity And Queue Management
  • ADMINS
    • đŸ‘ĒAccess Control
      • Adding metaverse contributors
      • Creating a new project
    • 💲Pricing
      • Development Support
      • Included Usage & Overages
      • Cloud Streaming
      • Access Modes
      • War Room Support
      • Platform SLA
    • âš™ī¸Settings
      • đŸ—ƒī¸Projects
  • APIs and Tooling
    • đŸ–Ĩī¸API Reference
      • Accounts
      • Events
      • Key/Value Store
      • Organizations
      • Realtime
      • User Profile
      • World Builder
      • Worlds
    • đŸ’ģTemplate Web App
      • đŸ’ĸModeration
    • Pixel Streaming
    • 🚀Launcher
  • Integrations
    • 📊Analytics
      • Sending events from web
      • 🎮Sending Events from Unreal
    • đŸ’ŦChat
      • 🎮Integrating Pubnub with your Unreal Project
      • Adding Moderation to Chat
Powered by GitBook
On this page
  • Morpheus Platform Release v36
  • Morpheus Platform Release v35
  • Morpheus Platform Release v34.1.1
  • Morpheus Platform Release v33
  • Morpheus Platform Release v32
  • Morpheus Platform Release v31
  • Morpheus Platform Release v30
  • Morpheus Platform Release v29
  • Morpheus Platform Release v28
  • Morpheus Platform Release v27
  • Morpheus Platform Release v26
  • Morpheus Platform Release v25
  • Morpheus Platform Release v23
  • Morpheus Platform Release v22

Was this helpful?

  1. CREATION
  2. Unreal Development
  3. Workflows
  4. Upgrade the Editor

Version History

PreviousUpgrade the EditorNextEditing Project Settings

Last updated 3 days ago

Was this helpful?

New versions of the editor are aimed to be released every month.

Each editor release announcement below includes:

  • New feature highlights

  • Breaking changes (make sure you check when updating)

  • Known issues

See on how to update your existing project to a new editor release.


Morpheus Platform Release v36

20/03/2025

Please note v36 removes support for any build on v32.1 on Pixel Streaming.

IMPORTANT NOTICE

We currently expect v36 to be the final major release before MSquared transitions to Unreal 5.5, which is anticipated to bring significant improvements.

To minimize disruption, we strongly recommend upgrading your project to v36 in preparation for this change.

Static MML rendering with Carnival

MML geometry can now be rendered at scale using Carnival, unlocking new possibilities such as:

  • Configurable per-model parameters, including LOD levels, custom depth settings, and more.

  • Trigger volumes for handling overlapping events.

  • Optional physics interactions and visibility to raycasts.

UE basic name and chat moderation

Basic Unreal chat and nameplate moderation is now included in example assets, and are both turned on by default. Unreal chat moderation is configurable by setting the game live config value "EnableBasicModeration" to true or false. You can also find a list of profanity that is moderated out in live config, and tweak these to your needs.

Nameplate moderation uses the same profanity list, and can be turned on and off via the Settings Menu blueprint (you will need to make your own copy of WBP_M2Example_SettingsMenu in the content folder and adapt this).

Enable Spatial Crowd Audio muting

Spatial Crowd Audio can now be globally muted.

Please note that it is not possible to mute an individual in the crowd.

Visual fixes for scaled characters

Fixes have been implemented for incorrect rendering of large-scaled characters, which previously caused:

  • Clipping through the landscape.

  • Incorrect normal maps.

Observer Control singletons no longer default M2 Singletons

What’s broken and why?

As we move to turning off the M2 Deprecated plugin by default, we are removing dependencies on legacy content. Our Observer role is scheduled to be simplified, but currently it is tied to the legacy classes which means it cannot be a default singleton. Specifically the control panels often used in this mode will not be available and you will see the following logs:

LogBlueprintUserMessages: [BP_ObserverPawn_C_0] Observer Camera Control Panel isn't present in the level! Keybinding will not work.

LogBlueprintUserMessages: [BP_ObserverPawn_C_0] Observer HUD Control Panel isn't present in the level! Keybinding will not work.

How to fix it?

The following needs to be done for any map in which you want to use the Observer role.

  1. Navigate to World Settings

  2. Search for Additional Singletons

  3. Add the required Singletons

    1. BPM_ObserverCameraControls

    2. BPM_ObserverHUDControls

How to test it?

Ensure Observer functions as expected.

USkeletalCrowdMeshStore removed

What’s broken and why?

USkeletalCrowdMeshStore and UJ_ModularCrowdMeshStore types have been removed.

These were previously optional but deprecated. This change removes support for them in an effort to clean up and simplify the USkeletalAnimatedCrowdData.

USkeletalAnimatedCrowdData::DefaultMeshIndices has also been removed. It was generally unused and no longer makes sense in context.

How to fix it?

Any existing mesh store assets should now be deleted.

USkeletalAnimatedCrowdData data assets will need updating to specify the USkeleton used by the crowd, if this hasn’t been done already. See below:

How to test it?

Test that crowd continues to work as before.

Network Level callbacks renamed to Net Relevancy

What’s broken and why?

The OnNetworkLevelChanged callback has been renamed OnNetRelevancyLevelChanged.

The NetworkLevel struct has been renamed NetRelevancyLevel.

How to fix it?

There are core redirectors so these renames will be automatically be applied in your project, but you should use the new names where possible.

How to test it?

Project compiles.

Made the example map use simplified base classes (e.g. M2M_CharacterBase instead of JM_CharacterBase)

What’s broken and why?

As part of our planned simplification work, we are cleaning up the logic in our Example content, removing deprecated features and providing simplified alternatives to core/example features that we are cleaning up.

We have now reparented the example content to new base classes (e.g. M2M_CharacterBase, instead of JM_CharacterBase, where the former is a parent of the latter). This means that a bunch of the logic added at the JM_CharacterBase level or below has been removed.

This includes:

  • Character resizing (awaiting simplification)

  • Roles (awaiting simplification)

  • Capabilities (can be re-added in downstream projects if desired)

  • Out of bounds auto-respawning (awaiting simplification)

  • Camera zoom

  • Approachability movement (click to move, etc.)

  • Sliding & bounce components

  • Motion warping

  • motion capture

  • traversals

  • over-the-shoulder/topdown cameras

  • "inhibitor component"/Player capture component

  • Interaction

  • focus cam

  • Inventory/equipment

  • deprecated chat

  • Ability system

  • debug command component (looks unused, part of the old live config system?)

If you are using the deprecated character (e.g. basing your character off of BPM_Origin_PlayerCharacter, or accessing the JM_CharacterBase directly), there should be no changes. If you are basing your character off of e.g. BPM_M2Example_PlayerCharacter, some functionality will have been removed.

How to fix it?

If you depend on any of the features removed, get in touch - the features will either be re-added in due time, or are not being supported by MSquared. If any are absolutely essential to your project, you can fall back to using the deprecated Origin classes for now, but this is not advised in the long run.

How to test it?

Review the removed features, check your core functionality is still as expected.

Deprecation of Juno/M2 Activities and Venue_Orb Map

What’s broken and why?

The legacy Activities system has been deprecated. This was used extensively in the Venue_Orb map. The blueprint facing API has been deprecated and all assets referencing these functions have either been deleted or modified to remove the references, depending on complexity of their connection to this system.

Areas of note:

  • Venue_Orb_P

    • Removed entirely

  • BP_PlayerController

    • References to Activity widget removed

  • BP_OrbUtility

    • Handle teleport logic removed

  • BPM_FadeToBack

    • No longer gated behind a capability that was previously removed from the platform (Capabilities.ActivityControls)

  • For a full list of affected classes, please refer to ActivityDeprecationCodeChanges.txt

  • For a full list of affected assets, please refer to ActivityDeprecationChanges.txt

If you have content that was built on the Activities API, you will find the deprecation warnings will cause a warning at compile time for your blueprints. If you use our asset linter, assets using this API will fail the linting rules due to these warnings.

How to fix it?

The general advice here is to remove all references to this system ahead of taking this update. Soon we will remove this functionality altogether, which means anything that is still using it will break entirely.

If you are unsure as to whether or not you have used this, you can do a dry run on taking this update and see if there are any new warnings created when linting your content.

If there are warnings and you are not yet ready to remove the content, you can get the linter to ignore these for the time being. To do this, you’ll need to ensure your linting rules use a modified version of JLR_BP_Compiles and you need to add the specific strings to be ignored in the “Allowed Blueprint Warnings Regex” array. This will not work once we fully remove the underlying C++, so please plan accordingly.

If your project relies on any content removed as part of this process, you will need to create duplicates of the affected assets and keep them in project-space to avoid unwanted changes. If these assets inherit from Activity related classes, you must anticipate that these classes will also be removed in the near future.

How to test it?

Check all affected content works as expected.

Performance regression at 18K CCU on Windows native

We are currently investigating a performance regression which was identified during our scale tests using 18000 bots when using an AMD Ryzen 9 5900X / NVIDIA GeForce RTX 3080 device.

This results on framerates of ~20FPS, rather than our 30FPS target.

Unreal D3D12 Memory Leak in cooked clients if minimised

It was observed that if you minimize the game client, it may eventually crash. The resulting callstack may vary, with one observed example being:

[2025.03.26-08.26.30:297][400]LogD3D12RHI: OnlineHeap RollOver Detected. Increase the heap size to prevent creation of additional heaps
[2025.03.26-08.26.30:398][406]LogD3D12RHI: Error: Interfaces.CopyCommandList->Close() failed 
 at C:\b\Game\Engine\Source\Runtime\D3D12RHI\Private\D3D12CommandList.cpp:284 
 with error E_OUTOFMEMORY

Ahead of such crashes, it is clear that memory is leaking, by observing logs along the lines of [2025.03.27-09.26.37:982][760]LogJunoMetrics: Process memory high water mark: 17554MB physical, 22196MB virtual. Until this is fixed, we recommend advising users to not minimize their game window.

Morpheus Platform Release v35

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

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 by SkeletalCrowdComponent 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 the ISkeletalCrowdMeshProviderInterface and all uses of it

  • All 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 and StaticMeshTransform members on the FAnimatedCrowdMemberInitializer .

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 one

    • This uses a different chat behavior

  • WBP_M2Example_TextChat has been retargeted to use the BPMC_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 system

  • BP_Example_PlayerCharacter has been reparented to BP_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.

Morpheus Platform Release v34.1.1

10/02/2025

Please note v34.1.1 removes support for any build on v30 on Pixel Streaming.

Added experimental WebUI plugin

Support for the WebUI plugin has been added, allowing users to create web UIs which are embedded into Unreal and can talk back to the main game.

An example has been provided in the Example Map for you to experiment with. Currently this feature only works on Windows and can have a significant performance impact, but it is under active development and will continue improving over the coming releases.

Standardised approach to animations using M² Skeleton

The bone translation retargeting settings have been changed in the M² Skeleton, which is the skeleton used when loading MML avatars. Most of the bones are now set to use the Skeleton's translations, instead of the animation's translations, which should make M²'s animations more compatible with custom avatars.

Removed legacy Analytics API

BP facing Analytics API removed

What’s broken and why?

The following analytic events have been removed from Blueprints

  • BPC_ApproachabilityMovement

    • Removed event control_interactions_tracked

      • In function “Process Tap”

  • BP_WBL_WaitingPawn

    • Removed event download_launch_context_image_finish

      • After event “Download On Url Received”

  • BP_ItemExecutor_LoudspeakerDevice

    • Removed event loudspeaker_request_event

      • In functions “Turn Off Loudspeaker” and “Turn On Loudspeaker”

  • BPM_VideoScreen

    • Removed event Exit Screen Interaction option

      • In event “On Button Option Requested”

  • BPMC_CrowdAudio

    • Removed event loudspeaker_change_event

      • In functions “Start Loudspeaker Request” and “Stop Loudspeaker Request”

  • BP_AvatarEditorActor

    • Removed event avatar_editor_opened

      • In event “OnAvatarInitialized”

    • Removed event avatar_editor_closed

      • In event “DoneButton”

  • BP_LaunchPad

    • Removed event launchpad_jump

      • In function "Jump"

  • BP_ItemExecutor_Ping_LocationSelector

    • Removed event ping_ability_used

      • In event "HandleLocationSelected"

  • BP_ItemExecutor_Silencer_PlayerSelector

    • Removed event silencer_event

      • In function "Apply to Selected"

  • BP_LoudspeakerVolume_MicStand

    • Removed event loudspeaker_request_event

      • In function "Enable Loudspeaker"

      • In function "Disable Loudspeaker"

  • WBP_EmoteSelector

    • Removed event menu_opened

      • In event "Event notify Activated"

    • Removed event menu_closed

      • In event "Event Notify Deactivated"

  • BPC_MovementAnalyticsComponent

    • Deleted entire component, removing several events

      • heartbeat_location

      • xyz_movement

      • xy_movement

    • Component will no longer be present on BP_M2_PlayerCharacterBase or it’s children

How to fix it?

To preserve the analytics listed above and the associated logic, duplicates of the affected assets need to be made before upgrading to this version, and the analytics called replaced with the appropriate call to the implemented analytics system of your choosing.

How to test it?

Ensure that analytics are captured for the events required.

Change Morpheus terminology to use "split authority" and remove the term “net ownership”

What’s broken and why?

SpawnMorpheusActorWithClientAuthority has been deprecated and replaced with SpawnMorpheusActorWithSplitAuthority.

GetOwningClientConnection has been deprecated and replaced with GetAuthoritativeClientConnection.

The SpawnMorpheusActorWithClientAuthority function was misleading, since the spawned actor is still largely server authoritative. “Split authority” is being adopted as more accurate terminology.

“Owning client connection” in Morpheus is identical to “authoritative client connection”, so we’re removing this terminology entirely to simplify Morpheus.

How to fix it?

Replace all instances in BP code of SpawnMorpheusActorWithClientAuthority with SpawnMorpheusActorWithSplitAuthority and GetOwningClientConnection with GetAuthoritativeClientConnection.

How to test it?

Ensure your Blueprints all compile.

Modified M2 Extras: Skins System

What’s broken and why?

  • Some functions and classes have been modified in the M2 Extras: Skins System

    • ListenToSkinUpdates now takes a delegate called OnSkinUpdated, rather than OnConditionMet.

    • The GetSettingByClass helper takes specifically M2_InstancedObject classes, not any Object

    • These should be fixable by checking for any compile errors in any downstream logic that uses these functions, and reconnecting the pins.

How to test it?

If you are using M2 Extras: Skins System, there may be compile errors. If there are though, they should be simple to fix.

Removed Scale Test related Level Instances

What’s broken and why?

All Level Instances used in ScaleTestMap_Surround_Example have been broken down into the assets that composed them, with the Level Instances then being deleted.

How to fix it?

If these instances have been used elsewhere in your project, please copy the following assets out of the engine and into your project, then fix references to point to the new copies:

M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Gameplay01.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Gameplay02.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Gameplay03.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_PyramidVenue.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Rocks01.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Screens01.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Screens02.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_SetDressing_Aa.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_StadiumLights01.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Structures_Aa.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Structures_Ab.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Structures_Ba.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Structures_Ca.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Structures_Cb.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Aa.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Ab.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Ac.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Ad.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Ae.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Ba.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bb.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bc.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bd.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Be.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bf.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bg.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bh.umap M2Unreal/M2Example/Content/Maps/SubLevels/Maps_LevelInstances/LI_Nexus_Walkways_Bi.umap

How to test it?

Ensure the Level Instances you have used still appear as they did previously.

Parallel delegates for background high frequency events removed from Blueprints

What’s broken and why?

In the combat helper classes, the parallel versions of the background high frequency events (ShootableComponent::OnHitReceivedBackgroundParallel and CombatComponent::OnShotFiredBackgroundParallel) have been make inaccessible to Blueprints.

The OnHighFrequencyEventReceivedParallel parameter in the BP initialiser for background high frequency events UBackgroundHighFrequencyEventLibrary::InitializeBackgroundHighFrequencyEvent has been removed, and the bUseNonParallelDelegates argument is removed with it.

This is because it’s impractical to write thread-safe code from Blueprints. Using them from BPs often resulted in clients crashing, and faulty BP code should never cause a client crash.

How to fix it?

If any functionality is bound to the above events, move the functionality to the non-parallel versions of the delegates instead.

How to test it?

Check that your OnHitReceived, OnShotFired, and any other custom background high frequency event behaviour continues to work as usual.

M2Extras: Widget Handler moved into M2Example, as “UI Mode Helpers”

What’s broken and why?

The old “M2Extras: Widget Handler” plugin has been removed, in favor of the same functionality in M2Example, now that it is being used in our example UI setup. If you relied on the old helpers, you will need to migrate them over.

How to fix it?

Any uses of the old BPFL_WidgetHandler methods will need updating to the BPFL_UIModeHelpers equivalents:

  • MarkWidgetNeedsUIMode has been replaced with RequestUIMode

  • UnmarkWidgetNeedsUIMode has been replaced with ReleaseUIModeRequest

  • HandleUIModeChangeRequest has been replaced with BindToUIModeChangeRequests

How to test it?

If you have no compile errors, you should be good to go!

Morpheus Platform Release v33

13/01/2025

Note: There is a known issue with the base release (v33.0.0), which has been fixed in hotfix version v33.0.2: Some M2 assets fail to package correctly

Please note v33 removes support for any build on v28.0.0 on Pixel Streaming.

Removed 'WebBrowserWidget' and 'WebBrowserNativeProxy' modules

Affected Features: Web Browser

What’s broken and why?

Removed the 'WebBrowserWidget' and 'WebBrowserNativeProxy' modules as the the WebUI plugin has replaced this functionality.

How to fix it?

If using the Web Browser Widget, replace the instance with a Web Interface from the WebUI plugin. The API should be the same.

How to test it?

Play in PIE and see the web browser widget working as before.

Carnival ViewDistanceQuality Settings Rename

Affected Features: Carnival

What’s broken and why?

Carnival scalability settings for quality of meshes have been renamed in favour of model-driven new approach. This means that if any project overridden the Carnival scalability settings, they will not apply anymore, and need to be removed or renamed in favour of the new ones, which are found in BaseScalability.ini file, under ViewDistanceQuality sections.

How to fix it?

If ViewDistanceQuality scalability settings are overridden in a project, they need to match new namings found in BaseScalability.ini file, under ViewDistanceQuality sections.

How to test it?

Only the new cvars present in ViewDistanceQuality sections will have an impact on Carnival visual quality.

Removed ChatGPT node functionality

Affected Features: ChatGPT

What’s broken and why?

Removed the ChatGPT nodes as they are no longer supported.

How to fix it?

Remove the references to all now-invalid ChatGPT nodes.

How to test it?

Ensure project runs as expected.

Removed Remote Viewer related Live Config schema

Affected Features: Remote Viewers

What’s broken and why?

As Remote Viewers has been non-functional for several versions, we are now taking the time to clean up our live config schema as well. This means there are a number of values no longer present by default in game schema:

  • PlayerSpawn.InitialRemoteViewerSpawnArea

  • RemoteViewers.MasterRole

  • RemoteViewers.VisualizerRole

  • RemoteViewers.TimeUntilRVDespawn

  • RemoteViewers.MasterActorTickInterval

  • RemoteViewers.AllowRemoteViewerDespawn

  • RemoteViewers.AllowVisualizerAndPlayerInDeployment

How to fix it?

These were not functional in M2. If you are using these values elsewhere in your own project, please add them to your own Game override Live Config Schema. The recommendation is you copy these values from the old schema before updating, if you find you need these.

How to test it?

Ensure project functions as before.

Removed Legacy Live Config settings from Editor Preferences

Affected Features: Legacy Live Config (Live Config v1)

What’s broken and why?

How to fix it?

How to test it?

Ensure project behaves as expected once migrating any old values to the current version of Live Config.

Removed failover hook

Affected Features: Networking

What’s broken and why?

I’ve removed the event FailoverBeginPlay from Morpheus Actor. It was part of server failover, a half-implemented feature left over from 2022, and now deleted. It’s very unlikely to be used in any customer projects.

How to fix it?

Remove FailoverBeginPlay event nodes from blueprints that inherit from Morpheus Actor.

How to test it?

Ensure project builds and runs as expected. Errors will report:

Could not find a function named "ReceiveFailoverBeginPlay" in 'MorpheusActor'.

Removed references and assets for Remote Viewers

Affected Features: Remote Viewers

What’s broken and why?

Following assets removed:

  • DA_RemoteViewerVisualizerPawnSet

  • DA_Skypark_Pawns_RemoteViewerVisualizer

  • BP_M2_RemoteViewerConnection

  • BP_M2_RemoteViewerLifecycleManager_Example

  • BP_M2_RemoteViewerVisualizer

  • BP_M2_ViewerConnectionSpawner

  • BPM_M2_RemoteViewerMasterActor

  • BPM_M2_RemoteViewerVisualizer

  • BPM_M2_RemoteViewerVisualizerControlComponent

  • DA_M2_Pawns_RemoteViewerVisualizer

References to these have been removed from BP_Origin_GameMode and the following maps:

  • ApproachabilityGym

  • ExampleMap

  • ScaleTestMap

Remote Viewer roles were removed from DT_Origin_Roles

How to fix it?

The feature has been non-functional for several versions, there is no way to fix “Remote Viewers” but you may have to replace references to classes listed above if they have been used elsewhere for non-Remote Viewer related things.

Reach out to Solutions if there is need for “Remote Viewer” functionality going forward.

How to test it?

Ensure project builds and runs as expected.

Removed SkipSignInConfirmationScreen from Game Live Config

Affected Features: Boot flow / sign in

What’s broken and why?

Default Live Config schema no longer has Game value EntryFlow.SkipSignInConfirmationScreen because it was no longer functional or needed by core M2 platform

How to fix it?

Add the following to you Game schema under EntryFlow

"SkipSignInConfirmationScreen": {
	"type": "boolean",
	"default": true,
	"description": "Bypasses the sign-in confirmation screen, streamlining entry for users who are already logged in or in scenarios where authentication is handled differently."
},

How to test it?

This isn’t used in M2 so we cannot say how it should work for you, but you can check it works as expected in the context of your project by restoring the value and checking that WBP_SignInScreen works as expected, or any other project specific locations you have also used this value for.

Deprecated legacy M2 GameModes

Affected Features: Unreal maps/modes

What’s broken and why?

We have deprecated BP_GameMode and BP_Origin_GameMode. All functionality running on these game modes are implementable in project space now, so for greater transparency and ease of use, we've moved both into deprecated.

How to fix it?

If you have either selected as your global project game mode, open "ProjectSettings > Maps & Modes" and reselect your GameMode from the Default Game Mode dropdown.

How to test it?

Cook your project successfully. If you have a bad game mode selected you'll see the following error:

LogWorldBuilderEditor: Display: LogCook: Error: GlobalDefaultGameMode contains a redirected reference '/M2Content/Core/BP_GameMode'. The intended asset will fail to load in a packaged build. Select the intended asset again in Project Settings to fix this issue.

You cannot World Travel to the same map

If you attempt to world travel between worlds that use the same map, it will currently fail, giving LogWorldTravel: Error: Cannot use world builder world travel to travel between the same map '/Game/ExampleMap'.

We are looking into enabling this flow, and will update this in an upcoming release

"Mesh Reproduction Sprite" Niagara systems unsupported on Carnival

Some M2 assets fail to package correctly

NOTE: This has been fixed in hotfix v33.0.2 - if this change impacts you, please upgrade to the hotfix!

A small number of assets currently fail to package within WB projects due to some failing Unreal redirector logic. Assets that fail to resolve will log within the Unreal process:

LogStreaming: Error: CreateExport: <path> - Could not find class object for <classname>
LogStreaming: Warning: Missing Dependency, missing package import 0x110000000C for package <path>

You can workaround this temporarily by copying the M2 asset to your project locally, and referencing that version instead. This will affect functionality such as control panels

Morpheus Platform Release v32

06/12/2024

Latest Binary Version 32.0.0

Please note v32 removes support for any build on v27.0.0 on Pixel Streaming.

Improved API for interest level changes for replicated properties

Users previously encountered challenges when attempting to apply net-foreground-only or net-midground-only status effects, such as displaying a specific attachment exclusively in the midground. These effects were inherently implemented using foreground or midground variables and OnReps. However, when a player transitioned to a lower network level, the status effect persisted unintentionally.

To address this, we delivered an API designed for this use case, promoting a design pattern that ensures status effects are properly canceled and re-enabled in response to changes in the network level. While the Morpheus Actor already included a NetworkLevelChangedEvent event, we enhanced functionality by introducing more granular, property-specific handlers to provide finer control.

Cancelled value added to EM2_HttpResponseStatus

Affected Features: Http

What’s broken and why?

We have added a new “Cancelled” status to the EM2_HttpResponseStatus enum. Whilst this in itself is not breaking, users me be using the “Switch” block in blueprint to handle the http results.

If this is the case, the addition of the new Cancelled status will result in an unmapped pin, which may cause your blueprint to not handle the case of cancelled requests. This would only happen if you explicitly cancel a request.

How to fix it?

You have two options:

  1. If you are using the enum and mapping all but the “OK” pin to a failure state, you should swap to using an Equals “OK” and branch node.

  1. If you still wish to use the switch, you must map this to your cancellation handler (or failure case)

How to test it?

Check your http requests are handling the responses you expect.

World Builder settings migration

Affected Features: World Builder

What’s broken and why?

We’ve migrated some settings from DefaultEditorPerProjectUserSettings.ini to DefaultGame.ini. Nothing will break, but some steps are provided to avoid this causing issues with version control.

How to fix it?

We migrate the settings automatically.

If you’re using a version control system, you’ll need to submit the modified Config/DefaultGame.ini as part of the upgrade.

How to test it?

Navigate to Project Settings -> M2 World Builder and ensure your old settings e.g. Mod Id and Maps are still present:

Crowd Animation blend support

Affected Features: CrowdAnimBlueprint, SkeletalCrowd

What’s broken and why?

Nothing should be broken. In order to support blend nodes within crowd ABP, this change contains some very fundamental modifications to how crowd animations are running, and as such projects should double check crowd animations are working as expected.

How to test it?

Crowd members should be animating as they used to before the change, precisely what this means will depend on the project.

Pubnub-based Chat simplification

Affected Features: Social (Chat)

What’s broken and why?

As part of the Pubnub-based text chat simplification process, we have ported the chat from C++ to Blueprint to allow customers to take control of the implementation. As a result of this, there is one change that must be addressed when taking this version of MSquared.

In order to continue using the current version of text chat you must add the ps.pndsn.com domain to your Developer Dashboard url allow list settings for the Client. See the next section for details.

Secondly, we have removed the “announcements” support. This feature was not used by any projects as so there should be no project impact.

Additionally, the “Fetch Channel History” function on the UM2_TextChatComponent has changed signature from having a delegate passed in, to using a broadcast delegate for all history messages. This is due to the function implementation being moved from C++ to Blueprint. This should only be impactful if you have implemented a custom chat UI.

How to fix it?

To add the ps.pndsn.comas an allowed domain, you must:

  1. Navigate to your developer dashboard

  2. Select the Admin tab

  3. Select External Urls

  4. Expand the Client section

  5. Set "External Url Access" section to "Allow content to access only URLs with specified domains"

  6. Click “+ Add Domain”

  7. Add "ps.pndsn.com" to the new entry

  8. Click Update to save the setting

If your chat UI is using the announcement messages feature of the M2_TextChatComponent; then it is recommended you begin removing the use of it, as in the future the functions will be removed.

When binding Fetch Channel History, you should now bind to the broadcast delegate “On Chat History Message Received” delegate to continue receiving the historical responses.

How to test it?

General chat should function as normal; minus the ability to receive announcement messages.

  • Check your history messages still appear

  • Check you can still send and receive normal chat messages

Cleaned up/consolidated excess DT Roles tables

Affected Features: Roles

What’s broken and why?

The following data tables have been removed:

  • DT_ApproachabilityGym_Roles

  • DT_FeatureTestGym_Roles

  • DT_NexusRoles

  • DT_QARoles

  • DT_RolesExampleMap

  • DT_RolesScaleTestMap

Any uses of them internally have been replaced with our default DT_RolesExample.

The example roles table has also had some changes to it:

  • The “starting inventory assets” have been removed, since this is a feature that is being deprecated.

  • The Director role has been granted 4 “sizes” that it can switch between using + and -.

How to fix it?

How to test it?

In your level(s), go to the world settings, and filter by “role” - if the default role or data tables arrays have missing values, it may be that you were using one of the removed data tables. This will need to be replaced.

Similarly, if you try to change roles, and see that the roles are missing, or that your startup character isn’t as expected, that could be a sign that the role data table needs updating.

You will also see warnings along these lines:

LogLinker: Warning: [AssetLog] [X]: Failed to load '[Y]': Can't find file.
LogLinker: Warning: [AssetLog] [X]: VerifyImport: Failed to load package for import object '[Y]'

If so, that will highlight the removed data tables that are being referenced.

Morpheus Platform Release v31

15/11/2024

Latest Binary Version 31.0.0

Please note v31 removes support for any build on v26.0.0 on Pixel Streaming.

Background character inspection

  • We've exposed the Raycastable System configurations to be in blueprints, specifically the raycastable prioritization config.

  • We demonstrated this by adding more functionality to the Morpheus Inspector:

    1. Allow the users to force Morpheus Actors into Foreground

    2. Allow users to select Crowd Members via mouse clicks utilizing the Raycastable system.

Party Functionality Permanently Disabled

Affected Features: Parties

What’s broken and why?

As part of the M2 Platform simplication process, we have permanently disabled parties and related functionality. As such, it is no longer possible to:

  • Enable party support

  • Create a party

  • Join a party

  • Leave a party

  • Send a party message

  • Receive party messages

  • Use party voice chat

The Party Component is still present but is no longer functional. It will be removed in a future version of the M2 Platform.

How to fix it?

If parties are required in your project, you will need to create or integrate a third party solution. Contact your support representative if you require assistance.

Removed UM2_WebPlatformRealtimeNFTWebsocket

Affected Features: Collections

What’s broken and why?

As part of M2 platform simplification, the UM2_WebPlatformRealtimeNFTWebsocket class has been removed.

How to fix it?

Interface Change: UM2_WebServicesRoleDataProvider / UM2_WebServicesProfileDataProvider

Affected Features: Web Platform Integration

What’s broken and why?

The interfaces to UM2_WebServicesRoleDataProvider / UM2_WebServicesProfileDataProvider have changed. Instead of taking FM2_AuthUserContext as a parameter, they now take int LocalUserIndex. This is to simplify / remove assumptions about users for custom web platform integrations.

This change should not impact anyone yet unless they have implemented their own data providers.

How to fix it?

Instead passing FM2_AuthUserContext to any of the functions (which was hard to determine in Blueprint), you can pass LocalUserIndex. In 99% of cases, this will be 0, except for bots, which would be the index of the current bot.

How to test it?

Profile and role fetching should function as normal.

Deleted UserRolesSubsystem / UserRolesService

Affected Features: Services

What’s broken and why?

As part of MSquared platform simplification; the C++ querying of user roles has been removed to allow users to perform their own queries to either the web platform, or a service of their own choosing.

As a result of this, existing C++ Web Platform roles integration code has been removed.

This change should not impact users as it extremely unlikely that you’ll be manually querying role data.

How to fix it?

If previously you queried roles via either the UserRolesSubsystem or the UserRolesService (Web Platform), then you need to replace those calls with a Get World Service query, passing M2 Web Platform Roles Data Provider or an explicit derivative.

How to test it?

Role querying should work as normal.

CorrelationId added to Response of SendHttpRequest

Affected Features: Http

What’s broken and why?

CorrelationId has been added to the Response event used by SendHttpRequest. This is to allow users to correlate a response event with the request that initiates it; which is useful for storing state between the sending and response handling.

However, if you are using a bound function to handle the responses, you will experience a blueprint compile error due to the signature of the event changing.

How to fix it?

For every function you have bound to the completion delegate of SendHttpRequest, you must add an extra parameter to the Signature:

Name: CorrelationId, Type: Guid

Once you have done this, try compling the blueprint again and saving it.

How to test it?

If the blueprint compiles correctly, then no further action is required (once you’ve saved it).

Skin PDAs need a resave

What’s broken and why?

The underlying skins logic has been moved, but PDAs don’t handle redirectors nicely. As a result, without a resave of the active skin, PIE will be blocked in the “waiting for HUD” step.

How to fix it?

If you have a custom skin for your project, find it, and resave it. Easiest way to check what skin is being used is by going to the project settings → M2 UI Skins, and checking the Default Skin

How to test it?

If you can PIE and successfully enter the world, it has been fixed!

Disabled Remote Viewers Web Platform Connectivity

Affected Features: Remote Viewers

What’s broken and why?

The Remote Viewers feature is being removed as part of platform simplification. This step disables the connectivity of the Remote Viewers system to the M2 Web Platform services, effectively disabling the feature.

Morpheus Platform Release v30

05/11/2024

Latest Binary Version 30.0.0

Please note v30 removes support for any build on v25.0.0 on Pixel Streaming.

Support for multiple unique video streams with Millicast

Although users have been able to create multiple Millicast streams, this feature was experimental and could lead to crashes and low performance due to consuming significant amounts of RAM and VRAM. We've improved this significantly and two simultaneous Millicast streams are fully supported on scales of up to 15000 CCU.

Using more than two Millicast screens is possible and is unlikely to cause out of memory issues, but it is unsupported by MSquared and downstream projects need to test their use case and target hardware.

Support for microphone on Mac

Crowd audio is now fully supported on Mac. The user can now listen to other players, talk with them and configure the input audio device.

This required considerable changes and we are keen to receive feedback on your experience, particularly on audio quality.

Improved Mac performance

We have been focusing on improving Mac performance across the board, focusing on the Mac Studio M2 Ultra (at 5000 CCU) and MacBook Air M2 (at 1000 CCU).

Removed JLR_Plugin_NoFPDependencies

Affected Features: Linting

What’s broken and why?

The firepit linting rule does not do anything, so has now been removed. That means the classes JunoLintRule_Plugin_NoFPDependencies and JLR_Plugin_NoFPDependencies are no longer present. If you have any custom lint rules, the file will be missing.

How to fix it?

There will be a “none” in place of the removed linting rule in any of your custom rule set assets. Remove these. (Or a resave would also be sufficient to stop things complaining)

How to test it?

If your preflights run fine, all is well!


Health in HealthComponent no longer replicated in background

Affected Features: Health Component

What’s broken and why?

The Health variable as part of the HealthComponent is no longer replicated in the background. This is because it was very expensive and could limit the scale of deployments.

How to fix it?

If your project is relying on background health, or the health increased / damage taken callbacks in the background, the game design will need to be adjusted to avoid this.

How to test it?

Check that any health based functionality in your project still works.


Improved Raycastable Crowd Prioritization

Affected Features: Shooting

What’s broken and why?

Raycastable Crowd prioritization is now more configurable from Blueprints.

How to fix it?

Open the RaycastableCrowd asset used by your project’s Animated crowd. This will most likely be in the DA_Pawns asset linked in your Roles Data table.

In the RaycastableCrowd asset, there is a new PriorityCalculation property that exposes multiple prioritization strategies and their configurations.

The default strategies that were in-use before this change were the View Frustum and the Area Of Influence so you will need to enable and configure (based on your project needs) both of these strategies like the following:

How to test it?

  1. Start a PIE session with bots/other players.

  2. Force everyone into LOD1 so they will be using RaycastableCrowd

  3. Shoot at other players and verify they are still receiving damage/interacting.


Removed JM_ModularCharacterComponent and AddedCrowdStaticMeshesOverride

Affected Features: Avatars

What’s broken and why?

In v29 the JM_ModularCharacterComponent was deprecated with the removal of modular characters, and its functions merged into M2M_CharacterAssetComponent. In v30 JM_ModularCharacterComponent has been removed entirely.

JM_CharacterBase::AddedCrowdStaticMeshesOverride and JM_CharacterBase::UpdateDefaultCrowdMemberInitializer have also been removed in favour of the equivalent functions on M2M_CharacterAssetComponent as they’ve been deprecated for several version.

How to fix it?

Anywhere you call a function on JM_ModularCharacterComponent, you should instead call the equivalent function on M2M_CharacterAssetComponent instead. The JM_CharacterBase class has both of these components, so you can get the M2M_CharacterAssetComponent directly from the same actor. v29 had deprecation messages on each function to tell you the equivalent - they are nearly all named exactly the same, except for functions with Interop in the name where this word has been removed.

If you’ve set an asset in JM_ModularCharacterComponent::PostProcessAnimBlueprint you should instead set it in M2M_CharacterAssetComponent::PostProcessAnimBlueprint as this can’t be automatically migrated.

Anywhere you set JM_CharacterBase::AddedCrowdStaticMeshesOverride you should instead set M2M_CharacterAssetComponent::AddedCrowdStaticMeshesOverride. Any call to JM_CharacterBase::UpdateDefaultCrowdMemberInitializer should be replaced by M2M_CharacterAssetComponent::ReloadCharacter.

How to test it?

Blueprints will compile and avatars will behave the same as before.

Morpheus Platform Release v29

17/10/2024

Latest Binary Version 29.0.0

Please note v29 removes support for any build on v22.0.0 on Pixel Streaming.

Flexible HTTPS & WebSocket Library for Unreal

v29 introduces a HTTPS and WebSocket blueprint library for Unreal that can be used to interact with a wide range of external services, with flexible authentication, JSON serialization / deserialization, retries, error handling, etc. This is to support Projects implementing more complex integrations with web services from the Unreal Client and Server.

It’s also been designed in a way where M2 Web Platform services can be interacted with from this library vs. from bespoke Unreal APIs, creating a single way of interacting with any external web service.

If you have any questions around this functionality, please reach out to your support engineer.


MML Avatars by default

v29 introduces MML avatars as default avatars to be used in experiences.

  • The old ModularCharacter system and scheme sets have been removed

  • By default, players will load their MML avatar from their profile

  • If this fails or there isn’t one, it’ll load the Default MML URL which is a configurable field on the M2M_CharacterAssetComponent. By default this is blank.

  • Projects should set a suitable default MML and/or pawn mesh in their own character blueprints.

Please note that in v30 the JM_ModularCharacterComponent will be marked as deprecated and removed for use. This will be marked as a breaking change in the v30 release notes.

Reach out to your support engineer if you have any questions.


Tooling to test LOD/ network level transitions

v29 introduces in-editor tooling to detect issues with:

  • crowd members

  • background network levels

  • transitioning between foreground and respective background versions

Previously, projects could test these manually by setting live config and connection parameters, but this wasn't utilised much.

There is now in-editor tooling for highlighting these issues and automated techniques to shift network and rendering levels so these issues are revealed immediately.

Reach out to your support engineer if you have any questions.

Removed BP_NPCCrowdActor

Affected Features: NPC Crowd Actor blueprint

Does this breaking change need publishing for external users? Yes

What’s broken and why?

BP_NPCCrowdActor was an experimental blueprint that spawned a random crowd of non-interactive fake modular characters, for making a map look more populated. With the removal of the modular character system this is no longer functional and has been removed.

How to fix it?

Projects should use their own system of adding fake crowds to a map, for instance using instanced meshes.

How to test it?

The map should run without errors.


Removed high-scale mode

Affected Features: Live config, networking

What’s broken and why?

Six live config fields have been deleted from the morpheus schema: five containing the substring HighScale plus Movement.UseHighResolutionMovementQuantization.

Any projects relying on high-scale mode (we don’t believe there are any) may encounter performance problems.

How to fix it?

Remove overrides for those live config fields from the project live config file.

How to test it?

Game should run without live config errors.


Removed the BT_BotAvatarClothes bot behavior

Affected Features: bots

What’s broken and why?

The following bot related assets have been removed

  • BT_BotAvatarClothes

  • BTT_RandomizeOutfit

This is because the underlying logic has been removed and so the behaviors are now non-functional

If you had reference to these assets, you may see errors.

e.g. if you had a reference to the “clothes” bot behavior in your bot behavior store, it’ll have been removed, and give a warning. It is fine to just resave, or you could remove the map entry for cleanliness

How to test it?

Everything should compile and run as expected.


Forced-foreground characters now default to using Carnival

Affected Features: Avatars

What’s broken and why?

By default, roles that are forced into the foreground don’t render with Carnival and instead use the standard GLTF renderer. This is typically used on large 'presenter' characters. The is a live config to control this Carnival.DontUseCarnivalForForcedForeground which used to default to true but has been changed to false.

This change was made because the GLTF renderer isn’t as performant, and to simplify the rendering by pushing all characters through the same renderer. Currently large presenters may not look detailed enough when using Carnival, so until that is fixed you can use this live config to revert to the old behaviour.

How to fix it?

Set Carnival.DontUseCarnivalForForcedForeground to true if your project uses scaled-up forced-foreground characters, and they have lost detail since taking the update.

How to test it?

Forced-foreground characters will look the same as previously.


Removing modular character support

Affected Features: Avatars

What’s broken and why?

Modular Characters have been deprecated for a long time, in favour of MML avatars. Modular Character support is now being removed.

This first part is removing the ability to set Avatar Scheme Sets in the Roles tables.

  • Previously players could have one of three types of avatars - their default MML avatar from the profile, a modular character defined in a scheme set, and finally the default mesh asset on the pawn.

  • Modular Characters were defined in a data asset deriving from J_AvatarSchemeSet and these could be set per role, and were used if the player didn’t have an MML avatar set on their profile. These have now been removed, so players without an MML avatar will now use the pawn’s default mesh.

  • The default pawn mesh has also been updated to SK_Andor_01 instead of the black silhouette mesh. As there are no longer and scheme sets, offline players and bots would look broken with the silhouette avatar so a generic default mesh has been set.

The second part is the removal of all Modular Character functions from JM_ModularCharacterComponent. These allowed you to manually specify a scheme set for a player, modify individual components, and randomize the avatar from the scheme set. These are no longer supported with the removal of modular characters.

Finally the M2M_CharacterAssetComponent::OnCharacterLoaded delegate now has a parameter which is the URL of the avatar that was successfully loaded. You may need to add this parameter to your bound functions.

How to fix it?

For users without an MML avatar, projects should set an appropriate fallback mesh as the default mesh on their pawn blueprint class (replacing the new default SK_Andor_01). This will be your blueprint that derives from BP_M2_PlayerCharacterBase. Find the Mesh component and set the SkeletalMeshAsset to the default character mesh you wish to use:

How to test it?

Players will load if with either their MML avatar or the default pawn mesh.

Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.


Morpheus Platform Release v28

04/10/2024

Latest Binary Version 28.0.0

Please note v28 removes support for any build on v21.0.0 on Pixel Streaming.

Crowd Audio settings exposed in BP

Crowd audio parameters have now been exposed in Blueprints to allow enhanced crowd audio customisation.


NFT socketed attachments via MML

Previously the M² platform assumed that any MML NFT was an Avatar. v28 introduces support for NFT MML objects to be "socketed" meaning they can be used as accessories.

Feel free to reach out to your support engineer with any questions.

Simplified Access to “Get Server World Time Seconds” on M2M Morpheus Game State

Affected Projects: All

Affected Features: Morpheus Game State Singleton

What’s broken and why?

Previously you were required to check if the Morpheus Game State was available before you could get Server World Time, but now we have a static function that works much like the above workaround.

We will return the time from our singleton, but if it isn’t ready yet you will be returned the time from the underlying native GameState.

How to fix it?

Replace any broken references with the new static version of the function

How to test it?

Verify the behaviour remains the same as before.


AutoOpen now defaults to “on” for Control Panels

Affected Projects: All

Affected Features: Control Panels

What’s broken and why?

Control panels inheriting from BPM_ControlPanelBase will now auto-open by default. This may mean that if you had control panels you wanted to not auto-open, that directors will have them open even if not intended.

How to fix it?

For any control panels that you don’t want to auto-open, go to their BPM, go to the ControlRegister component, and uncheck the Auto Open flag.

How to test it?

If you PIE, and switch to a role that can view control panels (e.g. director), there should only be the control panels auto-opening that you want to be shown.


Cleanup of crowd audio settings

Affected Features: Audio

What’s broken and why?

  • The CrowdAudio|Source and CrowdAudio|Input settings that were previously in CrowdAudioOberverSettings have now been split into a new CrowdAudioSpeechSourceSettings. This helps clarify the distinction between the two types of settings: Speech Source Settings are related to your voice, and how it is sent to other people. Observer Settings are related to how you hear other voices, and what muffling etc. you apply to them.

  • Some unused settings have been removed, e.g. DensitySettings, AmbientVolumeSettings and StableLoudnessSettings. If you were using them (outside of those in Observer/SpeechSource settings), feel free to unplug them - they weren’t doing anything anyway.

How to fix it?

If you used any of the settings that got moved, it will give compile errors. Please move them across to the appropriate ones in CrowdAudioSpeechSourceSettings.

Similarly, if you had overrides to these in a morpheus.override.json file, LiveConfig will fail to generate. To fix this, you will need to move the settings to the right place.

How to test it?

Everything should compile. If so, you’re good to go!


“Splash screens” have been removed

Affected Features: Splash Screen

What’s broken and why?

The “Splash Screen” logic (the SplashScreenDisplayData in the world settings) has been removed. This is because it has been unsupported for some time, and was introducing a large number of bugs. Since it is an unused feature, and wouldn’t be too hard to implement downstream, there’s no need for us to maintain it.

How to fix it?

If you were using it, let us know, and we can advise on how to achieve the same thing downstream.

The basic idea here though, if you do need to do this yourself:

  • The splash screen worked by adding a step to the bootflow (after your player had spawned, and its profile has been set up, but before the player was given control) where it added a widget, and blocked the bootflow until the splash screens/videos had finished.

  • You can achieve a similar effect by adding a bootflow listener to e.g. HandlePlayerProfileCompleted, and adding a widget on top, disabling player movement if needed.

  • Or alternatively, you could extend the player profile setup step, which already opens a widget before giving the player control, and add your splash screens there.

How to test it?

If you were expecting some splash screens that are no longer there, please reach out!

Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.


Morpheus Platform Release v27

20/09/2024

Latest Binary Version 27.0.0

Please note v27 removes support for any build on v22.0.0 on Pixel Streaming.

MSquared Character Configuration

Previously, M² devs had to dig through Avatar scheme sets and understand complex new abstraction layers to change their character pawn. In v27 this is now more aligned to Vanilla Unreal.


Custom Animation Variables

Developers are now able to use new animation variables, outside of the default, to control your Animation Blueprint.


Realtime KV Store

v27 adds ReadKeys & UpsertKeys to the Key Value Store service; exposing the ability to read & write directly to the kvstore instead of needing to use the UserDataSystem.

This works with all kvstore scopes (organization, project, world), as well as the Server/Client Authority store types.

In summary, this feature allows for the KV Store to be immediately responsive.

Removed unused CustomSettingDefaultValues live config fields

Affected Features: Config

What’s broken and why?

A few previously unused live config flags have been removed from the CustomSettingDefaultValues section. The only two that are still in use are over_the_shoulder_cam and hold_to_sprint. This change will typically have no effect, but if you previously attempted to override them, live config will fail to generate.

How to fix it?

Go to your any game.override.json in your project. If they have overrides to the CustomSettingDefaultValues section that aren’t the mentioned ones, remove them. The section should look something like this (or have less than this if you don’t need the overrides:

"CustomSettingDefaultValues": { "over_the_shoulder_cam": "on", "hold_to_sprint": "off" }

How to test it?

If you PIE, the live config error should not show up.


Using profile MML avatars by default

Affected Features: Avatars

What’s broken and why?

The Character.UseCharacterFromProfile live config now defaults to true. This means that by default, users will load their default MML avatar stored on their profile when entering an experience. This is usually what you want anyway, so you no longer need to explicitly enable this live config.

How to fix it?

To maintain the old behaviour, set Character.UseCharacterFromProfile back to false in your project’s live config overrides.

How to test it?

Load into your experience while logged in with a default MML avatar set on your profile, and check if it loads or not.


“Paint the park” removed

Date of change: 09/09/2024

Affected Features: Paint the park

What’s broken and why?

The “Paint the park” feature, and all its related code & assets have been removed. This feature was not documented, and has been untouched for years.

How to fix it?

If you were using the feature, please get in touch! The expectation here is that nobody was using this.

How to test it?

PIE - there should be no differences to your experience.


Remove AnimVars:Forward and AnimVars:Right

Affected Features: Animation

What’s broken and why?

The Forward and Right anim vars have been removed. This is because they were slightly broken, and somewhat obsolete anyway due to UnrotatedSpeed2D doing a similar thing.

How to fix it?

Hopefully no changes needed - if you weren’t using the anim vars, nothing will break. If you were, please get in touch! Hopefully your use case can be instead handled by the AnimVars:UnrotatedSpeed2D var instead.

For cleanliness, if you made your own ABP as a duplicate of the M2 one, you can delete the AnimVars:Forward and AnimVars:Right macros, but them being present won’t break anything, unless they were used.

How to test it?

Play in editor/Cook. If there are no compile errors related to missing variables, you’re good!


“Player Spawner Singleton” removed from list - morpheus actor now controlled via the game mode

Affected Features: Core

What’s broken and why?

To simplify the user experience of developing on MSquared, we’ve made things more in line with native Unreal’s style. One of these changes was to add support for defining the player morpheus actor class on the game mode, so you don’t need to make a child of the player spawner singleton, update it in your world settings, and set the player morpheus actor class there. The old flow of requiring a player spawner singleton was deprecated, and is now being removed.

There should have been warnings in v25, about this flow being removed in an upcoming release. This is that release.

If you have old player spawners (inheriting from e.g. BPM_Origin_PlayerSpawner) these will now not work and will need to be deleted.

How to fix it?

  • Go to your game mode (also found in the world settings), and set the PlayerMorpheusActorClass to the actor class that was in your player spawner singleton

  • Delete the old player spawner singleton, now that it is not used.

  • (It may complain about deleting the player spawner singletons, if they were previously used in maps. If so, resaving the maps will fix those up. Or equally, force deletes should be safe here, since the spawner isn’t actually being used following these changes)

How to test it?

Play in editor. When the game is running, search for BPM - if the BPM player character is the correct one, you’re all good!

Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.


Morpheus Platform Release v26

05/09/2024

Latest Binary Version 26.0.0

Please note v26 removes support for any build on v21.0.0 on Pixel Streaming.

This release focused on stability and bug fixes rather than new features

In lieu of feature highlights, please accept a picture of the Release Managers cat.

Moving Live config and UI scaling from Origin Player character to base

Affected Features: Character Camera

Does this breaking change need publishing for external users? Yes

What’s broken and why?

As part of our clean up into a single player character class the origin live config settings have been moved into base. By default BP_M2_PlayerCharacterBase will now apply camera boom offset values from live config.

How to fix it?

If you wish to stop the live config camera boom offset values from being applied, turn off the live config value: Approachability.UseCameraBoomOverrides .

How to test it?

Test your experience and note the camera will be in the same position it was before this change.


Moving sprint and walk functionality from origin player character to base

Affected Features: Walking & Sprinting

What’s broken and why?

We are migrating our Origin player character functionality down into base as part of a clean up to offer a single extendable class to downstream projects. As part of that BP_M2_PlayerCharacterBase sprint/walk functionality is now gated behind capabilities, and a hold_to_sprint setting which controls whether the feature will revert to normal movement after the button is released or not.

If you are extending from the BP_Origin_PlayerCharacter this will not be broken for you, only if you were already extending from BP_M2_PlayerCharacterBase.

How to fix it?

If you want to mimic previous behaviour from PlayerCharacterBase the user will need the Capabilities.Movement.CanSprint / CanWalk capabilites. Then make sure the hold_to_sprint custom user setting is on (it is on by default at time of writing).

Please note that holding to both sprint and walk (vs pressing the button to toggle) are currently coupled; it is not possible at this time to have one require holding while the other be a toggle.

How to test it?

Load up a level & attempt to sprint / walk. The respective buttons should either be disabled, require holding, or act as a toggle based on settings.


Moving BP_Skypark_PlayerCharacter_FacialMocap & dependencies to M2Development

Affected Features: Facial Mocap

What’s broken and why?

BP_Skypark_PlayerCharacter_FacialMocap will no longer be available in the packaged editor. We are simplifying our Character classes to present a single clear class to extend. This class was used as a tech Demo and does not contain supported functionality, and as such is being removed from the editor.

How to fix it?

There is no fix for this, as we are removing an unsupported class. If you were using this class please reach out to your support engineer

No Known Issues with this release

Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.

This includes testing for both low latency (5k ccu) and High Scale (15k ccu) modes.


Morpheus Platform Release v25

23/08/2024

Latest Binary Version 25.0.0

Web Socket Connections

Users are now able to interact with web socket servers from Blueprints allowing connections to a web socket server to send/receive Json messages from Blueprint.


Create New Object Definitions

You can now create objects using the M2_WebPlatformUserCollectionsService. This can be done on servers or clients. If done on clients, the object will also be added to the user collection for the authorised user.


Changes to BP_Origin_PlayerController

Less of a feature and more of an FYI -

Prior to V25, the Player Morpheus Actor Class is not available from the game mode. Instead, to make sure your correct morpheus actor is spawned, you should also update the "Player Spawner".

Documentation on the changes can be found here: Morpheus Platform Release v24

09/08/2024

Latest Binary Version 24.0.0

Improved Template Project

The v24 Base Project now comes with a number of starting assets which can be freely modified and experimented with, such as:

  • Approachable Controls

  • Inventory & Quick Tabs

  • Place Mode

  • Emotes

And More!

Below are breaking changes which may need to be considered if you are ingesting this release into your project.


Remove the function ToggleUIMode from BP_PlayerController

Affected Features: Toggling UI Mode

What’s broken and why?

Deprecating the function ToggleUIMode and replace it with more explicit calls to enter or exit UI mode

How to fix it?

Replace usages of ToggleUIMode with TrySetUIMode

How to test it?

Make sure UI mode enters and exits as expected


Updating BP_M2_PlayerCharacterBase to add an array of context mappings instead of a single variable

Affected Features: Character movement input mapping context

What’s broken and why?

BP_M2_PlayerCharacterBase was adding a variable mapping context, CharacterMovementMappingContext. It became clear that a downstream user may want to add multiple contexts at this point, or none. So it has been updated to an array to allow any number of contexts to be added at the point of character possession.

How to fix it?

If you were previously changing the value of CharacterMovementMappingContext, you will instead want to add your mapping context to the new array OnPossessInputMappingContexts (& remove the default context if not intending to use it).

How to test it?

Compile and run your game, check that your input still functions as expected.

No Known Issues

New performance metrics will be available from v25 onwards

Morpheus Platform Release v23

25/07/2024

Latest Binary Version 23.0.0

Blueprint HTTP Functionality

We have introduced a new system that enables Blueprints to call, command and interact with external API's via HTTP. This is the first version of this system with updates to come in future releases which will expand on current capabilities.

We have also provided some walkthroughs and guidance below:


OBS Integration for Advance Broadcast Tooling


Notification System

A new notifications system has been included which has the ability to queue and display notifications passed to clients as packed structs.


Improved Upload Interface

Uploading content from the M² Editor has a new and improved interface and experience.

Below are breaking changes which may need to be considered if you are ingesting this release into your project.


Removing support for legacy user collection endpoints

Affected Features: User Collection

What’s broken and why?

We have removed legacy methods of calling FetchObjectDefintion and MakeTransferRequest.

How to fix it?

Use the newer API functions with the same names.

How to test it?

Ensure you functionality works as intended.


Crowd Audio reverb live config settings moved

Affected Features: Audio

What’s broken and why?

All the live config settings relating to crowd audio’s “reverb” feature have been moved into a single setting struct, to make things neater. Some unused flags were removed, and some new ones were added, which will have no effect. However, some flags were moved. It’s very unlikely that overrides for these will have been applied, but if a project did have overrides, they will need to be migrated across.

The affected config flags were moved from CrowdAudioSettings.PreprocessorSettings to CrowdAudioSettings.ReverbSettings:

  • EnableUnrealReverbApplication

  • UnrealReverbGain

  • EnableBotReverb

How to fix it?

If you have any morpheus.override.json files, make sure the values above are moved to the correct parent (ReverbSettings instead of PreprocessorSettings). If you don’t have any of these, then you don’t need to do anything!

How to test it?

Run the game - spatial audio should sound the same as before.


Interact function on Interact handler now takes an array of components

Affected Features: Interaction

What’s broken and why?

The Interact function now takes an array of Interactable components rather than a single component as a parameter. This is to re-enable MML interactables which have a unique component per interaction option, and thus multiple components per actor.

Any instances of calling the Interact function will no longer compile.

How to fix it?

Use a MakeArray node from the interactable component you are looking to pass in, then pass this array in as the new parameter.

How to test it?

Verify that your blueprint now compiles and your interaction logic runs as expected.

Below is a list of all known issues with this release


Millicast screens may be presented in a poorly optimised fashion, with sharp jagged edges or issues with shading

The map select buttons in the new upload menu do not function as expected. A workaround is to go to Project Settings -> M2 World Builder Data and modify the maps you wish to be uploaded there instead. This will be fixed in the next release.

Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.

This includes testing in both low latency (5k ccu) and High Scale (15k ccu) modes.


Low Latency Performance

High Scale Performance

Morpheus Platform Release v22

17/07/2024

Latest Binary Version 22.0.0

Player Contextual Actions

  • Users can their select the target user in the social panels on the Web Portal or in world.

  • Users can directly select the target users avatar.

  • Once selected, users can select options from a contextual menu for example:-

    • Inspect Profile

    • Add/Remove friend

    • Block

    • invite to Party

    • Travel to their Location

    • Trade Options

    • etc

Shows the ability to add and adjust contextual actions that are available when other users are selected in the world.

Below are breaking changes which may need to be considered if you are ingesting this release into your project.


Role and Capability Updates

Affected Features: Roles and Capabilities

What’s broken and why?

Nearly all projects roles will be broken as role tables have been been adjusted heavily in MSquared. Many capabilities have been renamed or removed. This is in an attempt to clean up/simplify roles and capabilities.

How to fix it?

All references to capabilities that have been removed/renamed will need replacing in downstream assets.

Our old reference data table “DT_Origin_Roles“ has not been removed yet to allow people to view the how roles were setup before this change. It will be removed once projects have updated their roles.

Capability removals:

  • Capabilities.DirectorBoothAccess

  • Capabilities.DeathRing2ndWave

  • Capabilities.DeathRing3rdWave

  • Capabilities.VoiceNormalVolume.Boss

  • Capabilities.VoiceNormalVolume.Presenter

  • Capabilities.VoiceNormalVolume.Participant

  • Capabilities.ChatAdmin

  • Capabilities.Tutorial.AutoComplete

  • Capabilities.Inventory.BindQuickbarActionsInHandler

  • Capabilities.Repulsor.RegularAccess

  • Capabilities.Approachability.HoldClickToMoveForwards

  • Capabilities.Approachability.ClickMove

  • Capabilities.Approachability.EdgeLook

  • Capabilities.PlayerCount.FeatureFlag

  • Capabilities.Director.UseControlPanelHandler

Capability renames:

  • Capabilities.ObserverAudioMixer - Capabilities.ControlPanel.CanOperateAudioControls

  • Capabilities.LiveConfigPanel - Capabilities.ControlPanels.LiveConfigControlsEnabled

  • Capabilities.ActivityControls - Capabilities.ControlPanels.Enabled

  • Capabilities.Director.AutoOpenPanels - Capabilities.ControlPanels.AutoOpen

  • Capabilities.AlwaysShowProfileEmote - Capabilities.Emotes.AlwaysShowProfileEmote

  • Capabilities.Voice.VoiceCommands - Capabilities.VoiceChat.CommandsEnabled

  • Capabilities.HideAvatarSelection - Capabilities.CharacterCustomization.AvatarSettingVisible

  • Capabilities.CanWalk - Capabilities.Movement.CanWalk

  • Capabilities.CanWalk - Capabilities.Movement.CanSprint

  • Capabilities.PlayerContent.Interop.ImportMML - Capabilities.MML.CanImportMML

  • Capabilities.PlayerContent.MML.ImportMML - Capabilities.MML.AdminAccess

  • Capabilities.InteropViewSourceUrls - Capabilities.Pedestals.CanSeeMMLUrls

  • Capabilities.PlayerCount.Always - Capabilities.PlayerCount.Enabled

  • Capabilities.Voice.VoiceAdmin - Capabilities.VoiceChat.Admin

  • Capabilities.Voice.VoiceLoudspeaker - Capabilities.VoiceChat.LoudspeakerEnabled

  • Capabilities.Voice.VoiceAuthority - Capabilities.VoiceChat.Authority

  • Capabilities.Voice.VoiceCommands - Capabilities.VoiceChat.CommandsEnabled

  • Capabilities.Voice.VoiceToggle - Capabilities.VoiceChat.ToggleEnabled

  • Capabilities.Voice.VoiceChat - Capabilities.VoiceChat.Enabled

  • Capabilities.IgnoreMassFollow - Capabilities.DeviceSettings.Capabilities.IgnoreMassFollow

  • Capabilities.IgnoreMassTeleport - Capabilities.DeviceSettings.Capabilities.IgnoreMassTeleport

  • Capabilities.CanModifyPlayerUserCollections - Capabilities.UserCollection.CanModifyPlayerUserCollections

  • Capabilities.ObserverAudioMixer - Capabilities.ControlPanels.AudioControlsEnabled

  • Capabilities.CanUseCinematicGraphics - Capabilities.Settings.CanUseCinematicGraphics

  • Capabilities.ControlSettings.Approachability.VirtualCursor - ControlSettings.Approachability.VirtualCursor

  • Capabilities.Interaction.CanOperateDoors - ControlSettings.Doors.CanOperateButtons

  • Capabilities.OBSBroadcaster - ControlSettings.Streaming.OBSBroadcastEnabled

  • Capabilities.Mocap - ControlSettings.Mocap.Enabled

Additional Fixes:

  • The following functions have been removed from AJM_CapabilitiesManager: HasVoiceChatAdminCapability, HasVoiceChatCapability, HasVoiceChatAuthority. You should not need to go through the CapabilitiesManager to check for these capabilities as they are all accessible in blueprints.

  • Capabilities.Approachability.HighlightInteractables has now been replaced by the live config value Game.Interaction.HighlightInteractingObjects. It is now no longer configurable per role.

  • Capabilities.ObserverControls previously only disabled the emote and character customization UI. This capability has been replaced with opt in capabilities: Capabilities.Emotes.Enabled and Capabilities.CharacterCustomization.Enabled.

  • ForceToForeground was previously enabled directly on the J_RoleConfiguration structure. A new capability Capabilities.Morpheus.ForceToForeground has replaced this bool.

  • EmotesEnabled was previously enabled directly on the J_RoleConfiguration structure. A new capability Capabilities.Emotes.Enabled has replaced this bool.

How to test it?

Test your project roles and all functionality related to capabilities are functional as expected.


BP_PlayerController & BP_Origin_PlayerController cleanup

Affected Features: Player Controller

What’s broken and why?

Player Controller now handles getting live config values through ConfigUpdatedDelegate & GetLiveConfigValues . This change means the BP_Origin_PlayerController no longer needs to bind to the delegate or have it’s own event to get live config values, it now overrides the parent function GetLiveConfigValues.

If you were previously overriding GetLiveConfigValues from the Origin controller your controller will no longer compile.

How to fix it?

Override parent function GetLiveConfigValues . Make sure the call to Parent:GetLiveConfigValues is in the function. Move your logic from the old event override into the new function override.

How to test it?

Check that your controller compiles and that the logic runs as expected.


Ongoing BP_PlayerController cleanup

Affected Features: Player Controller

What’s broken and why?

Several event handlers stemming from begin play have been cleaned up into functions and renamed: Event: OnGameStart → function: OnBootflowStarted

Event: OnAuthActorSpawned → function: OnAuthActorSpawned Event: OnRenderTargetSpawned → function: OnAuthPawnSpawned

Event: OnInGame → function: OnBootflowFinished

How to fix it?

If your player controller was overriding any of the previously mentioned events, instead override the corresponding function and move your logic into the function.

How to test it?

Confirm that your Player Controller compiles and that the affected logic runs as expected.

Changed OnTextCommited event on WBP_M2_StandardInputTextButton to pass the Text and Commit Method through it

Affected Features: Standard UI

What’s broken and why?

Changed OnTextCommited event on WBP_M2_StandardInputTextButton to pass the Text and Commit Method through it

How to fix it?

Update any references to this event to accomodate the changes

How to test it?

Confirm that any blueprints that reference this event compiles and runs as expected


Removal of some modular character slots

Affected Features: Modular Characters

What’s broken and why?

The legacy Modular Character system is being deprecated in favor of MML avatars. Modular characters require a lot of background replicated properties for each ‘slot’, even though most slots are never used. To reduce the cost of the legacy system, the 11 least used of the 31 named slots are being removed. Each character can still have up to 20 meshes each, however some renaming may be required if you use any of the removed slots. The removed slots are: ArmL, ArmR, LegL, LegR, Crown, Jaw, Glasses, Earring, Lips, Wings, Tail.

How to fix it?

The slots have no semantic meaning, so if you use one of the removed slots you just need to switch it to one of the remaining slots. The only changes required for each affected slot are:

  1. Change any direct uses of the removed enum values. E.g. use Eyes instead of Glasses.

  2. Rename the affected modular character PDA directory to the new slot. E.g. rename /MyPDAPath/MyCharacter/Glasses/PDA_Sunglasses to /MyPDAPath/MyCharacter/Eyes/PDA_Sunglasses

How to test it?

You modular characters should behave as before with no missing parts.


BPC_M2_CharacterZeroGExample removed from BP_M2_PlayerCharacterBase

Affected Features: Zero-G (locomotion?)

What’s broken and why?

The BPC_M2_CharacterZeroGExample component isn’t needed by default, and thus has been removed from the base character. All related functionality has been isolated into the component itself.

How to fix it?

If you still require BPC_M2_CharacterZeroGExample, please re-add it on your character BPs deriving from BP_M2_PlayerCharacterBase.

How to test it?

Check that your character still responds to movement input correctly. If you use Zero-G in your project, enable it through the component and check that the movement input works as expected.


WorldBuilderData override image removed

Affected Features: World Builder / Self Serve platform

What’s broken and why?

We have removed the override image in the World Builder Data settings in Project Settings in favor of using the mod and world images.

How to fix it?

If you did not use an override image, or your override image was the same as your mod or world, you don’t need to do anything.

If you had a different image set, you need to take the image you used for the override image and set it for the mod or world via the dashboard by clicking “Update Image” on your world or mod page.

How to test it?

Launch and join a world. You should see your mod or world image used for the splash screen.


Deprecated UserData functions removed

Affected Features: User Data / Key Value Store

What’s broken and why?

The following deprecated methods have been removed from the UserDataStore Function Library due to the obsolete underlying api being removed.

  • ReadUserDataObject

  • ReadUserDataObjectBatch

  • WriteUserDataObject

  • WriteUserDataObjectBatch

How to fix it?

These methods have been flagged as deprecated since April 2023 and there have been no hits on the apis for >6 months so it’s unlikely anyone will be affected. Additionally, gameplay systems often consume these apis via the Persistence system, which was ported over a long time ago.

If you find that your system is using the legacy methods, you will need to port over to the replacement methods:

  • ReadUserDataValue

  • ReadUserDataValueBatch

  • WriteUserDataValue

  • WriteUserDataValueBatch

However, the replacements aren’t 1:1 in that there’s a potential for them to use different backing data structures.

If you believe that you have data in the old apis that you wish to keep, then please contact the MSquared Web Platform support.

How to test it?

Swap over to the new Read/WriteDataValue methods and verify that your system can still persist data.

Below is a list of all known issues with this release


Millicast screens may be presented in a poorly optimised fashion, with sharp jagged edges or issues with shading

Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.

This includes testing in both low latency (5k ccu) and High Scale (15k ccu) modes.


Low Latency Performance

High Scale Performance

can now be used and MSquared-specific documentation is available here:

Initial documentation can be found here:

Given the limitations imposed on our customers by using our platform’s analytics, the decision was made that we should avoid projects implementing analytics with our existing system. We're now providing a viable off-ramp which allows customers to handle their own analytics using JSON. More details can be found here:

To implement your own Analytics, please refer to this guide:

The Legacy Live Config settings are no longer visible in Editor Preferences. We have a new version of Live Config (see ). This change was only removing the exposed options of a defunct system.

If you are still keeping values in this area of the Editor Preferences, please look over the and ensure you have configured your values correctly in the currently supported system before taking this update.

Making particle systems that track the character's mesh (e.g. following the tutorial outlined here: ) will not currently work with carnival actors. This means that non-auth characters using MML avatars (including LOD0) will not be able to display such particle effects.

If you want the default roles setup, please use DT_RolesExample. If you want custom roles behavior, it is best to use your own roles table. (See )

Documentation is available in the .

If you require this funtionality, you can implement it in your own project by using the and

Refer to for more guidance.

We no longer support (the alternative to low-latency mode); the deleted fields are the ones that activated it and controlled its behaviour. We’ve dropped the feature because low-latency mode is fine for the maximum scale requirements of all existing projects.

Projects should transition to using MML avatars:

Documentation can be found here but please reach out to your support engineer if you have any questions:

Documentation can be found here:

Documentation can be found here:

Documentation can be found here:

Documentation can be found here:

Documentation on this feature can be found here:

Docs on how to use this new system and current limitations can be found here:

How to configure external URL access:

Walkthrough example:

An example counter service:

How to validate identity:

M² now includes an integration with in order to help you stream high-quality footage of your experience in real-time to platforms such as Twitch, TikTok or YouTube.

Docs on how to use this can be found here:

Information of current capabilities and customisation options can be found in the documentation:

Multiple interfaces have been combined for easier observation of your upload progress as well as providing better observability of .

For more information please see:

We expect all projects to recreate their roles from scratch. Please use this document to aid in this process: You probably want to copy DT_RolesExample and make adjustments, adding/removing roles and updating capabilities where needed.

🎮
🔑
â†—ī¸
đŸ–Ĩī¸
this guide
AI State Trees
https://docs.msquared.io/creation/unreal-development/features-and-tutorials/bots#using-state-tree
https://docs.msquared.io/creation/unreal-development/features-and-tutorials/web-ui
https://docs.msquared.io/integrations/3rd-party-analytics
https://docs.msquared.io/integrations/3rd-party-analytics#setting-up-mixpanel-analytics
Release Notes for v19.1.1
Live Config docs
https://youtu.be/5yI6FU-6Jzo?t=499
https://docs.msquared.io/creation/unreal-development/features-and-tutorials/game-roles#example-setup
Raycastables system page
Web Socket Connection
M2 Web Platform API documentation
Enabling Raytracing for Crowd Members
high-scale mode
Avatars | Public Docs
https://docs.msquared.io/creation/unreal-development/features-and-tutorials/communication/spatial-audio#crowd-audio
https://docs.msquared.io/developers/useful-reading/differences-in-unreal-development-workflow/msquared-character-configuration
https://docs.msquared.io/developers/features-and-tutorials/avatars/bespoke-character-animations
https://docs.msquared.io/tutorials-and-features/web-services/web-socket-connections
https://docs.msquared.io/tutorials-and-features/user-collections/user-collection-service-in-unreal/creating-objects-definitions
https://docs.msquared.io/developers/getting-started/using-the-template-project
https://docs.msquared.io/tutorials-and-features/web-services
https://docs.msquared.io/tutorials-and-features/web-services/configuring-external-url-access
https://docs.msquared.io/tutorials-and-features/web-services/walk-through-example
https://docs.msquared.io/tutorials-and-features/web-services/walk-through-example/example-counter-service
https://docs.msquared.io/tutorials-and-features/web-services/validating-identity
OBS (Open Broadcaster Software)
https://docs.msquared.io/production/broadcasting-an-event/obs-integration
https://docs.msquared.io/tutorials-and-features/notifications
upload errors
https://docs.msquared.io/developers/getting-started/uploading-content
https://docs.msquared.io/tutorials-and-features/roles/game-roles
An example particle effect tracking the SK_Andor_01 mesh
Pumpkin - The Cat