๐ฅ๏ธVersion History
New versions of the editor are aimed to be released every 2 weeks.
Each editor release announcement below includes:
new feature highlights
breaking changes (make sure you check when updating)
known issues
performance benchmark information
See this guide on how to update your existing project to a new editor release.
Mยฒ 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.
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.
Mยฒ 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.
Documentation can be found here: https://docs.msquared.io/tutorials-and-features/web-services/web-socket-connections
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.
Documentation can be found here: https://docs.msquared.io/tutorials-and-features/user-collections/user-collection-service-in-unreal/creating-objects-definitions
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: https://docs.msquared.io/developers/reference/setting-up-play-in-editor#the-character
Added Scope to RequestDelegatedAuthToken (UM2_WebPlatformDelegatedTokenService)
RequestDelegatedAuthToken (UM2_WebPlatformDelegatedTokenService)
Affected Features: UE integration with the Web Platform
Whatโs broken and why?
The web platform scope was previously hardcoded to World, which caused issues in PIE. Instead, have allowed this to be configured.
How to fix it?
Add a scope to the call in Blueprint. If in doubt, use Project (although World is preferred).
How to test it?
Should see a delegated token be issued.
Removing Get/SetBackgroundRotation from CombatComponent
Affected Features: Action Gameplay
Whatโs broken and why?
Get/SetBackgroundRotation in M2M_CombatComponent has been removed because it was too expensive for the Mark decoder.
How to fix it?
Remove any instances of SetBackgroundRotation and replace instances of GetBackgroundRotation with the MorpheusActorโs rotation (via MorpheusActor->MorpheusActorMovementComponent->GetCurrentMovement().Rotation).
How to test it?
Test that instances in your game code that relied on background rotation are working correctly.
Replacing Unrealโs game state with a morpheus game state
Affected Features: Engine
Whatโs broken and why?
Projects now need to point to a morpheus game state in their game mode. They can use the default M2M_MorpheusGameState.
Also, all calls to GetGameState are now deprecated and they should instead call GetMorpheusGameState to access the same functions
How to test it?
Test that your project compiles without warnings and that Play-in-Editor does not crash
Removed some respawning callbacks
Affected Features: Respawning
Whatโs broken and why?
The HandleRespawnStarted
and HandleRespawnEnded
callbacks have been removed, and respawning is now driven via Blueprints.
The bRespawning and RespawnTime variables have been moved to the BPM_M2_PlayerCharacter BP.
The respawn timer is in the BPM_M2_PlayerCharacter blueprint under Respawning. To override the default respawn-on-death behaviour, override the Start Player Respawning event.
How to test it?
Test that your respawning is still working correctly.
Removed unused settings tables (and WBP_Login)
Affected Features: Settings
Whatโs broken and why?
The old unused settings tables have been removed, since the only asset still in use is DT_Origin_SettingList
The assets that have been removed:
DT_SettingList
DT_Showcase_SettingList_Press
DT_Showcase_SettingList
WBP_Login
How to fix it?
If you refer to one of the old settings, it may get lost. in that case, please update your references to DT_Origin_SettingList
(If you refer to the WBP_Login
widget, you will need to use a different widget. If this is in the case, and itโs not an easy fix, please get in touch!)
How to test it?
If you open your esc menu, you should still have the same settings you are expecting.
Addition of J_SettingAsset Param to the J_SettingExecutor::Execute event
Affected Features: Settings UI
Whatโs broken and why?
Possible need to fix up (re-save / re-compile) any UI Settings Executorโs that override / provide a custom Execute
Event
How to fix it?
Should just need to refresh / replace the Event: Execute
node in the executor graph. Existing M2 executors required no change.
How to test it?
UI Settings widgets should work as expected.
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.
Mยฒ 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!
Documentation on this feature can be found here: https://docs.msquared.io/developers/getting-started/using-the-template-project
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
Mยฒ 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.
Docs on how to use this new system and current limitations can be found here: https://docs.msquared.io/tutorials-and-features/web-services
We have also provided some walkthroughs and guidance below:
How to configure external URL access: https://docs.msquared.io/tutorials-and-features/web-services/configuring-external-url-access
Walkthrough example: https://docs.msquared.io/tutorials-and-features/web-services/walk-through-example
An example counter service: https://docs.msquared.io/tutorials-and-features/web-services/walk-through-example/example-counter-service
How to validate identity: https://docs.msquared.io/tutorials-and-features/web-services/validating-identity
OBS Integration for Advance Broadcast Tooling
Mยฒ now includes an integration with OBS (Open Broadcaster Software) 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: https://docs.msquared.io/production/broadcasting-an-event/obs-integration
Notification System
A new notifications system has been included which has the ability to queue and display notifications passed to clients as packed structs.
Information of current capabilities and customisation options can be found in the documentation: https://docs.msquared.io/tutorials-and-features/notifications
Improved Upload Interface
Uploading content from the Mยฒ Editor has a new and improved interface and experience.
Multiple interfaces have been combined for easier observation of your upload progress as well as providing better observability of upload errors.
For more information please see: https://docs.msquared.io/developers/getting-started/uploading-content
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.
Mยฒ 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.
We expect all projects to recreate their roles from scratch. Please use this document to aid in this process: https://docs.msquared.io/tutorials-and-features/roles/game-roles You probably want to copy DT_RolesExample and make adjustments, adding/removing roles and updating capabilities where needed.
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:
Change any direct uses of the removed enum values. E.g. use
Eyes
instead ofGlasses
.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.
Mยฒ Platform Release v21
08/07/2024
Latest Binary Version 21.0.1
Hotfixed to resolve an issue with the Meadow Base Project
Mac Native Client - ALPHA
Events can now be accessed by downloadable Mac Native clients.
This is an Alpha feature with more work to be done until fully stable.
This should be enabled by default but please contact support if you have any issues.
For hardware requirements please see docs: https://docs.msquared.io/admins/minimum-hardware-requirements#native-mac-game-client
Party Management in Unreal
You are now able to add and leave parties from Unreal, and send messages to parties without having to go back to web.
See documentation here: https://docs.msquared.io/tutorials-and-features/parties
Simple Party Voice Chat
Non spatialised voice chat for parties and groups that enables clear communication between users
Docs on current capabilities can be found here: https://docs.msquared.io/tutorials-and-features/communication/spatial-audio#party-chat
Mยฒ Version Update Improvements
Streaming clients will no longer break when upgrading to new versions. Editors will let you know when new releases are available.
Enable DRACO glTFs
We now allow DRACO compression on glTF and GLB files. For use in the crowd rendering and through MML. Learn more about MML here https://docs.msquared.io/tutorials-and-features/mml
Player Action Inhibitor
An optional โPlayer Captureโ component that can be applied by BPโs (such as interactables or gadgets) to inhibit what actions are available to a player. Unlike the capabilities we are not fully removing the playerโs ability to do these actions, but are allowing the capturing object to determine how to handle attempts to use features such as movement or interaction.
An example usage would be applying the Player Capture component to a seat. When a player interacts with the seat, the seat โcapturesโ them and inhibits their ability to move or interact with other objects. Unlike capabilities, it allows us to detect a player wants to move, and gracefully allows them to transition to a movement ready state by playing a standing animation.
Other examples would be any minigame where we wanted to override the default controls throughout it's duration.
See documentation here: https://docs.msquared.io/tutorials-and-features/gameplay-content/the-character-capture-and-character-inhibitor-components
Avatar Selector
Users can select an AVATAR Button that is part of the the main HUD that opens their Avatar Menu Panel. In this panel they have access to an Avatar Selector, Wardrobe and other Avatar related things.
INITIALLY, we have implemented the Avatar Selector which works as follows:
Users can see all the Avatars they in their Collection - showing their name they have given it and thumbnail image.
Their currently selected Avatar is the first in the list (and marked as Active) - this is presented large on the screen in 3D.
Users can select through the list of Avatars and SELECT one - when they do so the 3D model is loaded and replaces their current selected avatar as they select them. Invalid avatars also work but remain greyed out in both view.
There is a prompt to ACCEPT or CANCEL the action to switch avatars.
If users select ACCEPT, their currently selected Avatar changes to that view and they can exit the menu to see the new avatar in world.
Cancel takes them back to the avatar selector.
Clothing in Inventory
Users can now access clothes from their inventory.
Users can then click to equip items.
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
M2Services config restructure
Affected Features: M2Services config
Whatโs broken and why?
To consolidate config definition, weโve moved all M2_Services
config into the M2Services
config. We shouldnโt have had two config definitions at any point, and this change rectifies that.
The two config classes that were in the legacy config file and have now moved are UM2_DomainSettings
and UM2_WorldUserDataComponent
.
How to fix it?
Checking your projectโs Config
directory for any ini files with M2_Services
in their name. Ensure to check for any variants that might include ByStream
. Either rename the file to remove the underscore (eg. M2_Services.ini
>> M2Services.ini
) or if the destination file already exists, consolidate the changes of both files into the destination file.
How to test it?
Verify youโre able to launch a client in editor, and youโre able to connect to a deployment and access your projectโs roles.
Quickbar TabsData array moved from WBP_QuickbarTabManager to M2M_TabbedQuickbarComponent
Affected Features: Tabbed quickbars
Whatโs broken and why?
The TabsData
array in WBP_QuickbarTabManager
was renamed to PreviewTabsData
, and should be used only for previewing tabs in the Widget Designer. The OverrideTabsData
array in WBP_ItemManagement
has been removed, and projects are expected to define their tabs in a M2M_TabbedQuickbarComponent
on their Morpheus Player Character. The WBP_QuickbarTabManager
will reference the data in M2M_TabbedQuickbarComponent
if found on the player character, otherwise it will fall back to the PreviewTabsData
.
How to fix it?
Checking with an older editor version, take note of all OverrideTabsData
entries from WBP_ItemManagement
and any TabsData
entries in WBP_QuickbarTabManager
. In the latest editor, add these into a M2M_TabbedQuickbarComponent
on the Morpheus Player Character. (This component should already exist on BPM_Origin_PlayerCharacter
)
How to test it?
Ensure only the desired quickbar tabs display and work as expected.
Rename of folder SettingAssets to SettingData in M2Content/UI/Settings
Affected Features: UI Sliders
Whatโs broken and why?
Two assets have been moved, M2Content/UI/Settings/SettingAssets/DA_DefaultSliderSetting.uasset
and M2Content/UI/Settings/SettingAssets/DA_OnOffToggleSetting.uasset
to M2Content/UI/Settings/SettingData/
. This is to adhere to Mยฒ's linting rules.
How to fix it?
Core redirects have been added so ideally you shouldnโt have to fix anything. If you have UI assets or data tables like DT_SettingList
which had references to the removed assets, you may have to fix those references manually to point to these assets again.
How to test it?
If your Audio sliders and other sliders in your UI appear and work fine, this has been resolved.
Meadow map assets removed
Affected Features: Base Project Meadow Template
Whatโs broken and why?
The Meadow map consisted of assets which were unable to be distributed at scale.
These assets were removed so any references to those assets are also removed.
How to fix it?
Resave or delete the Meadow map to remove any of the warnings or errors you see.
How to test it?
Cook and upload; the upload should succeed as normal.
Millicast screens may be presented in a poorly optimised fashion, with sharp jagged edges or issues with shading
Mยฒ Platform Release v20
12/06/2024
Latest Binary Version 20.0.0
Audio: Mic Check
We have introduced a simple and easy to use interface to test microphone functionality and audio quality before engaging in communication.
It detects whether the user has a working microphone, shows if they are loud enough and can loopback the user's speech back at them without anyone else in the world hearing it.
This interface can be presented as part of the event entry process (first time user flow) and can easily be accessed again in the settings or as part of the speak button afterwards.
This feature is meant to ensure clear and reliable voice transmission in the metaverse and ease users into voice chat.
World Object Interactions
Allowing users interact with in-world objects (MML or otherwise).
This feature delivers:
Foundational interaction system for MML and non-MML Unreal objects
Interaction list (presenting the verbs of an object on a list)
Focus camera on objects
Object targeting and highlighting
Keyboard shortcut support for the interaction list
This enhances on the features documented here: Interaction Advanced Features | MSquared Platform Documentation
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
Removed legacy chat server from singletons list
Affected Features: Legacy text chat system
Whatโs broken and why?
ChatServerClass
has been removed from the singletons list. This was only required for the legacy text chat system, and would create a chat server actor in world. No projects should still be using this system.
How to fix it?
If you really need the legacy system you can add the chat server class back into the AdditionalSingletons
section in the world details.
How to test it?
Text chat continues to work.
Various Audio Mixer channels and SoundClasses have been renamed/added
Affected Features: Audio
Whatโs broken and why?
Various Audio Channels / Sound Sub Mixes and Sound Classes (and corresponding Sound Control Buses) have been added/renamed to create the following Audio Mixer hierarchy:
How to fix it?
Any audio assets with an inappropriate SoundClass can be assigned one of the new Classes (which map 1:1 to the above Submix hierarchy. This can be done by setting the Class property on the audio asset. Setting a Class will automatically assign the correct submix, ensuring that the sound responds to volume sliders, etc.
How to test it?
The AudioMixer role can be used to view the new mixer hierarchy (by tapping I), the channels, and any audio content being received by them can be seen in the Mixer UI.
Moving AutoProfiler to its own plugin
Affected Features: AutoProfiler
Whatโs broken and why?
Due to development on the AutoProfiler for end-to-end tests, features within M2Content are needed in the AutoProfiler which cannot be accessed from M2Core. For example, waiting to reach the target CCU bot count and finish shader compilation requires M2Content. Because of this and the need for future extension, the AutoProfiler has been moved into its own plugin called M2AutoProfiler.
How to fix it?
Projects will need to include M2AutoProfiler as a plugin. M2Development.uproject and M2StarterProjectBP.uproject have already been updated.
How to test it?
Verify that the uproject successfully cooks.
Renaming OnInteractionRequested
to OnOptionSelected
OnInteractionRequested
to OnOptionSelected
Affected Features: Interaction
Whatโs broken and why?
The delegate OnInteractionRequested
in the interactable handler component was a bit of a misnomer, as it implies that it is broadcast at the point when the user instigates an interaction. It actually broadcasts at the point when the user selects an option. Previously this was a minor problem but as part of the interaction refactor I have added a new event OnInteractRequested
which is broadcast at the point of an interact being requested, as such the old delegate needed a clarity rename.
How to fix it?
The core redirect should take care of the problem, but if your class is attempting to bind to OnInteractionRequested
, make sure it now binds to OnOptionSelected
instead.
How to test it?
Verify that any event you had previously bound to OnInteractionRequested
is being called when you expect it to.
Removing โSingle target interactionโ from player controller
Affected Features: Interaction
Whatโs broken and why?
Previously the flow to trigger an interaction was to call TriggerSingleTargetInteract
on the player controller, which then kept track of if it thought a single target interaction was in progress (vs no longer functional multi target) and handled a bunch of logic under the hood which added complexity and made the system more brittle and harder to understand.
How to fix it?
You can now simply call Interact
on the Interactable handler, passing through the component you wish to interact with. This component can be found by calling FindTargets
on the handler, with a targeting strategy to use for this as the parameter, or by any other external means.
How to test it?
Verify that your interaction still occurs using the new flow.
Removing UmediaPLayyer::OpenUrlInBackgroundThread
UmediaPLayyer::OpenUrlInBackgroundThread
Affected Features: Engine
Whatโs broken and why?
OpenUrlInBackgroundThread is being removed as some of the code which it interacts with is not thread safe and subsequently using it can lead to a crash.
This function is not used any where in m2, I believe it was discovered to not be stable previously and was switched over to using a stable variant (not on a background thread); but the risky function was not removed.
How to fix it?
Use the OpenUrl
function instead of OpenUrlInBackgroundThread
.
How to test it?
Verify that your url opens as expected.
Modifications to Currency Widgets
Affected Features: Currency Widgets
Whatโs broken and why?
We have two example widgets for displaying currency. We have decided for simplicity to remove WBP_Currencies and keep WBP_Currency. WBP_Currency has also been updated so that it can be configured to display whatever currencies you like rather than all currencies in the project.
How to fix it?
Replace any use of WBP_Currencies with WBP_Currency or your own widget implementations. If you opt to use WBP_Currency, ensure itโs configurable โCurrenciesโ property is configured suitably.
Refactor of MML Inventory Component
Affected Features: Staring MML inventory items
Whatโs broken and why?
M2_MMLInventoryComponent - Removed M2M_PlaceModeComponent - Removed M2_MMLItemFunctionLibrary - Removed
We are refactoring the M2_MMLInventoryComponent and moving it into blueprints. This is because our example logic for turning user collection objects into inventory items live in blueprints. There is now a single extendable flow for managing user collection objects and adding representative inventory items.
How to fix it?
If you are using M2_MMLInventoryComponent or M2_MMLItemFunctionLibrary, reach out to the support channel to help fix the issue. If you are using M2M_PlaceModeComponent, you should be able to change referances of it to BPMC_PlaceModeComponent.
How to test it?
Check your MML user collection objects are still being turned into inventory items.
Changes to StartingObjects Live Config
Affected Features: Staring MML inventory items
Whatโs broken and why?
Due to a refactor, it no longer makes sense to add starting MML objects to your inventory using the Inventory.MML live config values.
How to fix it?
You should now use the settings under UserCollection.StartingObjects.MML instead. This will add objects to your user collection that can then be interpreted as inventory items.
How to test it?
Check your offline MML objects and devices appear as expected.
Avatar Editor refactor
Affected Features: Avatar Editor
Whatโs broken and why?
Common avatar editor functionality was moved the AvatarEditorActor into a component on the player so other systems could use it modify and save your avatar. The flow of initialising and opening the AvatarEditorActor has changed as you now need to supply it with the player that will be using it.
How to fix it?
If youโve made your own copy of BP_AvatarEditorActor
then you need to call SetCurrentPlayer
instead of using HasItemDefinitions()
and InitFromCurrentPlayerAvatar()
. See the updated BeginPlay
and OpenEditor
in BP_AvatarEditorActor
for an example of how it should work.
If possible though, stop using your own copy and go back to using BP_AvatarEditorActor
as a base. This applies to Indus as it only took a copy to get some features early.
How to test it?
Avatar Editor should open as normal.
Mยฒ Platform Release v19.1.1
Hotfixed version to add in some additional fixes for the Live config v1 shutdown as well as address some streaming client issues identified with downstream projects.
30/05/2024
Latest binary version 19.1.1
Move.ai Realtime Full Body Motion Capture
The actor can come to Improbable office and start streaming their movement within minutes.
See documentation here Move.ai | MSquared Platform Documentation
Avatars: Faces & Hairstyles
A wider selection of faces and hairstyles have been added to be chosen by users in the Avatar customiser.
Avatars: Adding Attachments
Attachments that can be added to any MML Character (our "Origin M2 Avatar", ingested NFTs or Imported characters) through socketing, using our Web and Unreal Avatar Editors.
Adding appropriately tagged sockets to the default character MML to support Hats (top of head), Glasses (top of face), Back (back), Hands (right and left) on our Origin M2 Avatar.
Providing a way to add and validate appropriate tagged sockets to ingested NFT or imported characters. 3. Resolve edge cases. such as if a random MML is imported with socket attachment points that are not supported. or providing warnings to a user that the model they have chosen doesn't support sockets.
Doing this will enable users to use the Wardrobe to equip characters with objects such as hats, glasses, wings (backslot) and hand held items from their collection.
See documentation here https://docs.msquared.io/tutorials-and-features/avatars/avatar-attachments
Live config v1 shutdown
v19 includes Array support in M2LiveConfig, and the removal of console commands for the old live config system.
For more information on the Live Config system please read https://docs.msquared.io/tutorials-and-features/live-config
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
Interaction Targeting Strategy cleanup
Affected Features: Interaction
Whatโs broken and why?
M2_DefaultTargetingStrategy
renamedM2_CursorLineTraceTargetingStrategy
to be more explicit about itโs functionality rather than implying intended use case at the time of creation.Removed
BP_ExplicitTargetingStrategy
, was deprecated a while back as part of the interaction refactor. It was originally implemented to do several tasks not idiomatic to the system and is being removed in a robustness pass.Removed
BP_ActorTargetinigStrategy
, which was a temporary patch to maintain expected functionality until further refactor work could be done.
How to fix it?
Make sure any assets which previously referenced M2_DefaultTargetingStrategy
are updated to use M2_CursorLineTraceTargetingStrategy
. It is not expected that the deprecated targeting strategies are being used any where, but if you were using one of them to hold a target to be used later; it is now possible to simply call Interact(InteractableComponent* interactable)
with a previously discovered interactable, so caching a target is no longer necessary.
How to test it?
Check that interactions still occur as expected.
Decoupling Interaction from Targeting strategies
Affected Features: Interaction
Whatโs broken and why?
The InteractableHandlerComponent
has been refactored to allow interaction without relying on the under-the-hood targeting strategy. This is to make the interaction system simpler to use, and not have under-the-hood targeting potentially blocking an interaction the user expects without being clear why.
Several functions have been removed, including Target()
and Interact()
has changed.
How to fix it?
In order to trigger an interaction you simply need to call Interact(InteractableComponent* Interactable)
passing the component you wish to interact with as the param. The target component can be obtain by using FindTargets(const TSubclassOf<UM2_InteractionTargetingStrategy> StrategyToUse)
or by any other means.
How to test it?
Verify that interaction is working as expected.
Purchase Manager Actor Refactored into a subsystem
Affected Features: Purchasables
Whatโs broken and why?
The purchasable manager actor has been replaced with a subsystem and world component. This should make configuration simpler for projects.
How to fix it?
Use the world component to configure the purchasables in your world by adding the purchasable data tables the were used on your now depricated purchasable manager actor.
How to test it?
Ensure all your purchasables are stillโฆ purchasable.
Game Relevant User Collection System Depricated
Affected Features: User Collection
Whatโs broken and why?
The system has been removed as it is redundant.
How to fix it?
You will need to listen to updates coming from the user collection subsystem.
How to test it?
Ensure all you previous logic functions as desired.
Combat API has breaking changes and assets have been renamed or deleted
Affected Features: Action Gameplay
Whatโs broken and why?
Some of the combat API has been changed and projects using it will need to make changes to keep this working. Additionally, the combat folder and gym has been cleaned up and assets that projects may have been using as base assets may have been deleted or renamed, or had functionality stripped.
How to fix it?
Where blueprints fail to compile or functionality doesnโt work, use the examples in the combat gym as base points to fix up the project.
Assets that have been deleted or renamed are in M2Unreal\JunoSkypark\Content\Core\Combat.
How to test it?
Play the game and see that it works as usual with combat mechanics.
AvatarEditor changed to use dynamic render targets
Affected Features: Avatar Editor
Whatโs broken and why?
A change was made to the default avatar editor BPs and render target material to make it only create render targets on demand for perf reasons. Indus took a copy of the original BPs to work around some other limitations, but still uses M_AvatarEditor_RenderTarget
which was changed. If you've not made a custom avatar editor, no changes are required.
How to fix it?
Quickest fix is to migrate to use your own copy of M_AvatarEditor_RenderTarget
before updating to v19. The better fix is to remove the custom editor BPs and revert back to the M2 ones, as they now support the required functionality so the custom version shouldnโt be needed. Speak to @Andrew Fenwick for assistance.
How to test it?
Avatar editor should continue to show the character model.
Refactor Interaction Targeting Strategies from Unreal Interfaces to base UObject & rename
Affected Features: Interaction
Whatโs broken and why?
Any Targeting strategies that implemented the IM2_TargetingStrategy
Interface will no longer work as expected. Using ScriptInterfaces for these caused some complexity and stopped us from adding some desired usability features, such as allowing a user to select which strategy to use from a dropdown.
This is in preparation to refactor the Interaction Handler to be more user friendly & robust.
How to fix it?
Any Targeting strategies which implemented the IM2_TargetingStrategy
Interface will instead need to re-parent to the UM2_InteractionTargetingStrategy
base class.
How to test it?
Test that your interaction targeting is working as expected.
Removed M2M_Seat asset
Affected Features: Seats
Whatโs broken and why?
Previous removal missed the actual asset. Base class and references were already handled, but this persisted and was blocking preflight on other interactables.
How to fix it?
This was already officially deprecated, so if something breaks please refer to the โInteractable Seats Removed From Originโ breaking change entry from 14/03/2024
How to test it?
Ensure all BPโs compile as expected.
Mยฒ Platform Release v18
14/05/2024
Latest binary version 18.0.0.251414
Self-Serve: Access Controls
Metaverse Owners (and delegates) can manage org perms
Org management
Permission groups for event runners / content creators / overlaps
Restrictions on worlds launchable per user / durations / sizes
See documentation here: https://docs.msquared.io/admins/managing-access
Please note that this feature is available to all projects, regardless of Platform Release version.
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
IsItemValidForQuickbar uses ItemKeys instead of ItemNames
Affected Features: Inventory & Quickbar
Whatโs broken and why?
UM2_ItemQuickbarFunctionLibrary::IsItemValidForQuickbar
and all related IsItemValidForQuickbar
functions have int32 ItemKey
instead of FName ItemName
as their item parameter. This allows inspection of an inventory itemโs properties, before assigning it to a quickbar. This is in preparation for the upcoming User Collection Item work, where properties will be more often used.
How to fix it?
Check that all blueprints inheriting from M2M_QuickbarComponent
or M2_InventoryViewComponent
still compile correctly. For those that have IsItemValidForQuickbar
overrides, please get the ItemName as such:
How to test it?
Quickbar functions as expected, and all blueprints compile without errors or warnings
User Collection Object Tags to Properties
Whatโs broken and why?
M2Connect are chaning the structure of user collections so that they no longer have a tags property. Tagging is now done by adding key value pairs to a โpropertiesโ object on the user collection objects data property.
How to fix it?
If you use user collection object tags in someway, you will want use on of the following to gather a list of strings you can compare against: M2_UserCollectionFunctionLibrary::GetObjectContentTypes - If you are looking for โapplicationโ, โaudioโ, โimageโ, โmodelโ or โvideoโ. M2_UserCollectionFunctionLibrary:: GetObjectProperties - If you are looking for anything else.
How to test it?
Ensure the functionality using tags now works with the new logic.
Removal of M2_UserCollectionItemDetails
Affected Features: User Collections
Whatโs broken and why?
We are removing M2_UserCollectionItemDetails in favour of a different configuration method.
How to fix it?
You can now configure the uid to item PDA mapping in the world settings.
Renamed Skypark BPM character and PlayerSpawner to Origin
Affected Features: gameplay
Whatโs broken and why?
BPM_Skypark_PlayerCharacter
has been renamed to BPM_Origin_PlayerCharacter
, and BPM_Skypark_PlayerSpawner
has been renamed to BPM_Origin_PlayerSpawner
, to fit our naming conventions, and more clearly establish them as our โdefaultsโ. Redirectors should handle all BP use cases, but if there are any config references to the old files, they will need to be fixed up.
How to fix it?
Ctrl+F in the config files for _Skypark_
- if there are any hits for the old file names, they can be fixed up like so
Open image-20240423-164935.png
How to test it?
If you used the skypark character earlier, nothing should have changed.
Moved Remote Viewers action handling to blueprints
Affected Features: Remote Viewers
Whatโs broken and why?
The logic for handling Remote Viewer โActionโ messages has moved from C++ to BP in order to give end users the ability to customise this logic - eg, adding project-specific ActionType
s. With this change, the base M2M_RemoteViewerControlComponent
C++ class will no longer automatically handle emote
messages and emotes will not trigger when a web viewer selects one from the web UI. This logic has instead been moved to a new BPMC_RemoteViewerVisualizerControlComponent
blueprint component. Action messages are received by overriding the Perform Action
event
How to fix it?
If your project is setup to use remote viewers and you already have a project-specific blueprint class that inherits from M2M_RemoteViewerControlComponent
, you will need to reparent this class to the new BP base class BPMC_RemoteViewerVisualizerControlComponent
in order for remote viewer-triggered emotes to function as expected.
How to test it?
Follow the steps below in the editor to trigger an action from an HTTP request and ensure that the action is received correctly in Blueprints.
The Unreal portion of the Remote Viewers system can be tested in-editor for quick iteration in a few ways:
Test spawning, user name display and avatars using the
remoteviewers.simulate.start
andremoteviewers.simulate.stop
commandsConfigure the editor to connect the first PIE instance using
M2_RemoteViewerConnection
connection typeConfigure the remote viewer simulator settings as required. Tooltips for each setting explain their purpose
Launch 2 or more PIE instances and run the
remoteviewers.simulate.start {number to simulate}
command in the remote viewer client instance. This will generally be the only PIE window where no players are visible as remote viewer clients do not receive updates for playersEnsure that visualizers are spawned as expected using the other PIE instances
Use the
remoteviewers.simulator.stop
command to stop sending updates. It will take some time for visualizers to despawn (controlled byTime Until RVDespawn
property on the Remote Viewer Master actor that is being used by your project)
2. Test spawning and actions using Postman or Curl:
a. Ensure that Use Development Messaging
is enabled in editor preferences
b. Launch a PIE session with a remote viewer client, as described above
c. Send web requests to simulate those that would be sent from the web. There are two PubNub topics which control different aspects of the system
State update messages:
These messages are sent frequently by the web UI in order to signify the presence of a user and some base state. When the master actor stops receiving updates for a user within a configurable time window, they will be despawned. Different uuid
s can be used to simulate a number of different users and can be any unique string identifier
POST <https://ps.pndsn.com/publish/<pubnub-publish-key>/<pubnub-subscribe-key>/0/remoteviewer-state.lc-<channel-suffix>/0?uuid=<any-string-identifier>
Body:
{ "Name": "Mr R Viewer", "AvatarURL": "https://some.mml.avatar" (optional field) }
Action messages
Action messages are sent from the web UI to trigger arbitrary actions for a remote viewer. An example of these would be โemotesโ which are implemented in base Origin code but can be overridden on a project specific basis.
POST <https://ps.pndsn.com/publish/<pubnub-publish-key>/<pubnub-subscribe-key>/0/remoteviewer-action.lc-<channel-suffix>/0?uuid=<any-integer-identifier>
Body:
{ "ActionType": "emote", "ActionId": "PDA_Emote_Wave" }
Mยฒ Platform Release v17
26/04/2024
Latest binary version 17.0.1.250624
M2LiveConfig
M2LiveConfig is now set as standard for all projects.
Find documentation here: https://docs.msquared.io/tutorials-and-features/live-config
Controls & Interface: Approachable Control Scheme Improvements
Approachable and lean back navigation and interaction controls, optimised for touch or mouse-only / one handed participation.
See here for documentation: Approachable Controls | MSquared Platform Documentation
Approachable controls are designed to provide an intuitive casual user experience for our event participants. Features include:
Click to move (path find to location or object)
Click to follow (an avatar)
Hold to move (mouse only equivalent of manual control)
Automated movement speed (walk or sprint intelligently)
Automated camera movement
Edge look
Clickable interface for device and object interactions
Improvements for Beta:
Enhanced camera smoothing
Click to turn avatar
Setting standardised movement behaviors for MSquared Platform
Detailed usage documentation added
Analytics hooks added
Emotes: Emotes as Possessions
Emotes are modular possessions:
They are show in the user's inventory / collection as a possession
Different projects, roles or even users can have access to different emotes
Just like other possession types, emotes can be given, earned, bought or traded or taught to each other.
๏ปฟ Example would be earning Dance Moves in Courbet, which can then be used in events or shown to each other.
๏ปฟSee docs: Emotes as Possessions (items) | MSquared Platform Documentation
World Objects: Microphone (Improvements)
Speakers expect the act of speaking to an audience be simple and intuitive, just like walking up to a mic in real life.
Our Microphones make it clear and easy to understand when Speakers are broadcasting to the entire group, and reduce the need for any technical or control-based understanding of the product.
This is a World object that amplifies the voice chat volume of the speaker in front of it.
Improvements for this existing capability are:
Audio improvements: Make it sound more authentic as if the volume is coming from the speakers placed in the venue
UX improvements: Make it clearer that microphone is active, replace the spatial voice chat button with a distinct microphone button (same approach used with the Loudspeaker gadget that fulfils the same functionality)
Gameplay: Quickbar Tabs & Modes
Containers for different quickbar pages and interaction modes. For example, gadgets and consumables
Quickbar can be (optionally) minimised and then expand from these buttons.
Buttons can be used to switch between different pages of the quickbar and configured according to project needs
For example: Press "React" button to see emotes, "Equip" button to see gadgets
Buttons can be shown, disabled or hidden conditionally
For example: People with the host or director role gets the "Host" button that expands a Quickbar containing all host gadgets
Buttons can change how the user / avatar interacts with the world
For example: Press "Place" button to enter Place Mode where MML objects are highlighted and clicking on them allows moving or configuring them (instead of walking up to them, which happens outside the Place Mode)
For example: Press "Camera" button to detach from your avatar and control a Drone Cam which may or may not come with its own Quickbar.
Gameplay: Inventory & Quickbar Modularity
Less opinionated shortcut interface - provides more flexibility for projects.
Turn Quickbar into a generic shortcut interface for items
For example: gadget, consumable, object, ability, emote...
This includes being able to present certain types of gadgets in their own quickbar tab or inventory page (e.g. gadgets and consumables being separated despite consumables technically being gadgets)
In the future, we will make it open to non-items, e.g. settings, locations on the map; however, current iteration is limited to items
Make Quickbar and Inventory less interdependent
For example: Option for projects to use Quickbar without Inventory without issues
A potential issue could be that Quickbar has max 10 slots and the player picks up the 11th item which goes to the Inventory which isn't accessible by the player - in this case a solution could be the 11th item cannot be picked up or asks to replace one of the existing slots
MSquared Platform enables downstream projects to use the most appropriate solution
Allow users to equip or use things directly from the Inventory
For example: Click on Growth Potion in the Inventory to drink it, you don't have to drag it to Quickbar first
Quickbar to gain more flexibility in terms of which content is shown on (see also Quickbar Tabs & Modes ticket)
For example: Project A divides Quickbar into gadget and emote pages, Project B shows them both on the same Quickbar
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
Removed GetOrganizationCollectionService node
Affected Features: Collections API
Whatโs broken and why?
The GetOrganizationCollectionService
blueprint node has been removed as the organization collection service is no longer used. It was only introduced in v16 and removed in v17.
How to fix it?
Just remove the nodes. None of the functions on the returned service will return any data. Use the User Collection Service to get data from public datasources, as theyโll show up in your user collection..
How to test it?
If it compiles it works.
Projects must add overrides for ProjectID, WorldID and LaunchContextID in Live Config
Affected Features: Live Config
Whatโs broken and why?
To prevent us leaking Origin internal project configuration to downstream projects, the defaults for ProjectID, WorldID and LaunchContextID in deployment.json have been removed.
How to fix it?
Add an overrides file for deployment.json and override these 3 values.
Overrides guide:
M2LiveConfig: How-Tos and FAQs | How can I override default live config values?
TL;DR:
Add a {ProjectRoot}\Config\LiveConfig\Overrides\deployment.overrides.json
Add this:
{ "M2": { "Domains": { "ProjectId": "FILL_ME_IN", "WorldId": "FILL_ME_IN" } }, "Social": { "Chat": { "Editor": { "LaunchContextId": "FILL_ME_IN" } } } }
How to test it?
Make a build and ensure clients are connecting properly
Remove unnecessary UAT BuildGraph Zip task for compressing debug symbols
Affected Features: Editor build
Whatโs broken and why?
There is an unnecessary Zip
task in the M2Development Editor BuildGraph which will compress debug symbols into an archive. This archive is not uploaded as a Buildkite artifact and can take a few minutes to complete.
How to fix it?
This is a โsoftโ breaking change; you can ignore this change if you prefer, but you will lose a few minutes for editor build times (e.g. in the juno-code-build
Buildkite pipeline).
Copy the changes made in the breaking changelist (use the link in โCLโ field above) to the BuildGraph file at the following location:
Game/<game-project-name>/Build/Graph/BuildGraph.xml
Replace <game-project-name>
with the name of your (full-engine) game project (e.g. โJunoโ for Battenberg).
This file should be project-agnostic (there are no references specific to M2Unreal in the source file), so if you have not modified this file for your project, you can copy the file contents directly from //M2Unreal/main
:
How to test it?
Run a build of the juno-code-build
Buildkite build and expand the the Building editor
log group.
At the bottom of this log group (under the Export Build
header), if you see a log like:
Adding <number> files to C:\b\Game\artifacts\<game-project-name>-Editor-DebugFiles.zip...
Then your BuildGraph is still (unnecessarily) creating a zip file.
Replaced BP_MillicastCapture with BPM_MillicastCapture then reverted it later
Whatโs broken and why?
Millicast screens and some asset references related to BP_MillicastCapture blueprint.
How to fix it?
Get a CL equal or greater than 247865 from //M2Unreal/main/
How to test it?
Milicast screens work correctly and there are no broken references to BP_MillicastCapture singleton.
Removed TextChat.UseGlobalChat live config key in favour of TextChat.GlobalChatEnabled
Affected Features: Text Chat
Whatโs broken and why?
TextChat.UseGlobalChat
has been removed as it was a duplicate key of TextChat.GlobalChatEnabled
.
How to fix it?
If the removed key was explicitly referenced anywhere in your code then replace any use of TextChat.UseGlobalChat
with TextChat.GlobalChatEnabled
, otherwise no action required
How to test it?
Run your map and check Text Chat is working as expected
Removed unused Audio foley footstep assets
Affected Features: Audio
Whatโs broken and why?
Removed & Cleaned up unused footstep assets as they have been replaced/renamed to reduce bloat in the project for the following materials:
Fabric
Metal
Stone
Stone_Polished
Water
Water_Shallow
Wood
Wood_Plank
How to fix it?
Apply a valid Physics Material on Materials that have none attached.
How to test it?
Use the M2AudioTestGym or FeatureTestGym to verify footstep sounds & verify DT_M2_Audio_FootstepSounds has the correct Physics Materials listed.
Rename some inventory live config flags
Affected Features: Inventory, UI, LiveConfig
Whatโs broken and why?
The following live config flags have been renamed, so that all our inventory config is in under inventory (instead of having some in approachability, which is a somewhat obsolete name):
Approachability.ShowItemManagement -> Inventory.ShowItemManagement
Approachability.HideInventoryView -> Inventory.HideInventoryView
Approachability.HidePlaceMode -> Inventory.HidePlaceMode
Approachability.HideUnequipView -> Inventory.Quickbar.HideUnequipButton
Approachability.HideQuickbarBackground -> Inventory.Quickbar.HideBackground
These have also been moved to the new live config version, so GitHub config overrides
How to test it?
Try toggling these flags - they should work.
Removing Area Interaction Mode
Date of change: 05/04/2024
CL: https://imp-p4-swarm.corp.i8e.io/reviews/247155
Affected Projects: All
Affected Features: Interaction
Point of contact: @Mike Pascoe
Whatโs broken and why?
Area Interaction mode is being removed, as it is not being used and adds unnecessary complexity to the Interaction system.
How to fix it?
It is not expected that any one is using this feature; if that is not the case please contact @Mike Pascoe , as demand will result in a feature request for a more robust version.
How to test it?
Open your level and confirm that interaction works as intended.
Update pre-exit hook script to be complaint with Mac Bash
Affected Projects: Full-engine projects with customer-specific/distinct/separate pipelines
Affected Features: Build
Whatโs broken and why?
The .buildkite/hooks/pre-exit
script that is run by Linux and Mac Buildkite agents when a job finishes has been updated to avoid recent (version 5) Bash features so that Mac can run the script properly. As this file contains hard-coded Slack channel names, any project-specific changes to this file will be need to be made again.
How to fix it?
Take note of the Slack channels defined in the Bash associative array (starting from declare -A
). Take the new version of the pre-exit
file and replace the Slack channel names defined in the (new) case
statement with those from the previous version.
Add further pipelines to the case
patterns as appropriate.
For a quick guide on Bash case
statements (with examples), read: https://linuxize.com/post/bash-case-statement/
How to test it?
Run builds of the pipelines you specify in the case
statement patterns. If the Linux and Mac jobs log a message like:
Setting slack notify channel meta-data to: #your-channel-name-here
In their Running local pre-exit hook
log group, then you have successfully updated the pre-exit
script.
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.
v17 Low Latency Performance
Target Values | Actuals (GFN) | Actuals (UBT) | |
Bots Tested | 5000 | 5000 | 5000 |
FPS | 30 FPS | 36.8FPS | 28.3FPS |
Render Thread | 33ms | 20.06ms | 21.70ms |
Game Thread | 33ms | 24.93ms | 30.62ms |
GPU Time | 33ms | 24.32ms | 14.63ms |
Frame Time | 33ms | 27.17ms | 35.33ms |
RHIT | 33ms | 20.34ms | 30.87ms |
Draw Calls | ~2000 (variable) | 2,358 | 2,405 |
Primitives | N/A | 5,502,109 | 5,367,149 |
v17 High Scale Performance
HIGH SCALE | Target Values | Actuals (GFN) | Actuals (UBT) |
Bots Tested | 15000 (High Scale) | 14.5k | 14.5k |
FPS | 30 FPS | 19.92 FPS | 19.7 FPS |
Render Thread | 33ms | 23.10ms | 17.85ms |
Game Thread | 33ms | 50.20ms | 50.26ms |
GPU Time | 33ms | 27.80ms | 15.27ms |
Frame Time | 33ms | 42.52ms | 42.52ms |
RHIT | 33ms | 50.20ms | 50.74ms |
Draw Calls | ~2000 (variable) | 2,408 | 2,367 |
Primitives | N/A | 5,008,336 | 4,964,931 |
Mยฒ Platform Release v16
12/04/2024
Latest binary version: 16.0.0.247954
M2LiveConfig
A major change in this release is the inclusion of Live Config V2
which will have affects on downstream projects.
The plan is for MSquared Release v16 to support both live config v2 and v1 - with MSquared Release v17 forcing projects to migrate to the new live config.
Documentation can be found here: https://docs.msquared.io/tutorials-and-features/live-config
Easy Anti-cheat
EAC is available to be used in projects.
Please see documentation on how to set up EAC here: Setup Easy Anti-Cheat (EAC)
Some additional work has been scoped and will progress to make EAC more secure. Updates on this will be announced in due course.
Metaverse Billing
Prototype
MSquared Release v16 delivered metaverse billing as a prototype feature. This functionality proves out end-to-end billing via Stripe.
Actual delivery of this will come when metaverse owners are onboarded and we deliver any additional functionality and features as part of user story gathering.
See live pricing docs page https://docs.msquared.io/read-before-you-start/origin-pricing
MSquared Avatar Creator
Prototype
Unreal based way to create and edit your character.
Basic version working in the Test Gym, with issues. Documentation: https://docs.msquared.io/tutorials-and-features/avatars/mml-avatar-editor
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
Mac enabled by default
Affected Features: World Builder
Whatโs broken and why?
Mac is now enabled by default for all projects, and so requires adding MacClient as a platform for each project.
How to fix it?
Open the .uproject
for your project and add โMacClientโ as an entry under the TargetPlatforms
list as shown:
How to test it?
Shelve your change, your preflight of m2-world-builder-project-ci should cook MacClient and complete successfully without error.
Remove support for Legacy Venues API for Players
Affected Features: Auth
Whatโs broken and why?
The Legacy Venue API is no longer supported as a connection service for the players. This was being used only if you pass a custom command line argument to your client -UseLegacyVenuesApi
How to fix it?
Make sure your client is not passing the argument -UseLegacyVenuesApi
when connecting to a cloud deployment.
How to test it?
Player clients can successfully connect to cloud deployments.
Deprecated old chat system - Renamed to have _Mobile suffix & Renamed new โUnifiedโ text chat to use M2 naming conventions
Affected Features: Text Chat
Whatโs broken and why?
The old chat system is being deprecated in favour of the new text chat UI, previously called the โUnified Chatโ. The old chat system will remain in the project for now to be used only for mobile platforms and as such have been renamed with _Mobile in its name as a suffix. This chat will eventually be removed once the new chat has a mobile friendly UI.
With this change, the live config key UnifiedTextChat.Enabled
has been removed in favour of TextChat.ForceMobileUI
, which when set to true, will force the old chat UI to be used regardless of whether youโre running on Mobile or not.
How to fix it?
Check your projectโs HUD is using the correct Text chat widgets. The new Text chat, desktop only is called WBP_M2_TextChat
. The old text chat, required for mobile is now called WBP_TextChatWindow_Mobile
How to test it?
Run your map and check text chat is working as expected
Interaction Options refactor
Affected Features: Interactables (using New system)
Whatโs broken and why?
Interaction options are no longer provided via the
M2_InteractionOptions
struct but instead entered directly on theM2_InteractableComponent
's DefaultsAddInteractionOption
has been replaced withAddOption
which no longer requires Constructing a new objectPriority for interaction options is now
ReadOnly
; ordering can be done directly on the Options map
How to fix it?
Interaction options will need to be migrated to the Options map on the Interactable component. In this map you provide the ID for the option as the Key and the Prompt can be entered in the instantiated object value (see image). Existing M2_InteractionOptions
structs will stay on BPs so you can copy over the values, but this struct itself is now deprecated.
If you use AddInteractionOption
to dynamically create options, you will now have to use AddOption
instead. This directly takes the Option ID and the Option Prompt, rather than needing a newly constructed InteractionOption
object.
If you use Priority to sort your interaction options, you will now have to sort the Options map (accessible on the M2_InteractableComponent) manually.
How to test it?
Existing interactables should have the same options show up as before. They should appear in the same order as before. Dynamically created interaction options should show up when created
Deprecating World Builder Data asset in World Builder projects
Affected Features: Maps to upload, splash screen override image
Whatโs broken and why?
We have deprecated the use of the World Builder Data PDA that is currently required to be in all world builder projects. This asset is currently used to store information pertaining to maps that users want to upload (when going via the external cook and upload flow), and more importantly the override splash image that is shown when joining an experience. We've simplified this process by migrating the setting of these to Project Settings, meaning users no longer need to maintain this data asset in their projects/create one in their personal projects. This change will be part of the next Origin release (the one after this week's), so there's no action to be taken yet
How to fix it?
Go to Project Settings
Copy across the info from the PDA into the M2 World Builder Data section
It's recommended to also delete the world builder data asset as it won't be used at all for anything in projects now.
Note: not deleting the asset won't break anything, but the pda will not be used for anything in the project so it is safe to remove it once the relevant info is set in project settings).
How to test it?
When joining a deployment with an override image set, this should be shown on start-up over the launch context image
Deprecate Equip and Place mode specific InventoryHandler functions
Affected Features: Quickbar, Inventory
Whatโs broken and why?
The following functions on J_InventoryHandlerComponent
have been deprecated:
QuickbarUnequip
- replace withM2_ItemQuickbarFunctionLibrary::Unequip
EquipPreviouslySelectedItem
- replace withM2_ItemQuickbarFunctionLibrary::EquipPreviouslySelectedItem
QuickbarEquipSlot
- replace withM2_ItemQuickbarFunctionLibrary::SetSelectedSlot
PlaceModeDeselect
- replace withM2_ItemQuickbarFunctionLibrary::ClearSelectedItem
PlaceModeSelectSlot
- replace withM2_ItemQuickbarFunctionLibrary::SetSelectedSlot
ActivateQuickbar
- replace withM2_ItemQuickbarWidget::ActivateQuickbar
ToggleSlot
- replace withM2_ItemQuickbarFunctionLibrary::ToggleSlot
The EJ_QuickbarType
enum has also been deprecated. Please check for the quickbar type by checking its class instead.
This change allows us to generify all quickbar-related functionality, enabling full support for arbitrary quickbar types.
How to fix it?
Please replace blueprint nodes as described above for blueprints that have compilation warnings.
How to test it?
Check that your quickbar/gadgets work as expected, and all blueprints compile without warnings.
Removed RootComponent from AMorpheusActor
Affected Features: MorpheusActor
Whatโs broken and why?
RootComponent was removed from MorpheusActor, which now means MA-derived BP classes can now change the RootComponent (yay!). This is useful for things like replicating the movement of physics actors, since you can replace the RootComponent with a static mesh component. There's an engine patch to try and help mitigate the impact of this, but there will still be some issues described below.
This will have an impact onto all MorpheusActors that are placed in levels, and the defaults of some MAs too. You'll notice that MorpheusActors that are placed in levels in the details panel will still claim they have a "RootComponent" as their root rather than a default scene root node; recompile the blueprint and resaving the level for each of those actors will fix this.
You may also experience other bugs in levels, such as:
The hierarchy of startup actors where they involve MAs could flatten.
Certain properties of startup actors may reset to their defaults if they are a MA.
Other miscellaneous editor/cook warnings and errors.
How to fix it?
To fix most of the warnings, just recompile the affected blueprints.
To fix the RootComponent appearing in the details panel of placed-in-world MAs, recompile the blueprint and resave the level.
To fix the other issues above, you'll need to manually fix the hierarchies and properties that have changed. Ping @Samuel Silvester for any questions!
Why was this change necessary? MorpheusActor in cpp constructed its own RootComponent, which prevents the RootComponent from being replaced or modified in child classes in BPs. This is a major regression from native Unreal workflows. We considered many solutions; from this change; introducing a new "MorpheusActorV2" and deprecating the old one; forking Origin and having all new projects use the fork; and so on. We concluded this breaking change was the best solution at this moment in time.
How to test it?
<Step by step guide for testing that the change has been integrated correctly>
Deprecated old Live Config blueprint nodes
Affected Features: Live Config
Whatโs broken and why?
The following nodes have been deprecated:
GetLiveConfigString
GetLiveConfigInt32
GetLiveConfigFloat
GetLiveConfigBool
IsLiveConfigReady
These will be deprecated in Origin V16, and fully removed in Origin V17.
This is to push projects to use the GameData API, to allow for the rollout of the new LiveConfig system.
This will cause a deprecation warning to trigger during builds.
Usage of these nodes will fail builds.
How to fix it?
Please see the M2LiveConfig migration guide:
But the TL;DR is: Use the GameData API instead
How to test it?
No testing required, if a build succeeds you are done
Removed the ability to change interaction strategy from an external source.
Affected Features: Interaction
Whatโs broken and why?
The member var StrategyForThisInteractable
has been removed, which exposed input to the editor allowing selection an interaction strategy to be initialized during BeginPlay
. We never use anything other than M2_DefaultInteractionStrategy
for non-mml interactables and we have no current use case for the capability. As such we have stripped it back to remove unnecessary extra complexity, and the function to set the interaction strategy from an external source is no longer public.
How to fix it?
Itโs highly unexpected that any one is using this as it is buried fairly deep in the interaction system. In the event that you were using an alternative interaction strategy please speak to @Mike Pascoe about the intended use case; if it is valid then returning SetInteractionStrategy
to public access should be a simple change.
How to test it?
Attempt to interact with an M2 Interactable and confirm it behaves as expected.
Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.
Please note that the 'Bot Tested' target values have reduced from 18k to 5k due to now utilising Low Latency as Standard (see https://docs.msquared.io/tutorials-and-features/networking/high-scale-mode)
v16 Performance
Benchmarks | Actuals (GFN) | Actuals (UBT) |
---|---|---|
Bots Tested | 3978 | 3978 |
FPS | 29.68 FPS | 23.52 FPS |
Render Thread | 21.30ms | 22.21ms |
Game Thread | 27.61ms | 27.68ms |
GPU Time | 13.92ms | 41.09ms |
Frame Time | 33.69ms | 42.52ms |
RHIT | 29.51ms | 26.19ms |
Draw Calls | 2,329 | 2,431 |
Primitives | 5,392,638 | 5,356,624 |
Benchmark
Benchmarks | Target Values |
---|---|
Bots Tested | 5,000 |
FPS | 30 FPS |
Render Thread | 33ms |
Game Thread | 33ms |
GPU Time | 33ms |
Frame Time | 33ms |
RHIT | 33ms |
Draw Calls | ~2000 (variable) |
Primitives | N/A |
Mยฒ Platform Release v15
25/03/2024
Latest binary version: 15.0.1.246136
Hotfixed version to resolve an internal pipeline issue
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
๐ฃ High Profile Breaking Change ๐ฃ
The below breaking changes have been introduced since the previous Origin Release:
RootComponent was removed from MorpheusActor, which now means MA-derived BP classes can now change the RootComponent. This is useful for things like replicating the movement of physics actors, since you can replace the RootComponent with a static mesh component. There's an engine patch to try and help mitigate the impact of this, but there will still be some issues described below. This will have an impact onto all MorpheusActors that are placed in levels, and the defaults of some MAs too. You'll notice that MorpheusActors that are placed in levels in the details panel will still claim they have a "RootComponent" as their root rather than a default scene root node; recompile the blueprint and resaving the level for each of those actors will fix this. You may also experience other bugs in levels, such as:
The hierarchy of startup actors where they involve MAs could flatten.
Certain properties of startup actors may reset to their defaults if they are a MA.
Other miscellaneous editor/cook warnings and errors.
To fix most of the warnings, just recompile the affected blueprints. However, to fix the other issues above, you'll need to manually fix the hierarchies and properties that have changed.
Why was this change necessary? MorpheusActor in cpp constructed its own RootComponent, which prevents the RootComponent from being replaced or modified in child classes in BPs. This is a major regression from native Unreal workflows. We considered many solutions; from this change; introducing a new "MorpheusActorV2" and deprecating the old one; forking Origin and having all new projects use the fork; and so on. We concluded this breaking change was the best solution at this moment in time.
Removing RootComponent from AMorpheusActor
Whatโs broken and why?
RootComponent is removed from MorpheusActor. An engine change is in this CL to reparent existing MorpheusActor BP classes to use the default scene root, but this will cause issues with some preexisting levels and MorpheusActors, including:
Some cook errors and warnings
Actor hierarchy in levels with MorpheusActors being flattened
Some (but rarely) properties in startup actors are reset to their defaults
Some MA BP actors will produce warnings which need fixing
How to fix it?
In levels with startup MorpheusActors, if the details panel for the actor shows โRootComponentโ as the default RootComponent, then open the Blueprint editor and recompile. The details panel should now display โDefault Scene Nodeโ as the RootComponent.
The issues listed above will need to be addressed on a case-by-case basis.
How to test it?
Run CI pipelines and test levels manually.
Interactable Seats Removed From Origin
Affected Features: Interaction
Whatโs broken and why?
M2M_Seat and the underlying C++ classes have been removed. The seats were causing more problems than they solved and it was decided that if a project requires seats, they should be responsible for their own implementation. Interaction as a feature at this time has not passed alpha, so having used this without getting support from the gameplay team will have been ill-advised.
How to fix it?
If assets have been built on top of M2M_Seat, they will need to be re-parented to something like the basic Actor and have the appropriate chair-related static mesh attached.
The action of sitting is not currently supported in Origin and the expectation is that projects needing this will either need to implement their own solution (see https://docs.msquared.io/tutorials-and-features/interaction) or request it as a feature from the gameplay team.
How to test it?
Open the editor with these changes and confirm project still compiles.
GetCustomSettingToggleWithCapabilityFallback has extra parameter
Affected Features: User settings
Whatโs broken and why?
The function GetCustomSettingToggleWithCapabilityFallback in J_GameUserSettings now takes an additional argument, a FGameplayTagContainer called SettingVisibleCapabilities. This is a list of capabilities that determine whether or not the setting is visible in the options menu and is required so we can make sure default values are used if the setting is hidden. It stops hidden settings from reading any locally stored user data that may have been written for the setting.
How to fix it?
If using this function and passing through the DefaultEnabledCapability argument to define a capability to set a toggle settings defaul value you should also now pass through a corresponding capability that determines whether or not this setting is visible in the options menu. Note if the setting is always visible an empty FGameplayTagContainer can be passed through. In blueprints this is the default so theyโd just need to be recompiled.
How to test it?
Ensure that any toggle setting that has a default value based on a capability and visibility settings based on a set of capabilities uses the default value if it is hidden in the menu
Gameplay tags in World Builder require using Project Settings
Affected Projects: All
Affected Features: World Builder
Whatโs broken and why?
Gameplay tags in World Builder are buggy and not the easiest system to work with. We replace this old system with how native Unreal projects use gameplay tags, that is via the Project Settings.
How to fix it?
Navigate to https://docs.msquared.io/reference/development-workflows/adding-gameplay-tags
Find your gameplay tags you have added and move them from the plugin Tag.ini file into this new system.
How to test it?
Open the editor with these changes, gameplay tags should work as before. Run PIE and they should work there as well. Run your game in a deployment, and they should work as well.
Simplify deployment environments & change default to "Development"
Affected Features: CI, World Builder
Whatโs broken and why?
We are removing the "Native (Development,Production)" deployment environments as a means to simplify things.
Subsequently we are renaming the "Streaming (Development,Production)" environments to "Development" and "Production" respectively.
Finally we are changing the default deployment environment for the m2-world-builder-project-ci
pipeline to "Development", as deployments and bots are generally cheaper to run in this environment.
How to fix it?
Projects that currently rely on running in "Production" by default will now need to select "Production" in the "launch main deployment" modal, and any scheduled / automated Buildkite pipelines will need to add the following environment variable:
OVERRIDE_DEPLOYMENT_ENVIRONMENT="production"
This is probably mostly relevant for Construct and Indus.
How to test it?
Run the m2-world-builder-project-ci
pipeline, either manually or via a scheduled pipeline and check that the deployment ends up on either a jvp-dev-*
cluster (for "Development") or jvp-prd-*
cluster (for "Production").
Removing BP_ExplicitTargetingStrategy & renaming functions in BPC_Approachability_InteractableHandler
Affected Features: Interaction
Point of contact: @Mike Pascoe
Whatโs broken and why?
In BPC_Approachability_InteractableHandler
- SetToDefaultTargetiingStrategy
has been renamed SetToDefaultTargetingStrategy
(removed second i in Targetiing).
- CalculateInteractionPoint
has been renamed FindInteractionPoint
.
BP_ExplicitTargetingStrategy
has been removed. It was being used as part of a bad pattern to perform two tasks, triggering an interaction point calculation & storing a target from an external source, neither of which are the function of a targeting strategy.
How to fix it?
If calling SetToDefaultTargetiingStrategy
, replace the call with the new function call.
If calling CalculateInteractionPoint
, where you were previously reading the calculated value, instead call FindInteractionPoint
to synchronously obtain the values needed.
If using BP_ExplicitTargetingStrategy
:
- If using it to calculate an interaction point to be read asynchronously, instead simply call FindInteractionPoint
at the point where you are reading the value, this will calculate and return the interaction point.
- If using as a target value store, please consider using a targeting strategy to acquire the target and M2_InteractableHnadlerComponent::PauseTargetingUpdates
coupled with M2_InteractableHnadlerComponent::ResumeTargetingUpdates
to retain a captured target.
- If using for a different purpose, please contact @Mike Pascoe to discuss the use case and how to implement it using the idioms of the interaction system.
How to test it?
For function renames, check that your Blueprints compile and function correctly.
For replicating functionality previously handled by BP_ExplicitTargetingStrategy
, test by interacting with your object in the same way as you would before. Check that the interaction point is found correctly and that the intended target is interacted with (as opposed to a new target acquired during targeting updates).
Combined PDA_Skin_M2Content
and PDA_Skin_Skypark
into PDA_Skin_Origin
PDA_Skin_M2Content
and PDA_Skin_Skypark
into PDA_Skin_Origin
Affected Features: Skins
Whatโs broken and why?
To improve usability, weโve removed the M2Content and Skypark skins and replaced them with a single โOriginโ skin. If you were previously using the Skypark skin, there should be no visual changes, but if config (live config or project settings) still points to PDA_Skin_Skypark or PDA_Skin_M2Content, it will need to be updated to PDA_Skin_Origin
How to fix it?
Find all references to PDA_Skin_Skypark and PDA_Skin_M2Content in your projectโs config and live config and remove them/replace them
If the skin looks visually different (i.e. you were using M2Content previously), and you arenโt happy with the Origin skin, please reach out.
How to test it?
PIE, the UI colours etc. should look correct.
Project default organisation and project IDs
Affected Features: Build
Whatโs broken and why?
The Buildkite build scripts will now be able to determine the organisation ID and project ID to use by parsing the Unreal Configuration (.ini
) files. If the project has a .ini
file which contains the following section and properties, their values will be recognised as the organisation ID and project ID:
[/Script/M2ServicesCore.M2_DomainSettings] OrganisationId=sample-org ProjectId=sample-proj
The .ini
property will override the default build configuration value defined under .config/*.yaml
.
If the project does not contain the above .ini
section and property, then the build scripts will continue to use the default value defined in the YAML files. Meta-data and environment variables will take priority over the .ini
file contents.
How to fix it?
If you have defined the OrganisationId
and/or ProjectId
properties in a [/Script/M2ServicesCore.M2_DomainSettings]
section in an Unreal Configuration file, you should ensure that its value is what you want to use as the default (if not, update the projectโs .ini
property to match your desired default).
For most world-builder projects, you can find the property under the project's Config
folder - you may have to open all the .ini
files to find it.
If you wish, you can remove the m2_web_organization_id
and m2_web_project_id
build configuration fields from .config/*.yaml
.
How to test it?
World-Builder projects
If you need to update the .ini
file, create a changelist and run a build of the m2-world-builder-project-ci
Buildkite pipeline and set the following fields:
Branch should be your changelist number
The environment variables should be:
ORIGIN_BRANCH="<your-changelist-number-here>"
After you create the build, wait for the master director
job to complete (you can cancel the build after that) and expand the Initial Build Configuration
log group and look for a line starting with m2_web_organization_id
and/or m2_web_project_id
. If the line ends with the value you entered in the .ini
file, then you have successfully updated your project configuration.
Full-engine projects
For M2Unreal streams, we define the relevant ini properties in the following file:
Game/M2Development/Config/DefaultM2_Services.ini
The properties defined in other .ini
files (or may have stream-specific overrides).
If you wish to make changes to the .ini
files, create a changelist and run a build of the juno-ci-build
Buildkite pipeline and set the Branch to the changelist number.
After you create the build, wait for the master director
job to complete (you can cancel the build after that) and expand the Initial Build Configuration
log group and look for a line starting with m2_web_organization_id
and/or m2_web_project_id
. If the line ends with the value you entered in the .ini
file, then you have successfully updated your project configuration.
Modified the GadgetInHand offset
Affected Features: Gadget-in-hand (Inventory)
Whatโs broken and why?
The โgadget in handโ visuals added a hard-coded added 180 Pitch/Y rotation to the visuals details' RelativeTransform
rotation. This has now been removed, so that the relative transform value in the BP_ItemVisualsDetails_MeshInHand
matches the value if the mesh was added directly, or added to the crowd.
Also, the guidance regarding how to set up visuals details for the animated crowd has changed, since we have added a relative transform that can be set from the item PDA. Updated docs can be found at: https://docs.msquared.io/tutorials-and-features/the-inventory-system/how-to-make-devices/item-visuals#visuals-for-distant-clients-background-animated-crowd
How to fix it?
If you have any gadgets with visuals that look oddly rotated, try adding/subtracting 180 from your Y rotation.
How to test it?
Try equipping your gadgets-in-hand, see if they visually look OK.
Rejig the skins assets
Affected Features: Skins
Whatโs broken and why?
Hopefully nothing should be broken, but you may get some warnings along the lines of LogJunoUISkinPrimaryAsset: Warning: UJ_SkinPrimaryAsset::BuildFoundSettingsList: CustomSkinSetting of class J_EmoteSkinSettings will override an existing property on the asset (PDA_Skin_M2Content). Please move your custom setting changes over to the property, so that we get inheritance behaving nicely.
Basically, we have moved the core skins settings out of the SkinSettings
list, into bespoke variables. If you have custom skin settings present, they will be kept and will trump the separate objects, but it is advised to fix them up so that we can get inheritance for each setting working nicely.
How to fix it?
If you made changes to an individual skin setting, you should be able to see an arrow by the property. Any properties that you have changed, you can copy across from the CustomSkinSettings
array to the corresponding variable, or just copy and paste the entire object into the field. Then you can remove the setting from the custom skin settings list.
See https://docs.msquared.io/tutorials-and-features/ui/how-to-use-skins for the updated approach for using skins.
How to test it?
Your downstream skin should be used.
Moved Interaction Analytics off of M2_InteractableHandlerComponent
Affected Projects: All
Affected Features: Interaction
Whatโs broken and why?
UM2_InteractableHandlerComponent::RecordInteractionAnalyticsEvent was removed
This caused usage of a bad pattern of adding Interactable Handlers to objects just to allow them to track analytics
โSet New Interact Methodโ removed from Interaction Handler
It was used purely for tracking an analytic that was no longer desired
Interaction Handler component removed from some assets
BPM_VideoScreen
BP_FocusCamTest
WBP_FocusCam_ExitButton
M2M_Seat
How to fix it?
UM2_InteractableHandlerComponent::RecordInteractionAnalyticsEvent
Use UM2_InteractionFunctionLibrary::RecordInteractionAnalyticsEvent instead
โSet New Interact Methodโ
Remove node
โMissingโ Interactable Handler
Remove any references to this component
NOTE: If you were using this, then you will have been using the interaction system incorrectly. Please contact someone on the Gameplay team for further support.
How to test it?
Check that all your blueprints compile and function as expected
Moved quickbar slot input handling out of J_InventoryHandlerComponent
J_InventoryHandlerComponent
Affected Features: Quickbar, Item Executors
Whatโs broken and why?
To support the modularization of quickbars and the recent โfractional quickbar viewsโ work, all the input bindings are now handled by the quickbar widget.
The following properties on
J_InventoryHandlerComponent
are no longer used and should be set in aM2_ItemQuickbarWidget
instead (Origin sets these inWBP_GenericQuickbarWidget
):InputMappingContext
,UnequipAction
,EquipSlotActions
,PlaceModeDeselectAction
,PlaceModeDeselectAction
,PlaceModeSlotActions
,EquipSlotPrioritizationName
,UnequipSlotPriority
,QuickbarUnequiprioritizationName
,EquipSlotPriority
The following functions on
J_InventoryHandlerComponent
are deprecated and should be called from aM2_ItemQuickbarWidget
instead:GetUnequipAction
,GetEquipSlotActions
,GetPlaceModeDeselectAction
,GetPlaceModeSlotActions
,GetMappingContext
,GetQuickbarInputsEnabled
,SetQuickbarInputsEnabled
QuickbarToggleSlot
andPlaceModeToggleSlot
onJ_InventoryHandlerComponent
are deprecated, please useM2_ItemQuickbarFunctionLibrary::ToggleSlot
insteadThe
BindQuickbarActions
capability is no longer usedThe primary and secondary legacy input actions for
J_ItemExecutor
s are no longer bound, please follow this guide on how to migrate Item Executors toEnhancedInput
How to fix it?
For the functions listed above, blueprint compilations will report warnings, and quickbar inputs may not work as expected. Please replace the nodes as described, the function names will be the same.
If custom inputs were used for the quickbar slots, please copy them from the InventoryHandlerComponent
to a blueprint inheriting from WBP_GenericQuickbarWidget
How to test it?
Check that all your blueprints compile without warnings/errors, and that the quickbar and your item executors work as expected
Purchase executors now use enum rather than bool
Affected Features: Purchasables
Whatโs broken and why?
Purchasable executors now use an enum rather than bool making their implementation easier to follow.
How to fix it?
Simply update any custom executors to use the new new enum.
How to test it?
Ensure your purchase executors function the same as they did.
BP_InventorySkinSettings
moved into BP_ItemManagementSkinSettings
BP_InventorySkinSettings
moved into BP_ItemManagementSkinSettings
Affected Features: Skins
Whatโs broken and why?
The BP_InventorySkinSettings
asset was removed, and all of its settings were moved into BP_ItemManagementSkinSettings
, to group them together under one skin setting.
If your downstream skin used the inventory skin settings, you may see errors along the lines of:
[2024.03.05-16.31.30:564][413]LogLinker: Warning: [AssetLog] D:\dev\...\Content\Core\UI\PDA_Skin_[X].uasset: Failed to load '/M2Core/JunoCoreUI/StandardButtons/BP_InventorySkinSettings': Can't find file.
How to fix it?
Go to your Skin PDA, and remove any empty entries in your SkinSettings
list, and resave.
If you made any changes to the BP_InventorySkinSettings
, unfortunately you will need to reapply them
How to test it?
Check your inventory widgets look how youโd expect
Move Quickbar related methods out of the component, into an interface
Affected Features: Inventory/Quickbar/Gadgets
Whatโs broken and why?
To support upcoming work where we can e.g. subdivide our equipment into multiple โquickbar tabsโ, the quickbar related logic has been moved out of the quickbar component into the IM2_ItemQuickbarInterface
and IM2_EquipmentQuickbarInterface
interfaces. The helper functions have been moved into the M2_ItemQuickbarFunctionLibrary
. This means old uses of the quickbar methods unfortunately broke.
How to fix it?
If you try to play/cook, it should raise the files that got broken by the change.
For uses of the quickbar component methods:
Any uses of the old methods will give compile errors like this - it attempts to retarget to the function library, but puts the input to the function library's hidden "target" field.
If you move the target to the quickbar view field, then refresh the node, it fixes things
In places where you try to get the quickbar component from the UI, youโll need to instead get the interface (and maybe cast to an object, depending on your use case)
How to test it?
Once there are no compile errors, you should be good to go! Worth running a PIE, and checking that you can equip and use your gadgets as expected
This is a full list of everything that has been added or changed to this release
User can not click on Download button while Streaming is loading |
---|
A popup will appear the steps to follow after clicking on the Download button |
The default deployment environment is now "Development". |
They are however 60-91% MORE expensive than regular bots, and thus should ONLY be used for playtests and events. |
Reverted Text Chat Fix |
Disabled Unified Text Chat on mobile devices |
Fixed a stability issue in MML object cleanup |
Fixed bug where the chat wasn't pulling the latest messages in real time |
Gadget-in-hand visuals use the same transform value for animated crowd and LOD0 as they would if the mesh were attached directly to the actor's socket |
Millicast render system refactored |
Refactored process of storing an interactable that had been selected & calculating the interaction point to make it more robust. |
Added support for inheritance in skins, by moving the objects into their own fields. |
Support gadget in hand for custom MML avatars |
Changed channel tabs to use checkboxes so the current channel remains highlighted |
Updated Unified chat Styling and layout. |
Added message history limit setting in live config, TextChat.MaxHistoryMessages |
Added function to remove older messages if they go over the maximum message history limit |
Removed Visible tabs section from new chat skin and hooked them up to existing live config settings to control them. TextChat.UseCloudChat, and Social.PartiesEnabled |
Removed IsOpenByDefault setting from new chat skin settings and hooked it up to the existing TextChat.StartMinimized live config setting |
Add support for inputting emojis by typing in the emoji name, e.g. :grinning_face: |
Deprecated UM2_InteractableHandlerComponent::RecordInteractionAnalyticsEvent in favour of more accessible helper function UM2_InteractionFunctionLibrary::RecordInteractionAnalyticsEvent |
See marquee release notes (this was a flyby fix pre-release) |
- Bugfix: Player now gets off chair when you begin to move with Hold to Move |
Added Character limit radial progress bar to the Unified Chat Text Input. |
Remove some log spam |
Fixed a bug where it would take two clicks to close the chat window. |
Added resize handle to the bottom of the new Unified Text chat to allow showing/hiding more or less messages on screen |
Recently used emojis now appear at the top of the emoji menu. Defaults to start with 6, then new ones are added each time a new one is selected, up to a maximum of 36 |
Interaction bug fixed |
While interacting with an object, clicking on a second nearby object would cause the nameplate to briefly flicker to the clicked object and then return to the original object. This no longer happens. |
Swapped screen asset types in a test gym to begin removing an old asset which was causing a UI bug. |
When we unfocus the game window and then click on it to focus back, the player no longer moves to the click location |
Quickbar input bindings are now handled by the quickbar widgets |
Fixed issue with music controller stopping the current track when the volume is dropped to zero. |
Music player now correctly shows the default playback mode as "List". |
Millicast render time has greatly decreased, boosting game performance. |
New confluence page describing millicast rendering |
This feature is a new item/gadget which allows users to "permanently" turn their avatar into a dinosaur and are able to disable it whenever. The gadget inherits from a new generic base class in BPs which allows other devs to make other gadgets which hold a different type of avatar URL. |
Removed unused help screen |
Refactored help screen logic to support easy swapping out of the help screen widget from the HUD widget |
Yellow highlight can show in front of millicast screens. |
Chat updates with latest usernames every time a new message appears. |
Analytics events that are authored in customer projects will now come in with "external" prefix applied after the "m2up" prefix in the name. |
Fixed a crash that was triggered when switching bot behaviours |
Updated performance documentation |
Fixed multiple world builder plugins crashing the editor |
PDAs from origin libraries now load correctly, as well as the project content directory. |
Fix several crashes with AI Chat |
Added UI SFX to the quickbar |
Provide more detail in SkeletalCrowdMeshStorage allocation crash |
Dispatch ECS system every frame instead of when data has changed to fix crowd members not rendering when forced into LOD1. |
Unrelated to release, as this was work done on datadog using existing metrics |
web-side analytics are now being sent to bigquery which is captured and displayed via world builder's dashboard |
Gameplay tags now load correctly in editor and deployments. |
he project content folder is now the primary location for storing world builder content, just like native unreal. |
Below is a list of all known issues with this release
Disabled Unified Text Chat on mobile devices |
---|
On GFN, if character meshes take longer than 10 secs to load in and the player character has not loaded yet and you try to quit out - the application crashes. |
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.
v15 Performance
Benchmarks | Actuals (GFN) | Actuals (UBT) |
---|---|---|
Bots Tested | 8,500 | 8,500 |
FPS | 29.6 FPS | 27.4 FPS |
Render Thread | 21.26ms | 21.83ms |
Game Thread | 33.43ms | 35.92ms |
GPU Time | 23.78ms | 14.35ms |
Frame Time | 33.84ms | 36.45ms |
RHIT | 17.81ms | 29.52ms |
Draw Calls | 2,261 | 2,297 |
Primitives | 5,147,031 | 5,193,823 |
Benchmark
Benchmarks | Target Values |
---|---|
Bots Tested | 18,000 |
FPS | 30 FPS |
Render Thread | 33ms |
Game Thread | 33ms |
GPU Time | 33ms |
Frame Time | 33ms |
RHIT | 33ms |
Draw Calls | ~2000 (variable) |
Primitives | N/A |
Mยฒ Platform Release v14
11/03/2024
Latest binary version: v14.0.0.243871
In-Editor Performance Estimates
Alpha Feature
Provide in-editor performance estimates for avatars, crowds and environments. This would allow the user to get an estimate of how complex those are, and what kind of scale they could expect reasonable performance.
This will help reduce the pressure on the Core and Rendering teams by providing projects with performance estimates earlier in the development cycle.
See here for documentation: https://docs.msquared.io/tutorials-and-features/performance/in-editor-performance-estimates
Low Latency Mode
Alpha Feature
Low latency mode is now default for all projects.
Docs have been updated to reflect this new, low latency default for Morpheus: https://docs.msquared.io/tutorials-and-features/networking/high-scale-mode
This means that by default, the max CCU of deployments is now around 5k
(with much lower latency), compared to ~18k previously. This decision was made as it's far more common for projects to require low latency than to require CCU above 5,000. High scale mode is being enabled in M2UP scale tests, but please remember to update this in your own project if you need above 5k CCU.
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
Updating default role logic on the RolesComponent
Affected Features: Roles
Whatโs broken and why?
Nothing is broken, this change should fix issues with default roles. Just want to add this here to prompt projects to check their roles and flag against this change if there are issues.
How to fix it?
NA
How to test it?
Ensure your current default roles are loaded correctly. (You should see no behavioural difference.
Moving Moderation Config Values
Affected Features: Moderation
Whatโs broken and why?
Classes have moved location meaning their config values may be affected. These values are: J_ModerationSubsystem.UseDefaultSubsystem J_CommunitySiftDeveloperSettings.bEnableOverride J_CommunitySiftDeveloperSettings.BaseUrl J_CommunitySiftDeveloperSettings.Password
How to fix it?
You may have to update your .ini files to reflect the new
How to test it?
Ensure the feature works as intended
Renamed and Reoganized Physics Material assets
Affected Features: Audio
Whatโs broken and why?
Renaming Physics Materials, removed unused Physics Materials & added new ones:
Metal > Metal_Solid
Sand > Sand_Dry
Water > Water Sloshing
Water_Shallow > Water_Puddle
Wood > Wood_Board
WoodPlank > Wood_Floor
Fabric - REMOVED
Flesh - REMOVED
NoBounce - REMOVED
Paper - REMOVED
Plaster - REMOVED
How to fix it?
Apply a valid Physics Material
How to test it?
Use the M2AudioTestGym to verify footstep sounds
Wallet Component Refactor
Affected Features: Wallet Component
Whatโs broken and why?
OnWalletCompartmentsUpdated now uses FCurrencyValue struct.
How to fix it?
Blueprint logic should be simple enough to move over. FCurrencyValue is essentially is a replacement for FWalletCompartment and has all the same data.
How to test it?
Test your currency flows work as intended.
Helm chart compatibility
Affected Features: CI, GSS
Whatโs broken and why?
The Helm charts and which versions to use have been moved to .buildkite/config/charts.yaml
which will be used as the source of truth going forward when registering build packages in the Web Platform and creating Worlds/deployments/bots/etc via the various deployment pipelines that exist.
As part of this the following environment variables have been changed:
+----------------------------------+------------------------------+ | old | new | +----------------------------------+------------------------------+ | GSS_TEMPLATE_NAME | SERVER_CHART_NAME | | GSS_TEMPLATE_VERSION | SERVER_CHART_VERSION | | OVERRIDE_CHART_VERSION | SERVER_CHART_VERSION | | SIMPLAYERS_TEMPLATE_NAME | SIMPLAYERS_CHART_NAME | | SIMPLAYERS_TEMPLATE_VERSION | SIMPLAYERS_CHART_VERSION | | REMOTEVIEWERS_TEMPLATE_NAME | REMOTEVIEWERS_CHART_NAME | | REMOTEVIEWERS_TEMPLATE_VERSION | REMOTEVIEWERS_CHART_VERSION | | MARKRECORDER_TEMPLATE_NAME | MARKRECORDER_CHART_NAME | | MARKRECORDER_TEMPLATE_VERSION | MARKRECORDER_CHART_VERSION | | M2_CONNECT_E2E_TEMPLATE_NAME | M2_CONNECT_E2E_CHART_NAME | | M2_CONNECT_E2E_TEMPLATE_VERSION | M2_CONNECT_E2E_CHART_VERSION | +----------------------------------+------------------------------+
How to fix it?
If you have specified any of the environment variables in the "old" column above in for example Buildkite schedules or documentation for how to create builds then you need to replace their usage with the replacement in the "new" column.
How to test it?
Run either of these Buildkite pipelines:
juno-build
+ unblock the "Deploy to GSS" stepjuno-scale-test
+ unblock the "Configure" stepm2-world-builder-project-ci
+ unblock the "Launch main deployment" step
Deployments, bots, remote viewers and such should work exactly like before.
Renamed Footstep Audio assets
Affected Features: Audio
Whatโs broken and why?
Changed folder and file names for the following Foley Footstep assets:
Metal > Metal_Solid
Sand > Sand_Dry
Stone > Stone_Rough
Stone_Polished > Stone_Smooth
Water > Water_Sloshing
Water_Shallow > Water_Puddle
Wood > Wood_Board
WoodPlank > Wood_Floor
How to fix it?
Check materials and meshes for missing Physics Materials & check the FootstepSounds Datatable
How to test it?
Go to the M2AudioTestGym and the Footstep Implementation Sublevel to verify that footstep material sounds can be heard for all surface types
Removed obsolete audio Blueprints from the Skypark plugin
Affected Features: Audio
Whatโs broken and why?
Removed the following Blueprints from the Skypark plugin: BP_Audio_ForestAmbient BP_Audio_MeadowAmbient BP_Audio_Fireworks
How to fix it?
Any usage of these blueprints should now be swapped to the new Ambience System.
How to test it?
Replace blueprints with the new Ambience system, and verify that the sounds can be heard.
Added WorldId scope to M2ServicesCore auth
Affected Features: World Travel
Whatโs broken and why?
We are now introducing WorldId
as the preferred way for players to determine what deployments to connect to. This includes adding a new WorldId
property to the BlueprintType FJ_WorldTravelWorld
and the Blueprint callable UJ_WorldTravelService::WorldBuilderWorldTravel
function. Now, any copying/assignment of these types in blueprint should also pass the WorldId
property, as to prevent issues with world travel.
NOTE: This would only affect your project if you are running custom WorldTravel logic or implementation. If you are using world travel gates, portals, or command line as they are defined in M2Core
, this will not affect your project.
How to fix it?
Search through all project blueprints for references for World Travel, or the types/functions specified above, and make sure that WorldId is passed alongside other settings such as project or launch context IDs. Here is an example from /M2Unreal/M2Core/Content/JunoWorldTravel/Blueprints/BPM_WorldTravel_Gate_Base.uasset:
How to test it?
Run two or more deployments in your project and test if world travel via portal, command line, or others works as expected.
Small API Changes to wallet component and user collection
Affected Features: Wallets and user collection
Whatโs broken and why?
Renaming functions/delegates for better readability.
How to fix it?
Any events bound to UserCollectionsUpdatedDelegate on the user collection now need to bind to UserCollectionsUpdatedDynamicDelegate. Any function calls to GetCurrencyOfType on the wallet component now need to call GetCurrencyValue.
How to test it?
Test each blueprint logic path you modified works as intended.
โLow latency modeโ is now the default; old default has been renamed to an opt-in โhigh scale modeโ
Affected Features: Networking, scale
Whatโs broken and why?
Default max CCU of all projects with this change goes from ~18k to around ~5k, with increased fidelity and decreased latency. Intended to improve the fidelity by default of M2UP projects, since most projects run with below 5k CCU. Blueprints referencing low latency settings (unlikely that there are any) will break.
How to fix it?
If your project needs to support a higher scale than ~5k CCU, you need to set a LiveConfig value to enable high scale mode. This is in morpheus.json: ConnectionParams.UseHighScaleModeOverride
How to test it?
Run a bot scale test with the maximum CCU you want your project to support and see if everything works. If youโre unsure, link your deployment metrics in #mvg-scale-testing for advice.
This is a full list of everything that has been added or changed to this release
Switching roles won't randomize your character if your current one is valid for the new role. |
---|
Added M2_QuickbarTabBase extensible class and implemented data driven tab customization on WBP_TabbedQuickbarUI |
The 'Item Granter' device can now select players based on their gameplay tag or current role. |
Added Video Player area to Feature Test Gym |
Added new Millicast screen area to the FeatureTestGym |
Allows place mode and device mode to be switched without spilling logic into the other mode, so only one can be equipped at one time |
The settings menu is no longer accessible until after bootflow has finished. |
Video players now sync playback across clients |
Moved the Emote Pulse logic out of WBP_EmoteSelector and in BP_HUD to not depend on the widget. |
Tooltip of place mode objects should now display the correct name |
A new set of components which can be added to actors to easily persist string or int values. Should be useful for tech-designers or engineers in BPs. |
New versions of the vending machine to allow using a Shop or Simple Interaction. Also added example Shop widgets for WB projects to use. |
Cherry pick UE5.4 PSO precaching engine bug/race condition fix |
Support for arrow keys (up, down, left and right) to navigate the interaction list. |
Skinned the object interaction list |
Emoji Menu v1 is now hooked up to the Unified Text Chat. |
Selecting abilities from the quickbar no longer resets the mouse cursor to its previously stored position. |
We now have the option to disable item keys in your inventory, through the M2M_InventoryMetadataComponent (Documentation pending) |
Fix crash when loading certain MML models with lots of sub-meshes |
The mouse cursor will no longer go to its last known position when opening up the inventory widget and instead only retains its last known position after holding down a mouse button to pan the camera. |
Player Orientation should be fixed in chair |
Fix bad values from character resizing. |
objectFit=cover property was added to WebCamera component |
Analytics events' metadata will now include a session id |
All known M2UP analytics events have been reviewed and now have matching schema definitions |
AutoProfiler now sends data into the analytics pipeline. |
Optimized the morpheus core runnable tick times by optimizing the decoding speed of mark updates. |
Fixed an issue with bots getting timeout disconnections |
Adds UpdateFastInMidground tag for more responsive background properties |
The double jump sounds will now only be heard locally by the player that is jumping. |
Fixed crowd animation playback when more than one Use Cached Pose node referenced a single Save Cached Pose node in an ABP. |
Editors no longer upload LinuxClient which now use LinuxServer paks to save space |
Improve template creation by hiding unnecessary options |
Quixel Bridge plugin is available inside packaged editors |
Implement in-editor performance estimates tool. |
Removed obsolete audio blueprints from the Skypark plugin. |
Project settings are now supported, and plugin settings are no longer supported. |
Carnival supports GLBs that use interleaved data formats. |
AudioTestGym control panels should now be clickable, and have been moved to the wall in the main level. |
Changed Unified chat message to have better highlighting to highlight usernames. Will also highlight usernames differently for party members |
Long text with no spaces will now wrap correctly in the new Unified chat window |
Emojis larger than 2 bytes will now no longer get split up when displayed above the avatar's head |
Flags category button on Emoji menu now works as intended |
Fixed bug where previous interacted with object remained highlighted when interacting with a new object. |
Fixed chat window closing when right clicking in game |
Test added to verify that audio can be heard. |
The 'Silencer' device can now select players based on their gameplay tag or current role. |
Mass teleporter supports select by role |
The Emoji menu can be enabled/disabled with live config key UnifiedChat.EmojiMenuEnabled in game.json |
The 'Crowd Navigator' device can now select players based on their gameplay tag or current role. |
N/A (bug found and fixed before release) |
Non-character MMLs now support the 'socket' attribute, to attach child models to bones or sockets on the parent model. |
n/a (feature as a whole is still in pre-alpha) |
n/a |
Fixed an issue where the place mode button wouldn't show up |
Fixed error logs for failed attempts at accessing the Player |
Interactable objects now highlight when targeted or interacted with. |
Fix crash when loading certain MML models with lots of sub-meshes |
Fixed ineffective volume slider on Video Player control panels. |
Fixed emote wheel to generate emotes properly when live config is updated, to avoid bug where a heart emoji would show for a failed load on the profile picture emote |
Fixed up WBP_TH_HUD to dynamically show/hide the HUD Emote button, depending on whether emotes are enabled via live config, enabled for the current role, or if emotes are enabled via an override. |
Fixed bug where the emote wheel would stay open if emotes were disabled via live config |
Fixed Default role settings in TestMap |
Added new prototype screen space video player for use in Picture-in-Picture modes. |
Spawning MML objects as part of functional tests slows everything down massively. It's been moved to it's own map where this issue doesn't occur. |
change config section name |
Fixed nameplate flashing when hiding nameplates for mouse targeting. |
Fixed an issue where custom item widgets wouldn't show up when equipped |
Fixed multiple nameplates showing in "overhead nameplate mode" when targeting an interactable. |
Below is a list of all known issues with this release
On GFN, if character meshes take longer than 10 secs to load in and the player character has not loaded yet and you try to quit out - the application crashes. |
---|
Controls - Available control options are different between roles |
Users will experience their cursor becoming hidden after moving the camera with left-click hold. |
Below is the performance data captured from our release testing - this should be used to guide on the performance your project should expect.
v14 Performance
Benchmarks | Actuals (GFN) | Actuals (UBT) |
---|---|---|
Bots Tested | 15,500 | 15,500 |
FPS | 16.6 FPS | 18.1 FPS |
Render Thread | 25.7ms | 22.68ms |
Game Thread | 59.2ms | 54.71ms |
GPU Time | 26.1ms | 15.56ms |
Frame Time | 60.1ms | 55.19ms |
RHIT | 20.5ms | 28.91ms |
Draw Calls | 2281 | 2290 |
Primitives | 6,131,510 | 6,079,542 |
Benchmark
Benchmarks | Target Values |
---|---|
Bots Tested | 18,000 |
FPS | 30 FPS |
Render Thread | 33ms |
Game Thread | 33ms |
GPU Time | 33ms |
Frame Time | 33ms |
RHIT | 33ms |
Draw Calls | ~2000 (variable) |
Primitives | N/A |
Mยฒ Platform Release v13
26/02/2024
Latest binary version: v13.0.0.241520
Avatars : MML Sockets at Scale
See here for documentation: https://docs.msquared.io/tutorials-and-features/avatars/avatar-attachments
Ability to add sockets to our Unreal skeleton in Morpheus so that users can hold things in their hands, and customize their appearance with elements that augment their basic clothes.
๏ปฟ
Examples
๏ปฟEquip a gun or sword and have it show up held in the hands of their avatar.
Equip a hat and have it attached to a head socket.
Equip glasses and have them appear on their face.
Equip a backpack and have it appear on their back.
Unreal Video Player - Improvements
Now at Beta!
See here for documentation: https://docs.msquared.io/tutorials-and-features/video-players/streaming-video-player
We use Epic's Electra Media Player. It allows you to play a video stream or file, either locally or over the web, using file:\, ftp:\, http:\, rtsp:\ protocols.
Video can be live streamed using HLS over the internet. Electra has all the usual video player support (pausing, seeking, skipping etc). For more information see:
Improvements:
First pass control panel to allow playback from a source folder
Detailed usage documentation added
Analytics hooks added
Below are breaking changes which may need to be considered if you are ingesting this release into your project.
Vending Machine and Purchases Update
Affected Features: Vending Machine/Purchasables
Whatโs broken and why?
Class rename: UM2_PricedPurcheasable โ UM2_BasePricedPurchasable Asset moves: JunoSkypark/Inventory/VendingMachine โ JunoSkypark/Props/VendingMachine API Changes: FName IM2_Purchaseable::GetPurchaseableName() โ FText IM2_Purchaseable::GetPurchaseableName()
How to fix it?
Should be able to move over to use the new assets fairly easily.
Avatar Attachment API Changes
Affected Projects: Any that has started using character attachments
Affected Features: Character Attachments (UM2M_CharacterAssetComponent)
Whatโs broken and why?
The API has changed to pass around a new FM2_StaticMeshAttachmentHandle instead of the attachment structure directly, due to the original structure becoming more complex.
How to fix it?
If you use UM2M_CharacterAssetComponent::RemoveAttachment
you must now pass in the handle returned by AddAttachment
. GetAttachments
now returns a map of handles->attachments, instead of an array of just the attachments, so you'll need to use the map values instead.
How to test it?
Make sure it compiles, and attachments can be added and removed as before.
World-Builder project default Ubitus game label
Affected Projects: World-builder projects that use Ubitus
Affected Features: Ubitus (Game Streaming)
Whatโs broken and why?
The Buildkite build scripts will now be able to determine which Ubitus game label to use by parsing the Unreal Configuration (.ini
) files. If the project has a .ini
file which contains the following section and property, its value will be recognised as the Ubitus game label:
[/Script/JunoLiveContentEditor.M2_ExperienceSettings] UbitusGameLabel=???
The .ini
property will override the default build configuration value defined under .config/*.yaml
.
If the project does not contain the above .ini
section and property, then the build scripts will continue to use the default value. Meta-data and environment variables will take priority over the .ini
file contents.
How to fix it?
If you have defined the UbitusGameLabel
property in a [/Script/JunoLiveContentEditor.M2_ExperienceSettings]
section in an Unreal Configuration file, you should ensure that its value is what you want to use as the default (if not, update the projectโs .ini
property to match your desired default).
For most world-builder projects, you can find the property under the project's Config
folder - you may have to open all the .ini
files to find it.
How to test it?
If you need to update the .ini
file, create a changelist and run a build of the m2-world-builder-project-ci
Buildkite pipeline and set the following fields:
Branch should be your changelist number
The environment variables should be:
ORIGIN_BRANCH="<your-changelist-number-here>" WORLD_BUILDER_BUILD="true"
After you create the build, wait for the master director
job to complete (you can cancel the build after that) and expand the Initial Build Configuration
log group and look for a line starting with ubitus_game_label
. If the line ends with the value you entered in the .ini
file, then you have successfully
Must explicitly unload MML/profile avatars if you want to show a Modular character
Affected Projects: All
Affected Features: Avatars
Whatโs broken and why?
Weโre moving towards every avatar being defined in MML, and phasing out the slot-based modular characters. This change tidies up the API towards this goal, but changes how some of the existing JM_ModularCharacter
functions work. Previously any function that modifies the state of the modular character configuration would also load that config onto the playerโs avatar, even if they were using an MML character. Now the changes will only be applied if the player is not using an MML avatar. You must now explicitly unload an MML avatar to go back to showing the modular character with UnloadCharacterFromUrl
.
Affected functions are in JM_ModularCharacterComponent
: ApplyPrimaryAsset
ApplyPrimaryAssetByName
RandomizeCharacter
RandomizeSlot
ClearSlot
ClearCharacter
SetCustomValueForSlot
SetCustomColorForSlot
ClearCustomDataForSlot
.
How to fix it?
If you call any of the functions above and expect them to switch you back from an MML character to a modular character, you should now call UnloadCharacterFromUrl
at the same time. RandomizeCharacter
is the most likely use-case - this will no longer do anything visible if youโre using an MML character, until you unload it.
New features added to the MSP_M2_RandomPlayer
Affected Projects: All
Affected Features: Audio
Whatโs broken and why?
The MetaSound Patch has been updated to add a new volume and pitch randomisation feature, and removing the pitch shift feature.
How to fix it?
This is the old version of the patch, the pitch shift variable has now been removed. If you need to pitch-shift the sound, you can modify the pitch variable on the MetaSoundSource.
This is the new version, containing the new pitch and volume randomisation features.
How to test it?
Set the pitch and volume randomisation variables, and click play - your sounds should be modulated with random pitch and volume adjustments.
Project settings replace plugin settings in World Builder
Affected Projects: All
Affected Features: World Builder plugin configs
Whatโs broken and why?
Plugin configs have changed to project configs so the project settings UI inside the editor can now be used again instead of manually modifying ini files.
How to fix it?
Delete
DefaultEngine.ini
,DefaultGame.ini
,DefaultInput.ini
files inside of<Project>/Config/
, as well as any other sections you do not wish to be applied to your project from other config files. These specific files are important as you want to keep your meaningful settings likeDefaultM2_Services
andDefaultEditorPerProjectUserSettings
, but old/unused settings should be deleted.If you have any configs located in
<Project>/Plugins/<Plugin>/Config/<Type>.ini
, copy the sections into the<Project>/Config/Default<Type>.ini
equivalent file. This is to make sure your existing settings carry over correctly. The<Type>
can be anything e.g.Game
,Engine
,Input
, etc.
How to test it?
Run a test of your game to ensure the settings that used to be applied are still applied.
Enabled โNew Interaction Systemโ by default in M2UP Live Config
Affected Projects: All
Affected Features: Object Interaction
Whatโs broken and why?
"Old" interactions based on using JM_InteractableComponent
will no longer work when the live config value game Interaction.UseNewInteractionSystem
is set to true
- which is now the default value in the m2unreal Live Config. We are moving support to focus on the new interaction system that implements M2_InteractableComponent
NOTE - If you don't use the old interactions, this shouldn't impact your project
How to fix it?
There are two options here:
Set
Interaction.UseNewInteractionSystem
false for your project/map in Live ConfigMake sure to restart your client
Convert old interactables to use the new system (Guide here)
How to test it?
Implement one of the two approaches above, ensure that interaction works as it did before this setting was changed.
Rename user collection polling live config values
Affected Projects: All
Affected Features: User Collection Polling
Whatโs broken and why?
We renamed the live config values to better differentiate between server and client values
How to fix it? UserCollection.Polling.Enabled -> UserCollection.Polling.ClientEnabled UserCollection.Polling.Frequency -> UserCollection.Polling.ClientFrequency
Removed Emote-o-Meter Feature
Affected Projects: All
Affected Features: Emote-o-meter
Whatโs broken and why?
We have removed the Emote o meter feature to reduce the maintenance overhead on an unused feature
How to fix it?
If youโre project still requires this feature, make a copy of the blueprints into your local project before updating your editor to take this change
How to test it?
If youโre not using this feature, then no action is required. If you are using this feature then do the above and check it still works as expected
Removed *_template_version
options from gss_config.yaml
*_template_version
options from gss_config.yaml
Affected Projects: All
Affected Features: CI, GSS
Whatโs broken and why?
The server_template_version
and simplayers_template_version
configuration options (version constraints really) have been removed from .buildkite/scripts/gss_config.yaml
and will no longer be used in the deploy_to_gss.py
script.
These have to my knowledge never been used by any project, and have only caused pain when copying between different depots and streams.
Instead we are working on a different approach for this that should be (more) sane and cause less pain, and in the meantime these version constraints are maintained/enforced in the deploy_to_gss.py
script itself.
How to fix it?
Remove the server_template_version
and simplayers_template_version
options from .buildkite/scripts/gss_config.yaml
.
How to test it?
Create any deployment using either the juno-build
or juno-scale-test
Buildkite pipelines.
Everything should continue to work as previously.
Removed Icon
variable from UM2_StandardButtonBaseData
Icon
variable from UM2_StandardButtonBaseData
Affected Projects: All
Affected Features: Any Blueprint that use ConstructObjectFromClass
with ButtonData
as template
Whatโs broken and why?
With the inclusion of new Icons to the button layout, the Icon
variable deprecated and used the โRedirectorโ functionality from unreal to substitute it with IconLeft1
. It worked on the majority of the cases, but some of the systems used the ConstructObjectFromClass
call to create ButtonData
and the Redirector didn't affect those calls.
At the end it was decided to remove the Icon variable completely and fix those calls by hand.
How to fix it?
For any system that uses the ConstructObjectFromClass
call, if anything is assigned to the old Icon
node, set the value to the new exposed parameter IconLeft1
.
New functions have been added to modify the new Icons (UpdateDetailsMultipleIcons
& UpdateIcons
)
How to test it?
All the blueprints that use the ConstructObjectFromClass
call with the UM2_StandardButtonBaseData
as the template should not have any warnings about the Input Pin โIconโ no longer existing.
Also, any new Call to ConstructObjectFromClass
should have the IconLeft1
input pin available where the previous value can be set.
This is a full list of everything that has been added or changed to this release
Add future support for additional live config schemas for World Builder. With this change, any live config schema files found under `{ProjectConfigDir}/LiveConfig/Schemas` will be uploaded to the web platform together with World Builder content. |
---|
Introduced new Engine Plugin M2LiveConfig to house JunoLiveConfig and ImprobableLiveConfig modules. Purely an engine-side refactor without any intended gameplay impact. |
This is a M2Unreal plugin refactor in preparation for the new Live Config system. Moved a few core modules from M2Services to a new plugin M2ServicesCore. |
Decreased non-fatal errors on startup |
Fix a startup error in Editor related to uninitialized FPropertyMetaData |
By default the new interaction list auto assigns a num-key shortcut to the first 10 buttons in the list (keys: 1,2,3,4,5,6,7,8,9,0). These shortcuts can easily be overridden or disabled in instances and child widgets. |
Add "SetCooldown" and "SetGlobalCooldown" methods to allow dynamic updating ability cooldowns |
The following UI for when you are being force navigated or have clicked on an interactable should now work as intended |
Fixed a missing nullptr check in Morpheus Abilities system |
Your avatar will change to a blank 'loading' avatar while loading an MML avatar. If the load fails it'll then revert to your standard avatar. |
Fixes an issue where the item management widget was visible before bootflow had completed. |
Can now optionally allow the HandleBootflowFinished delegate to run instantly instead of always waiting a frame |
Stability and performance improvements on the Millicast render system. |
Using inventory doesn't unequip an item now |
Fix gadget shortcuts not working |
Re-enabled shortcuts for new interaction list. Shortcuts can now be provided to the list and will be assigned sequentially to each button. Shortcuts also allows jumping to buttons not in view. |
Add more thorough checks for auto-use items, to prevent spamming items whilst they're in use/in cooldown |
MML avatars now take priority over modular characters. MML characters must be explicitly unloaded before modular characters will display again. |
MML avatars now take priority over modular characters. MML characters must be explicitly unloaded before modular characters will display again. |
Added additional checks for GLB avatars with incompatible skeletons |
Removed Emote o meter feature |
Optimize bot RAM at scale saving up around 6GBs per bot pod at 18k scale |
Device modules now support arbitrary shortcuts instead of forcing LMB/RMB (e.g. for for navigate, ping etc.) |
The portal logic has been updated to now include all available worlds for travel in the list, opposed to the prior cap of 12 max locations. |
Analytics Improvements for Emotes. Player location added to Emote analytics event Events added to the Emote Wheel menu for when it is opened and closed |
Fix the issue of bots stopping for a few seconds during the start-up of a scale test. |
Analytics event client_type is recorded after boot as GFN, Ubitus, or Native. |
Optimize bots RAM by around GBs when running at 18k scale |
Suppressed log spam from pointer deserialisation failure. |
Below is a list of all known issues with this release
Controls - Available control options are different between roles |
---|
Users will experience their cursor becoming hidden after moving the camera with left-click hold. |
Holding left click on the player no longer triggers the follow mechanic |
"Morpheus.Bots.Run chat" does not function with the new chat - this will be blocked until bots can authenticate on the web which is in progress |
Mยฒ Platform Release v12
12/02/2024
Latest binary version: v12.0.0.239244
Feature Test Gym
Now at Beta!
See here for documentation: https://docs.msquared.io/tutorials-and-features/feature-test-gym
Beta Quality - Customers are encouraged to test and use Beta features in their experiences, may still require some support
OVERVIEW The Feature Test Gym is a curated environment where we make all of our polished gameplay features (Beta and above) available in a single location. This serves as a great review location for engineers and customers, and a test area for QA to easily spot visual and functional regression. To access the same environment for Prototype and Alpha features, please use the Approachability Gym instead.
Emotes : Original System - Improvements
Now at Beta!
See here for documentation: https://docs.msquared.io/tutorials-and-features/emotes
Emotes are used primarily to non-verbally communicate with other users. They are also be part of gameplay design, such as votes or quizzes. Emotes can also be combined into Super Emotes - big icons floating above crowds.
They are triggered in game from the Emote Menu. This is opened using the Emote Action button which is currently set to B by default.
Improvements:
Updated Emote UI, Icons, animations and VFX
Updated Super Emotes
Detailed usage documentation added
Analytics hooks added
Emotes : Event Specific Loadouts
Now at Beta!
See here for documentation: https://docs.msquared.io/tutorials-and-features/emotes๏ปฟ
๏ปฟImprovements:
Custom Emote Sets can be set at a project level to override the default Emote Set
Custom Individual Emotes can be set based on player Roles
Millicast - Improvements
See here for documentation: https://docs.msquared.io/tutorials-and-features/video-players/millicast-video-streaming๏ปฟ
Millicast is a third-party streaming solution offered by Dolby.io which is an e2e solution for recording, encoding and showing live video streams in the experience.
๏ปฟImprovements:
Multiple bug fixes & QoL improvements
Added proper fallback images when streams are not active
Detailed usage documentation added
Analytics hooks added
Refactored functionalities of M2Services into new M2ServicesCore plugin
Whatโs broken and why?
Certain functionalities of M2Services
has been split into a new plugin, M2ServicesCore
. This may cause a breaking change if your project has references to certain blueprints or project settings that were affected by this refactor.
How to fix it?
Search through all project setting .ini files for any references to the following settings:
- [/Script/M2Services.M2_DomainSettings]
- [/Script/M2Services.M2_ServicesEnvironmentSettings]
And replace M2Services
with M2ServicesCore
. An example is the DefaultM2_Services.ini
file, which contains
[/Script/M2Services.M2_DomainSettings] OrganisationId={your-project-id} ...
This setting name should be replaced to reference M2ServicesCore :
[/Script/M2ServicesCore.M2_DomainSettings] OrganisationId={your-project-id} ...
How to test it?
Deploy a server from your stream via the world builder project CI pipeline. If the deployment is successful, connect to it and ensure that itโs operating as expected. Make sure web functionalities, such as authentication and user profiles works correctly
Emote Live config key changes
Whatโs broken and why?
The Emote live config keys were inconsistent in their naming convention so this change has just brought them all into one place. The keys that have changed are:
Old Key | New Key | Default Value |
|
| 5000.0 |
|
| 20.0 |
|
| false |
These keys have all been added the the m2unreal
live config branch with these default values.
How to fix it?
Update any existing values in your live config branch to the new keys if you have them different to the default values. Update any blueprint references to these keys to use the new keys
How to test it?
If you havenโt deliberately changed these values then just run your map and emote to check it all works as expected.
If you are explicitly overriding these keys then run any features using it to check it still behaves as expected.
New GSS instances in Web Platform
Whatโs broken and why?
gss_config.yaml
has been updated to point to the domains for the new GSS instances. The old GSS instances will be deprecated soon (following brown-outs), and deployment attempts via the old GSS domains will fail.
How to fix it?
Changes to .buildkite/scripts/gss_config.yaml
to update the domains were included in the last origin release (v10.0.0, 15/01/2024). The gss_config.yaml
file is isolated due to stream-specific live config URLs. If you havenโt already, merge this file into your stream and update any live config URLs to match your stream.
How to test it?
Check that your .buildkite/scripts/gss_config.yaml
file only contains GSS URLs of the form <env>.gss.m2hosting.io
.
During a brown-out, deploy a server from your stream via the world builder project CI pipeline. If the deployment is successful, connect to it and ensure that it's operating as expected. Make sure to check that the live config is correct.
Refactored the quickbar widgets
Whatโs broken and why?
The quickbar widgets have been refactored to share methods with a single base class: M2_ItemQuickbarWidget
. Some methods and properties have been renamed, which may mean that if you have made custom quickbar widgets, they will have some errors.
NotifyEquipmentUpdated
has been renamed toNotifyQuickbarSlotsUpdated
. This will be applied automatically, butEquipmentItemDetails
has been renamed toItemDetails
, which will result in a compile error.EquipmentSlotsBorder
andEquipmentSlotsContainer
have been renamed toQuickbar[X]
respectively. This means that the โbind widgetsโ wonโt be found until they are renamed.
How to fix it?
For
NotifyQuickbarSlotsUpdated
, simply drag the `ItemDetails` variable in wherever the oldEquipmentItemDetails
was.For the EquipmentSlotsBorder/Container widgets, rename them to QuickbarSlotsBorder/Container
In the widgetโs class defaults, make sure the
QuickbarComponentClass
andQuickbarSlotClass
are provided.
How to test it?
Test in-game - if your quickbar looks correct, then all good! There should be no noticeable changes.
This is a full list of everything that has been added or changed to this release
Fixed a bug where, when we follow a player, our next click to move input is invalidated |
---|
- Fixed an issue with reading live config |
NA (transient issue that wasn't present in last release) |
Fixed a bug that would break click to move navigation if the player used keyboard movement beforehand |
Audio widget now shows animation instead of square |
Flashlight highlighting placed behind live config setting and set off automatically |
Disables nearby mode by default |
Guard against rare networking crash. |
Cleaned up unused and redundant roles data tables |
You can use UJ_ModularCharacterComponent::GetAttachmentMesh to directly retrieve the mesh component for your added attachments. |
Managing attachments is easier, as add/remove functions now use FM2_StaticMeshAttachmentHandle |
Fixed issues where a players could load as an old default avatar. |
Changed live-config value used to skip the legal screens (Legal screen is just the improbable logo by default). Instead of using EntryFlow.SkipOriginLegalScreen use Bootflow.SkipLegalScreens. |
The text shown when using voice chat or the loudspeaker has been changed from 'Global Channel' and 'Global Loudspeaker Channel' to 'Speech' and 'Loudspeaker' respectively. |
- Control panels using dropdowns do not reset their control values when the UI is closed and re-opened |
Fixed crash when world travelling |
Some misc fixes for "auto use items": - Prevent spamming auto-use items, by waiting for them to finish - Add support for "parallel auto-use items" and "blocking auto-use items" - Fix a bug with the ability system that caused crashes when unregistering an in-use ability |
Added support for toggling Overhead nameplates |
The help / info text shown when in Place Mode is no longer cut off / not entirely visible. |
Added skinning to Unified text chat |
Added base for new Unified text chat. |
Cleaned up the player characters and pawn sets that were not used |
MML avatars can have socketed static mesh attachments |
The single interaction flow has been modified to now check for possible interactions before entering 'single target interact mode' and triggering an interaction. |
Prompt removed. Now uses the Temporary Notification system showing a message for 3 seconds |
Info widget no longer appears |
Can use M2M_CharacterAssetComponent to add and remove static mesh attachments from player characters. |
Fixed MML crash when world travelling |
Users will experience their cursor becoming hidden after moving the camera with left-click hold. |
The search/filter bar in the Inventory UI has now been hidden until it's functionality has been implemented. |
There is a known issue when running high scale bot tests - in order to avoid the bots running out of memory please run a smaller number of bots on each pod |
When using the PlayerSelector with the CrowdNavigator gadget/device, users can now select other players based on their current role and/or gameplay tag and force move them. Other gadgets using the PlayerSelector module will need setting up separately to enable these features. |
Interaction via clicking will now work within the interaction range of an interactable |
Added support for submenus in new interaction list |
Added support for toggling overhead nameplates which will also display the interact prompt. |
Player is able to interact with plinths & podiums multiple times, without having to move / navigate in between to re-trigger the interaction. |
Replaced click-to-move and world beacon ping SFX. |
World builder editor events can be sent to the analytics platform, hooking into the existing analytics subsystem |
All events coming in from Unreal will have "m2up." prefixed. Verbose logs will be printed in case of events having naming errors. The Analytics BP nodes now show guidelines for naming events. |
Analytics event names have been fixed up in code and blueprints. |
MorpheusAnalytics has been moved out of the Morpheus Plugin and in to M2Analytics. Http Subsystem is used to send requests. |
MorpheusAnalytics has been moved out of the Morpheus Plugin and in to M2Analytics. Http Subsystem is used to send requests. |
Fix a server crash that was caused by Super Emotes |
Morpheus core runnables can now use Unreals stats for profiling |
Optimise mark RAM by 90% (4Gbs down to 400Mbs) |
Reverb now uses the same source as the main speaker, so there is no doubling of load on the audio server. |
Adds support for non-foreground replication of floats and doubles. |
Adds support for non-foreground replication of bool and small int types. |
World Builder Data works inside of the project content folder. |
ConsoleVariables now supports device profile overrides |
Fix for world position offset materials failing to work in crowd after engine update. |
Packaged editor project settings can be viewed as read-only via a simple button instead of a confusing project setting. Developers can easily control what settings are visible via the project settings in a source editor. |
Player character movement sound component now detects falling, and will modulate the wind sound's volume with the player's velocity. |
Launch/Jump pad SFX can now be easily configured in downstream projects (are no longer hard-coded). |
Playtest pipeline now embeds paks as expected |
Editor analytics from within world builder |
Project configs can now be loaded inside of deployments. |
Http subsystem requests can now set a full url to use rather than using the default base url for the project. |
Uploads in editor display a progress window, including an upload bar. |
[Internal] Use threading instead of calling commandlets when uploading content from the editor. |
(currently unused) endpoint to be used by WB editors to upload map screenshots |
Below is a list of all known issues with this release
On GFN, if character meshes take longer than 10 secs to load in and the player character has not loaded yet and you try to quit out - the application crashes. |
---|
Users will experience their cursor becoming hidden after moving the camera with left-click hold. |
There is a known issue when running high scale bot tests - in order to avoid the bots running out of memory please run a smaller number of bots on each pod |
There is a known issue where bots stop moving, then spring to life when bot tests are run from 5k upwards to 18k |
"Morpheus.Bots.Run chat" does not function with the new chat - this will be blocked until bots can authenticate on the web which is in progress |
Mยฒ Platform Release v11
01/02/2024
Latest binary version: v11.0.0.236958
Spatial Audio - Reverb at scale
Reverb at scale - Massive improvement on the algorithm for supporting reverb in events of 10k+ participants.
Gameplay : Gadgets in Hand
Equipped gadgets will have a 3D model that is held in the users hand and animated as necessary.
Event Entry - Unreal
Now at Beta!
๏ปฟEntry flow into game and initial player experience.
๏ปฟSee here for documentation: https://docs.msquared.io/tutorials-and-features/entry-flow๏ปฟ
๏ปฟThe user experience flow from the moment they hit โPlayโ on Web with GFN/Ubitus through to the point where they have control of their player avatar.
๏ปฟDefining the Entry Flow and optional screens required to support different projects/customers
Implementation of a common loading screen across the whole loading process
Asynchronous Loading indicator implemented
Auditing Loading speeds and identifying optimisations
Error handling and Player facing error messages
Added support for multiple optional screens (legal, middleware, etc)
"Click to Continue" functionality added
Standardised loading screens and UI widgets
Detailed usage documentation added
Analytics hooks added
Controls & Interface : Game Ready Controls for Desktop
Traditional video game navigation and interaction controls with full manual character and camera control. Projects can opt-into Game Ready or Approachable control scheme. Users can also make the switch in the Settings menu.
๏ปฟDesktop features:
WASD movement
Camera movement anchored to mouse (right click not required)
Spacebar to jump & mantle
CTRL to walk (toggle / hold options in settings)
Shift to sprint (toggle / hold options in settings)
Right click to toggle on UI mode
Gameplay : Direct Interaction
UX to interact with objects that support only one verb at a time and therefore do not need to show an interaction list. Clicking or pressing the interact key (F) while targeting the object simply performs the verb.
๏ปฟ
For example:
Click on chair to sit,
Click on screen to watch
Over-the-Shoulder Camera
Over-the-shoulder camera option (in addition to centered camera) that can be enabled or disabled in the settings menu.
๏ปฟInspired by modern third person games, this camera angle moves the avatar to the left side of the screen and allows the user to see and target what's in the middle better (for example, they can see what they're targeting or about to place more clearly without being obstructed by the avatar).
Improved Inventory UI
Replacing the prototype inventory UI that is disconnected from the actual quickbar implementation with the intended version of the inventory that allows users to drag and drop possessions directly into the quickbar.
Feature Test Gym
Single location for quickly testing and demonstrating all features and assets
๏ปฟFeatures and asset groups can be assigned to sublevels that can be dynamically switched in and out
Avatar Importer
Making your shiny avatars UX on web (and importing ones from other places). Will in the future ideally work with the feature: Avatars : Import Tools
Gadget : Silencer
Now at Beta!๏ปฟ
๏ปฟ See here for documentation: https://docs.msquared.io/tutorials-and-features/gameplay-content/player-silencer๏ปฟ
๏ปฟ Hosts can use a specialised gadget to mute the microphone of selected participants to support Event Moderation. Features include:
๏ปฟ
Multiple User selection options
Mute/Unmute functionality
Player notificaitons
๏ปฟImprovements:
Integration with Object Selection system
Player now notified that they are Silenced
Improved selection options
Detailed usage documentation added
Analytics hooks added
Gadget : Beacon Ping
Now at Beta!๏ปฟ
๏ปฟSee here for documentation: https://docs.msquared.io/tutorials-and-features/gameplay-content/beacon-ping๏ปฟ
๏ปฟBeacon Ping is an event hosting gadget that can be used to mark a worldspace location with a highly visible VFX. This provides a way for event runners to quickly and easily direct event participants to specific locations to support interesting gameplay scenarios. Features include:
๏ปฟ
Customisable VFX & Colour Palette options
Beacon location preview
๏ปฟImprovements:
Integration with Object Selection system
Reduced number of discrete steps to activate
Improved readability of ping preview
Detailed usage documentation added
Analytics hooks added
Gadget : Coin Spawner (Coin)
Spawn coins, that can be picked up and added to your money totals.
๏ปฟTargeted Improvements:
Better visuals, particles for collecting.
Better coin UI.
Ability to drop different amounts either 1, 5, 20, 100, 500.
Object : Screen
Users can interact with the screen to enter a focused viewing mode.
๏ปฟDemontrates how a world object can manipulate the user's camera.
Object : Seat
Interactive seat objects users can sit in. While seated, they can interact with other objects such as screen to focus their camera on it. Users can also be forced to take a seat by a host using the Crowd Navigator gadget.
๏ปฟDemonstrates how an object can change the animation state of a character when interacted with.
Update ChartVersion
to latest available (v7.15.1) for World Builder projects
ChartVersion
to latest available (v7.15.1) for World Builder projectsDate of change: 18/01/2024
Whatโs broken and why?
We (Web Platform) are working towards migrating all clusters towards a new cluster topology, and will (eventually) need all projects to update to at least v7.14.1
of the colosseum Helm chart, but it is recommended to update to v7.15.1
.
How to fix it?
Update the ChartVersion
value in your project's DefaultEditorPerProjectUserSetting.ini
configuration file to be 7.15.1
.
How to test it?
Testing is most easily done by launching deployment(s) via the m2-world-builder-project-ci
Buildkite pipeline, and then checking either in the (Web Platform) Admin UI or the GSS that the correct version was used for the deployment.
WBP_Approachability_EquipmentQuickbar
has been removed
WBP_Approachability_EquipmentQuickbar
has been removedWhatโs broken and why?
The old (unused) WBP_Approachability_EquipmentQuickbar
has now been removed. All projects should switch to using WBP_ItemManagement
. If you use the old widget, itโll instead now look like this:
NOTE: We modified our WBP_TH_HUD to no longer have this widget. If your project used an old copy of that HUD, you may see this text blink on during startup. If so, you can copy the steps done in WBP_TH_HUD
to fix it:
In the HUD widget, delete
WBP_Approachability_EquipmentQuickbar
, and do โReplace with childโ onItemWidgetSwitcher
so thatWBP_ItemManagement
is all that's left.This will cause a compile error in
HandleLiveConfigUpdated
. Fix it up by removing the switcher logic, and replacing the widget whose visibility is being toggled withWBP_ItemManagement
Flip the โquickbar inputsโ capability so we default to not using it
Whatโs broken and why?
Previously we had the default behaviour when there were no capabilities present to be that the InventoryHandlerComponent bound LMB and RMB when you have an item selected. The problem with this is that we have lots of other systems that want these too. Instead, we now make the individual items control their inputs with ItemExecutor::ListenToInputs
. This way, we can support more types of inputs more flexibly.
If your project relied on โold style inventory input bindingโ, i.e. using the EventPrimaryInput
or EventSecondaryInput
events automatically, these will now be broken.
See docs page here for further details: https://docs.msquared.io/tutorials-and-features/the-inventory-system/how-to-use-devices#howtousedevices-note-deviceinputs
How to fix it?
Follow the steps in the doc: https://docs.msquared.io/tutorials-and-features/the-inventory-system/how-to-use-devices#howtousedevices-note-deviceinputs
You want to use ListenToInputs
to listen to the inputs your item cares about, instead of using the default Primary and Secondary
NOTE: If you absolutely need to get this old behaviour back, you can go to your roles table and add the Capabilities.Inventory.BindQuickbarActionsInHandler
capability to your required role(s)
How to test it?
Check the gadgets used by your project. If they all work, all good!
Replace BPC_M2_ApproachabilityCameraControl::UpdateClickToTurnOverride
with Add/RemoveClickToTurnOverrideStack
BPC_M2_ApproachabilityCameraControl::UpdateClickToTurnOverride
with Add/RemoveClickToTurnOverrideStack
Whatโs broken and why?
Instead of the old UpdateClickToTurnOverride
method which sets the โclick to turn overrideโ to either true or false, we now use a โstackโ approach. That way, if multiple places force you into โclick to turnโ mode, you only revert to the default once all have removed their overrides.
Any uses of the old method will be invalidated
How to fix it?
use the new methods, and pass the caller in
How to test it?
If things compile, and your input stack changes work, allโs good!
Currency and Purchase systems updates
Whatโs broken and why?
The J_CurrencySubsystem has been updated to a world subsystem. M2_Purchaser has some additional abstract functions. Vending machines have been updated and could potentially break derived assets.
How to fix it?
Fixing up an referance to J_CurrencySubsystem should be simple. You might have to recreate some nodes is all. If you have issues with vending machines, reach out directly to the point of contact.
How to test it?
Give any purchase flows a test and see if they are still functional.
World Builder deployment scripts now use Worlds
Whatโs broken and why?
We are moving away from using Deployments and Launch Contexts directly, and will instead use a new (central) โWorldsโ concept.
The various Python scripts used in the m2-world-builder-project-ci
and m2-world-builder-playtest
pipelines have been replaced with new scripts that will use Worlds, and World IDs, rather than Launch Contexts and Launch Context IDs.
This means that any โpersistentโ Launch Context that has previously been used with these pipelines will have to be replaced with (persistent) Worlds instead.
How to fix it?
Persistent Worlds can be created through the Web Platform Admin UI by navigating to the โWorldsโ page using the sidebar, and then clicking the โ+ Newโ button in the top-right corner.
This will bring up a modal for you to fill in with appropriate values, which will be dependent on the (customer/internal) project that the World is to be created for.
This page makes an attempt to cover how to create a World based on information in a persistent Launch Context
This page contains additional information about notable changes to the Buildkite pipelines
The following environment variables have also been updated. Please update any usage of them.
OVERRIDE_LAUNCH_CONTEXT_ID
>> OVERRIDE_WORLD_ID
(needs to be an actual World ID and not the Launch Context ID, see the link above how to create a World based on an existing Launch Context).
OVERRIDE_LAUNCH_CONTEXT_NAME
>> OVERRIDE_WORLD_NAME
EXTRA_MAPS_LIST
>> if used on the <map-name>+<existing-resource-id>
format it now expects a World ID instead of a Launch Context ID for the <existing-resource-id>
part.
How to test it?
Testing is most easily done by running either of the m2-world-builder-project-ci
or m2-world-builder-playtest
Buildkite pipelines using World IDs when prompted (or configured via environment variables).
World Builder dependency cooking is now enabled by default
Whatโs broken and why?
Dependency cook is a preferable way of cooking content as it can significantly reduce download file sizes. Instead of cooking everything, you provide a set of maps to cook - similar to how the -map
argument works in native Unreal Engine.
How to fix it?
If you do not have an M2_WorldBuilderData
data asset, create one:
Set the Maps
to contain whichever maps you would like cooked in your content, alongside a name for that map which is required for cooking.
If you do not want to use dependency cooking at all, you can disable it via the World Builder Settings under Dependency Cook
or set DEPENDENCY_COOK=false
as a CI environment variable.
How to test it?
Cook your project with no extra environment variables in CI. The Buildkite annotations should include the maps you asked, as well as any sublevels as required. Load into your game and it should function exactly as before, but should be a smaller file size.
This is a full list of everything that has been added or changed to this release
Fixed bug where upon opening the interaction list sometimes the first button in the menu is obscured and user is unable to bring it back into view when scrolling. |
---|
Changed player air control speed and added parameters to launch pads to be able to change the air control when launched from one |
Moderate refactor of interaction list to do input handling internally |
Added camera smoothing to over the shoulders cam and made it configurable in live config |
Added debug messages to the mml profiler |
Increased the threshold for click to move, now you need to click slightly further for click to move to work. Also moved the threshold to live config if we want to change that again |
MML attachments support translation offsets |
- The DefaultGait on the BP_M2_PlayerCharacterBase is now used instead of "jog" as the default gait (eg. after sprinting/walking) - Added ToggleJogState, GetDefaultGait on BPC_CharacterMoveSpeedComponent |
The "Q" key now exits out of the interaction menu instead of "F". Also clicking on the nameplate quickbar now toggles interactions. |
The launch pads in the FeatureTestGym now match those in LaunchpadGym_P |
Added the ability to use any input as a way to skip splash screens that are marked clickable |
Loading spinner has percentage of download displayed next to it. |
Consumable potions/auto use items now support visuals, and the presenter items have default visuals, with an override pose, equip/unequip anims, and a model |
Submenu's can now be toggled open / closed using their assigned shortcut key and functionality has been added to close a Submenu externally when / if needed. |
Skinned quickbar tool tip |
Skinned Quickbar slots |
Added new bot behaviours to Skypark: glowstick_blue and glowstick_colorchange |
New analytics events can be revisited if we want more |
MenuOnly buttons with Submenus can now support shortcuts / input actions. |
Info Widget buttons can now support shortcuts. |
The quickbar now uses the InputIcon widget - we can now modify the shortcut icons for the existing slots, and extend the list beyond the hard-coded 8. |
Allows collider to be shown for interactable within editor |
Added a new button list with custom scrolling behaviour and a shortcut key to trigger button actions. |
Pressing the 'Info Button' will now toggle the device's info widget containing further information / hints & tips if it is present. |
Loading spinner has downloading amount displayed next to it. |
Support for updating the "idle pose" when using a gadget in hand (setting up animation layers in our base BP) |
WBP_InputAction has been removed. All uses have been switched to WBP_InputIcon |
Adds support for selecting items outside of your quickbar (no UX has been provided for this yet though) |
By default all characters use the new input system for gadgets. The deprecated system is hidden behind a capability |
Device info is now recorded on start up |
m2.analytics.printurl and m2.analytics.seturl "<url>" have been added to the console commands. |
Adds Service metadata - Version, Instance, and Name - to all analytics events. |
Uploading now entirely uses M2 HTTP |
mod image customisable via showcase website now |
remove redundant loading screen image from world builder data |
Dependency cook is enabled by default for all projects |
Updated the Soundboard Control Panel to store assets in a Data Table, and added a volume control slider. |
Content can now be placed inside the project content folder, which is now always visible. |
None - testing only |
Editor uploads now only upload one pak per platform, reducing upload times significantly. |
Enable PSO precaching for DX12 Windows |
Integrate and upgrade draw calls visualisation debug overlay |
New modal warning the user about levels not added to world builder data, making clear that levels not added to world builder data will not be selectable when launching an experience. |
Template now uses MSquared branding with improved UX |
Morpheus Rpcs can now be deferred upon arrival if any of their params failed to be deserialized. We keep retrying to process these rpcs until they eventually succeed or timeout after 5 seconds. |
The error should not happen anymore |
Fix World ID not being passed to Ubitus streaming clients using the Stream Manager. |
Rename the screen interactables to "Screen" by default instead of "MillicastScreen" |
N/A |
Check if the editor builds after the change |
Prevented crash on startup caused by CL 236014 |
Fixed in B8223-CL236246 |
Shootable trace channel will no longer be blocked by Overlap all. |
Bugfix: Fixed rare instance where client could crash after a world travel. |
bots now skip loading legal screen |
Fixed an issue in Showcase where parties were not working correctly |
Fix item visuals (e.g. glowsticks) persisting when a player changes role or disconnects |
n/a |
Fixed an issue where Q wouldn't unequip your selected gadget |
n/a |
n/a |
n/a |
Fixes an on exit crash |
- Fixed an issue with the portal gun where world other than the one selected from the world list menu was being used as a destination for the portal. |
Fix a server crash caused by exceeding the number of UObjects |
Fix double Millicast screen for player |
Character stencil settings now apply to all modular parts, not just the body |
Fixed Interaction Handler-related runtime errors on BP_PlayerController and BPC_ApproachabilityMovement. |
Fixed a crash in bot CrowdAudio test |
N/A (internal change) |
Fixed the issues that caused missing material/skeleton logs |
Previously when switching roles you would lose your name tag and the text above your head when chatting. This should be resolved. |
Fixed bug preventing video screens from receiving Millicast stream when the screens are enabled in stages (not all at once). |
Fix budgets gui overlay crash |
The player can now slightly move when mid-air after being launched from a launchpad |
Fix portal gun menu |
- Fixed some scaling issues that affected pedestal object causing them to bounce violently. |
Fixed emotes playing in the animated crowd |
N/A |
Fixed a bug where disconnected player references weren't removed from the MapFromTagToPlayersWithThatTag |
Known issue - read ticket for more info |
Force PSO logging and reporting off to prevent log spam |
- Pedestals will not show the "Add to Collection" button if you have the item in your user collection. |
Warnings and Errors removed in build logs |
Known issue found where the chat window can become unresponsive - see ticket for more details |
Fix VSM trailing shadows bug |
Fix to bot behaviour after world-travelling. |
Movement interpolation no longer ceases to function on objects after 256 teleports have taken place. |
Internal: Fixed upload content modal formatting |
Fixed a flake in test BPFT_ComponentPointerReplication |
ix some issues that crashed the MML Avatar Modal |
There is a known issue where bots stop moving, then spring to life when bot tests are run from 5k upwards to 18k |
"Morpheus.Bots.Run chat" does not function with the new chat - this will be blocked until bots can authenticate on the web which is in progress |
Mยฒ Platform Release v10
Latest binary version: v10.0.0.234864
Origin now supports Unreal Engine 5.3
Audio : Advanced Music Player
Creation of a custom playlist from a library of available tracks
Previewing of a track in the library, without affecting the current track being played.
Three playback modes: Queue (where once a track finishes, it is removed from the queue), looping playlist (where at the end of the playlist, we loop back to the start), random playlist.
The ability to skip a track, in addition to the standard play/stop behaviour.
The ability to loop the current track, and pause/resume. Volume control.
Morpheus Core API change to remove redundant updates
Date of change: 13/12/2023
Affected Projects: All
Affected Features: MorpheusPlugin
Whatโs broken and why?
The Morpheus Core API has changed to allow the Plugin to track new Entities as soon as core knows about them. This also change also saves CPU time by getting rid of redundant Single NonForeground Property updates.
How to fix it?
The only way to fix it is to get the latest version of Morpheus Plugin which should be the case anyway.
How to test it?
Check it builds and networking is working as expected.
Split preprocessed and normalized signal processing in crowd audio API
Date of change: 12/12/2023
Affected Projects: All
Affected Features: audio
Whatโs broken and why?
The crowd audio C API has changed to account for the fact that the two preprocessing steps are now separate.
How to fix it?
Only important if you were previously using the C API from the crowd audio header directly. The plugin in M2Unreal has already been updated to account for this.
If you were previously using the crowd audio C API directly, you will need to modify the usage. The previous API for getting an output frame for the preprocessor was:
uint8_t Audio_Preprocessor_GetOutputFrame(Audio_Preprocessor* preprocessor, uint64_t output_pcm_data_size, float* output_pcm_data, float* output_ebur128_loudness_lufs);
This has now changed to:
uint8_t Audio_Preprocessor_GetOutputFrame( Audio_Preprocessor* preprocessor, uint64_t output_pcm_data_size, float* output_pcm_data);
and
Audio_Preprocessor_NormaliseFrame(Audio_Preprocessor* preprocessor, uint64_t pcm_data_size, const float* input_pcm_data, float* output_pcm_data, float* output_ebur128_loudness_lufs);
Specifically, the output loudness has been moved to the new function, and in order to get the exact same functionality as before, you must pass the output of GetOutputFrame
to NormaliseFrame
before using the output data.
How to test it?
Check it builds, and everything sounds fine.
Removed MorpheusServices from M2Development Uproject
Date of change: 05/12/2023
Affected Projects: ALL
Affected Features: Everything The project wonโt open and will prompt rebuild from IDE without making a change
Whatโs broken and why?
MorpheusServices has been removed from the M2Development uproject (info here). This means that all projects which have uprojects still referencing MorpheusServices will display an error that it is missing and prompt a recompile (which of course doesnโt make sense for content world builder projects). This will stop existing projects from being able to open
How to fix it?
For your world builder project (e.g., Opera). Navigate to the uproject and open it with a text editor such as Notepad++
In the "Plugins" section, find the entry for MorpheusServices and delete it
Make sure to also delete the comma for the above entry if MorpheusServices was the final plugin listed
Ensure the project can now open successfully
Reach out to #m2-world-builder-support if your project still does not open
Save the uproject and submit it to perforce so everyone in your team doesnโt also need to manually make this change
How to test it?
Try to open your uproject
PDA_Item_Silencer in no longer working. Moved to PDA_Item_Silencer_PlayerSelector
Date of change: 30/11/2023
CL: 230953
Affected Projects: All
Affected Features: Old Silencer Ability
Whatโs broken and why?
Due to recent changes for the Silencer_PlayerSelector ability the structure of the parameters changed and the old Silencer Ability can no longer use it. That causes that the old ability to not have access to some of the information and mute everybody when itโs activated, even if only one player is selected.
How to fix it?
Change the item given to the User from PDA_Item_Silencer to PDA_Item_Silencer_PlayerSelector on your role Starting Inventory Assets section.
How to test it?
Make sure the item is set to the correct role. Once on your inventory, select it and you should have the new UI visible.
Emote Selection Settings Moved to Roles from the Skin
Date of change: 28/11/2023
Affected Projects: All
Affected Features: Emotes
Whatโs broken and why?
The default Emote selection setting that shows on the Emote wheel UI has moved from the Skin settings onto the Role settings. This will allow projects to change the emote set that is used in the emote wheel whithout having to swap out the entire skin. It also allows for different emote sets per role
How to fix it?
In your Role data table, open up the Role Configuration Overrides
dropdown, and select Emote Selection
.
Change this setting to your Emote set PDA.
If you are only using one emote set for all users then you can just set this once on your base role, so long as your other roles inherit from it.
How to test it?
Run your map and open up the emote wheel in the normal way and check all your emotes are populated. Default keybind to open is B
Devices not using standard UI wonโt have the โdevice controls widgetโ
Date of change: 24/11/2023
CL: 230192
Affected Projects: All
Affected Features: Inventory
Whatโs broken and why?
If your device doesnโt specify any standard button data, it now wonโt show the controls widget. This widget is built using standard UI, so it makes sense to no longer show it if youโre not using standard UI. This enables us to hide the widget if e.g. youโre using custom widgets.
How to fix it?
If you want your device to have the widget on the bottom-left, youโll need to provide some data. you can do this by following the steps outlined in https://docs.msquared.io/tutorials-and-features/the-inventory-system/how-to-make-devices#howtomakedevices-configurethe-buttondata
How to test it?
If you go in-game and equip your device, you can see whether it has the widget on the bottom-left or not
Removed LoadInteropCharacterFromProfileEndpoint
Date of change: 24/11/2023
Affected Projects: Any that use Remove LoadInteropCharacterFromProfileEndpoint
Affected Features: Modular characters
Whatโs broken and why?
There are multiple live configs controlling how to load avatars from peopleโs profiles. Character.UseCharacterFromProfileEndpoint
was added a few weeks ago alongside LoadInteropCharacterFromProfileEndpoint()
to use the new profile endpoint. The live config and function have now been removed again, and has been made the default behaviour controlled by the old Character.UseCharacterFromProfile
live config. The old method of storing your avatar URL in the kvstore has also been removed, as the profile should be the single source of truth.
How to fix it?
If your project calls LoadInteropCharacterFromProfileEndpoint
then this should be replaced with LoadInteropCharacterFromProfile
instead.
If your project enables the Character.UseCharacterFromProfileEndpoint
live config then it should enable Character.UseCharacterFromProfile
instead.
How to test it?
Characters should automatically load (or not) from your user profile based on your live config settings, as per before.
GetPlayerProfileModelUrl replaced by GetPlayerProfileAvatarDetails
Date of change: 23/11/2023
Affected Projects: Any that manually reads the playerโs avatar from their profile
Affected Features: Avatars, Profile
Whatโs broken and why?
GetPlayerProfileModelURL
would just return the URL of the avatar, but you couldn't tell if it was an MML or a GLB avatar. Itโs been replaced by GetPlayerProfileAvatarDetails
which is an async function, due to potentially having to refresh the user collection to discover the type. This also returns the type of file the URL points to (MML or GLB).
How to fix it?
Replace any calls to GetPlayerProfileModelURL
with GetPlayerProfileAvatarDetails
. You may need to slightly rework some code as the call is now async, for example moving it to the event graph from a function.
How to test it?
The avatar URL and type should be successfully retrieved and your avatar should load in.
Migrate observer camera config data across to the new persistence system
Date of change: 21/11/2023
Affected Projects: All
Affected Features: Observer Camera Saving/Loading Management
Whatโs broken and why?
This update changes the behaviour when saving/loading the Observer Cameras. Now the persistence data of the cameras are saved per Project instead of per Organization. That means every single branch of an experience will have its own Observer Camera Data which can be problematic since every new branch might require re-adding manually the cameras again.
How to fix it?
I added an option to save/load the camera configurations locally. So now it is possible to backup these configurations for later usage if necessary.
Just need to check the โSave/Load Config Locally?โ to enable the option. It is possible to load a file locally and then saving it into the persistence data if necessary (or the other way around).
This only works for local editors i.e. you need to download the game or use the Unreal Editor in order to save/load these files locally. It doesnโt work for Streaming games like Geforce or Ubitus.
The saved file can be found in: <RootFolder>\Game\Engine\Saved\ObserverCameraConfig.json
How to test it?
Swap to the Observer Role
Press ALT+Z to open up the Observer Camera Controls Menu
Create Cameras
Check the box Save/Load Cameras Locally
Save the cameras (it should work).
Close the game and open up again
Re do steps 1, 2 and 4 (don't create new cameras)
Press Load cameras and see if it's loading the same cameras you created earlier.
Audio: BP_Audio_MusicController replaced by BPM_M2_Audio_MusicController
Date of change: 21/11/2023
Affected Projects: All
Affected Features: Audio, Music
Whatโs broken and why?
The old Music Controller was not a replicated system, and relied on other control panels to handle replication. The new system handles replication itself, and adds a large number of additional feature, such as playlist modes, previewing, pausing, etc.
How to fix it?
The new music system loads music data from a data table:
Please duplicate
DT_M2_Audio_Music
and rename it appropriately.Populate this data table with your music tracks, ensuring that each has a unique ID.
You can also set a volume modifier for each track, if required, and adjust the trackโs fade-in and fade-out durations.
Set the SoundClass on all of your music tracks to
SCL_M2_NonWorld_Music.
Do not enable looping on the music tracks (this is handled by the control panel).
Place an instance of BPM_M2_Audio_MusicController in your map.
Populate the MusicDataTable variable with your new DataTable.
Once in-game, the panel can be opened, and used as follows:
Currently Playing: This shows the currently-playing track, and the state, such as โPlayingโ or โPausedโ.
Playlist: This will show a list of buttons for the loaded data table of music. In the above track, the Playlist is empty, as nothing has been loaded. The buttons can be clicked to immediately being playing the clicked track.
Playlist Mode:
Queue: Each track is โconsumedโ once played. This functions like Spotifyโs Queue.
Playlist: Each track plays in sequence, and once the playlist finishes, it repeats back to the start.
Random Playlist: Tracks are played randomly from the playlist.
Play/Stop/Skip: begins playing the Playlist, stops it, or skips the current track.
Pause: Pauses the currently-playing track.
Looping: Loops the current track.
Available Tracks: Shows a drop-down of all tracks found in the DataTable.
Track List Controls: Allows addition and removal of tracks to/from the Playlist.
Preview: Plays the track that is selected in Available Tracks. Does not replicate, so only the Director will hear this.
Volume: Allows manipulation of the current volume. In playback mode, this will only affect the music that is being previewed.
T button mapping removed from โStartTextMessage' action mapping
Date of change: 20/11/2023
Affected Projects: All
Affected Features: Text chat
Whatโs broken and why?
This will stop 'T' being a shortcut to open chat in any project
How to fix it?
Add T back to โStartTextMessageโ action mapping
Use this flow
How to test it?
Press T
Character asset management has moved to a new component
Date of change: 17/11/2023
Affected Projects: All
Affected Features: Modular characters and animated crowd
Whatโs broken and why?
The management of which character asset is loaded both on actor render targets and the animated crowd has moved to a new component, UM2M_CharacterAssetComponent
. This is a refactor which simplifies the logic around which โmodeโ a character is in (e.g. modular character, Unreal GLB, Carnival etc). This encapsulation has involved removing some low level access to this logic from the Blueprint API:
Removal of direct access to
JM_CharacterBase::DefaultCrowdMemberInitializer
. This allows the animated crowd state to be fully managed inside the new component.Removal of the
UJM_CarnivalCharacterComponent
, as that logic now lives inside the new character asset component.Deprecation of
JM_CharacterBase::AddedCrowdStaticMeshesOverride
, `UM2M_CharacterAssetComponent
::AddedCrowdStaticMeshesOverride
` should be used instead, however the old behaviour remains in place for now.Removal of
UJM_ModularCharacterComponent
::LoadSingleSkeletalMesh. This was very recently added for Carnival logic but is being removed as the logic is now encapsulated inside the new component.Removal of `
UJM_ModularCharacterComponent
::CreateCrowdMemberInitializer
`, as the logic is now encapsulated inside the new component.Removal of `
UJM_ModularCharacterComponent
::SetCharacterOnRenderTargetActor
`, as the logic is now encapsulated inside the new component.Removal of `
UJM_ModularCharacterComponent
::ClearCharacterFromRenderTargetActor
`, as the logic is now encapsulated inside the new component.
How to fix it?
Deprecated functions should still retain their existing behaviour by default. If you were modifying or accessing the removed low level access functions, please use the high level (existing) functions on `UJM_ModularCharacterComponent
` instead, or get in touch with myself if those functions do not support your use case.
How to test it?
Load different character types (e.g. from Profile MML link or randomising character with backspace), and ensure that they are replicated and loaded correctly
This is a full list of everything that has been added or changed to this release
Fix issues with the nVidia Client SDK web integration. |
---|
Admin UI: Organization Datasources page shows your datasources and contains option to upload mml avatar assets |
Showcase UI: MML Avatar Editor v1 |
Internal: Reconcile slot data periodically |
Internal: Fixed permissions for slot created by user |
Analytics are enabled by default and can be disabled in the live config for each project. |
---|
Flattens data output of analytics events to match json schema requirements. |
[Internal] Fix Ubitus label year |
Internal: when triggered from m2-world-builder-playtest-pipeline, m2-world-builder-project-ci no longer displays a button to stop all deployments. |
Pak audits in world-builder-project-ci are now uploaded as artifacts. |
Added more metrics for networking updates coming from morpheus |
---|
Removing the already deprecated logic for determining a variable's networking level from its name prefix. |
A performance improvement to Spatial Audio that makes the performance cost of reverb zero to the audio server, in exchange for a small cost on the client. It should be free to enable at scale in future tests. A new live config variable, to supplement the existing `CrowdAudio.CrowdAudioSettings.PreprocessorSettings.EnableUnrealReverbApplication` has been added: `CrowdAudio.CrowdAudioSettings.PreprocessorSettings.UnrealReverbGain`. This float represents the gain applied to the reverb when mixing in to the main signal, defaulting to 0.3. |
Improve performance of morpheus tick by getting rid of duplicate NonForeground updates |
Updated/improved SFX for the timer prop, adding a completion sound, and simplifying the logic. |
---|
CARNIVAL supports MML characters with multiple slots on foreground characters (previously only the Body slot was supported) |
Fix cook warnings when binding a ByteAddressBuffer with a SHADER_PARAMETER_RDG_BUFFER_UAV |
- Add scale option to portal gun |
Content uploads can now support patching, allowing for significantly smaller subsequent uploads when adding new content. |
- Adding portal effects when teleporting. |
CI uses correct branch/commit CL when running test stream jobs. |
Music Control System now supports late joiners. |
Added a project setting that allows Unreal to skip packaging all except the lowest detail LOD for nanite enabled meshes to reduce package content size |
Add a context menu item when selecting Static Meshes in the editor to set the LOD Groups of multiple Static Mesh at once |
Add a context menu item when selecting Static Meshes in the editor to set the Fallback Mesh settings of multiple Static Mesh at once |
updated world travel to update splash image on cross org world travel. also updated mass teleport ability to support cross org world travel |
Dependency cooking is disabled by default, and allows for more control over the cook. |
Increased feature set for crowd test gyms, notably providing more ways to drive animations (including a mode to emulate some amount of the Morpheus anim var update logic) as well as extending tests to update custom per instance data to crowd members. Some extra handling around crowd min/max instance counts to allow these numbers to be tweaked dynamically during PIE. |
Crowd test gym actors updated to allow crowd update to occur either during tick or via the end of frame engine delegate. This allows us to emulate the calling behaviour that the Morpheus network connection update would perform more accurately in tests and is enabled by default. |
We have replaced the old music controller system with a new replicated control panel system. |
Added a toolbar button to access the documentation site |
Fixes the approachability UI for navigating to interactables |
---|
Fixed animation montages not playing (e.g. for emotes and sitting) |
MML characters no longer need a type attribute for each sub-model - they will be loaded regardless |
Back button functionality for focus cam on screen |
Added gameplay capability Capabilities.HideAvatarSelection to prevent avatar modification from the avatar settings menu |
Nameplates now update properly when focusing on a new interactable |
Gadgets support equip and unequip animations |
Players will switch to the correct UI mode when enabling/disabling game ready settings |
V1 gadget in hand in the background. No pose, equip/unequip animations etc., but has the mesh on the animated crowd |
Added a new button type - 'DisabledButtonWithSubmenu' that can be used as a default disabled button that still supports a submenu. |
Investigation confirms the use of StandardTextBlockData Button Lists as acceptable for info widgets. |
Made a representative gadget in hand with client auth foreground properties: the color changing glowstick (NOTE: LOD0 only) |
Updated the super emote icons to the new icons |
Taken the icons for the emotes from opera and integrated into origin |
You can now select both MML and GLB avatars from the Settings menu |
- Event already present: JM_EquipmentComponent -> OnActiveExecutorUpdated |
- Added analytics for the Silencer usage When the silencer is used it will send an analytics message with: - Mute value (True/False) - UserID / Tag / Role being muted |
Silencer is added by Role using the Starting Inventory Assets. Currently only the Presenter role has it |
Updated message for silenced players on top of the mic icon Popup now appears on muted players notifying that they have been muted and the user that muted them. The player with the Silencer can now see the muted users with an icon on top of the player nametag |
Silencer now uses the current version of the player selector. Any updates to the Player Selector should be reflected in the Silencer UI automatically. |
Icon and Mute text now shows on top of the player username tag - Requisites are to have the Silencer active and for the player you see to be muted |
User friendly messages added to the bootflow spinner in the bottom left, should have nice new messages for the login flow. |
Location Selector buttons are hidden but we keep the functionality |
Added fade out for the Ping Locator making it disappear while the ping plays |
New size functionality added to UJM_ResizeableActorComponent. ServerSetSizeIndexOnActor and GetCurrentSizeIndex to allow accessing and setting the role size index directly on the resizeable component |
Removing T shortcut for text chat |
MML lights no longer cast shadows, which will improve performance |
Small optimization for mml model loading |
Designers can now set buttons and info widgets to hidden if it desired to hide them from the user. |
Mouse pointer is now hidden until the player enters the game. |
Add option to save/load observer cameras using a local file instead of the persistence system |
Allow item executors to force disable UI mode and re-enable it |
Documented our Jump Pad feature. |
Cache number of triangles per mesh for the MML profiler, improving performance and stability |
Fixed performance issue that caused Morpheus Actors to update their transforms every frame, even when they hadn't moved |
Added a queueing system that spreads out mml model loading over several frames to avoid cpu spikes in a single one |
Right click now activates the Beacon Ping right away. No need to select a location first. The Ping UI now shows the correct shortcut for the Ping action. Color selection config moved to be a submenu of the Ping Button. Location Selection UI will be hidden once the functionality to hide them is implemented |
Right click now activates the Beacon Ping right away. No need to select a location first. |
Ping ability not triggers right away when right clicking. No need to select a location first. |
Functionality on Pings changed. Now the Right click will spawn the Ping indicator and Ping at the same time. The Ping indicator has a fadeout and will disappear after 3 seconds (Duration can change) |
Now have the ability on the splash screens to force user click to make sure they acknowledge the screen which could be a control screen. |
Reduced MML document spawning time into a level |
Creating test cases to reflect the Beacon Ping functionality and for manual testing purposes. |
Analytics events added for interactions |
Click to move setting will turn off automatically when game ready is turned on |
Setting entries in settings data tables can now be shown/hidden based on a given live config, or a set of player capabilities. |
Optimized server performance when changing roles |
Added Analytics to Ping events. |
Improved the default values of Launch Pad configurations to make them more intuitive to use. For example, Launch Pads now launch players that walk on them by default. |
Migrated the intro sequence user data within bootflow over to the new persistence API. |
Added four custom bool anim vars that projects can use in their own ABPs. Set them through the JM_AnimVarsComponent on the Morpheus acto |
Millicast screens double up when re-sizing application window (appears on a variety of streaming platforms)
Side screens can't be added on the same millicast streaming channel at the initial state
Controls - Cursor gets stuck as hidden after orientating camera with left-click
Bots stop moving, then start again
There is a known issue where bots stop moving, then spring to life when bot tests are run from 5k upwards to 18k
"Morpheus.Bots.Run chat" does not function with the new chat
"Morpheus.Bots.Run chat" does not function with the new chat - this will be blocked until bots can authenticate on the web which is in progress
Mยฒ Platform Release v9
Latest binary version: v9.0.0.228965
Launch Your Own World in Construct with World Builder Mods
Anyone who has permission can customise their own world with World Builder in the Construct metaverse. Simply follow the instructions from our documentation.
Portal Gun - Experimental
Select a destination, spawn a portal that goes ONLY to there. This is in world and can be used by others.
Audio: Footstep sounds can no longer be updated via a PMat:Sound map.
Date of change: 07/11/2023
Affected Projects: All
Affected Features: Audio
Whatโs broken and why?
We have changed the method for setting footstep sounds from a manually-updated PhysicsMaterial:SoundBase map, to a data table, that should be easier to manage.
How to fix it?
If you are using the default footstep sounds, no action is required. Otherwise, you will need to duplicate DT_M2_Audio_FootstepSounds, and add new custom footstep sounds, using the following guidelines: Character Movement
How to test it?
If footstep sounds can be heard when moving on a surface that has a correctly-set Physics Material, you should hear footstep sounds if the data table is set up correctly.
M2 HTTP Content Streams API Update
Date of change: 07/11/2023
Affected Projects: All (C++ Only)
Affected Features: M2 HTTP
Whatโs broken and why?
Public API Update so there will be a compile error.
IContentWriteStream
andIContentReadStream
interfacesModified to use
FContentDescriptor
when setting/reading standard content headersRemoved
GetType
/SetType
andGetLength
/SetLength
function members
FReponse
public APIRemoved
GetContentLength
function memberRemoved
GetContentType
function member
Added
GetContentDescriptor
function memberFFileWriteStream
,TStringWriteStream
,TMemoryWriteStream
Removed
GetType
function member
Removed the string builder read stream
TStringBuilderReadStream
Currently there are only 2 affected classes (these have been fixed):
UM2_AsyncTaskDownloadImage
FM2_HttpResult
How to fix it?
If you have all the latest files, its should not be broken.
How to test it?
Run the M2HTTP Tests under Tools>Session Frontend>Automation>M2HTTP
New Features:
Optimized MML model loading which significantly reduces time.
Live config flag added to show or hide entering experience.
The arrow has been removed. Currently, we have only a sphere as a mesh.
Origin release version number is now shown in the bottom right and this adds a new live-config flag to enable or disable it depending on your needs.
MML model loading has been moved to a background thread to decrease the game thread's freeze time when loading a new mml document containing a model.
Static MML connection has been moved to a background thread to decrease game thread's freeze time when loading a new mml document.
Keyboard shortcuts are now included with the info widget actions.
Fixed speaker's microphone indicator not appearing always when the user is speaking.
New analytics events have been added to understand steps in the entry flow where players are dropping out.
Live-config flags have been added to control fade in works such as the color, time, and more.
The loading screen will now fade in when the player hits the ground.
Players can now change between jogging and sprinting through a HUD button.
Non-clickable buttons that represent input hints are now showing the assigned shortcuts.
Setting under "Controls" lets players choose between Game Ready controls and Approachability controls.
Added portal gun that allows users to create a portal to another world in the metaverse.
Added button for cards in admin.m2worlds.io to download the latest server logs for deployment.
Added a video encoding specification to docs.msquared.io to help you deliver high-quality video in your experience.
UI Skinning System now allows for UI sound skinning - You can now use a data table asset inside a skin to automatically change UI sounds.
Bug Fixes:
Fixed username moderation. Previously it was rejecting all usernames if moderation was enabled.
Fixed a bug impacting the jump animation.
Launch Pad VFX now correctly corresponds to launch trajectory. This gives players in your experience a better idea of where a launch pad will launch them.
Launch pad destination coordinates no longer default to the same position of the launch pad.
Fixed a performance spike caused by Super Emotes at large scale.
Fixed error with our default UE5 skeleton causing issues when loading some GLBs.
Fixed a race condition when serializing a UObject pointer for replication.
Known Issues:
Known issue where bots stop moving, then spring to life when bot tests are run from 5k upwards to 18k.
"Morpheus.Bots.Run chat" does not function with the new chat.
Mยฒ Platform Release v8
Latest binary version: v8.0.0.226656
Updating the flow for calling TransferObjects on User Collection Subsystem
Date of change: 20/10/2023
Affected Projects: All
Affected Features: User Collections
Whatโs broken and why?
We wanted to provide a means of adding server validation before TransferObjects is called on servers. This required a change in API on the M2_UserCollectionSubsystem. The M2M_UserCollectionComponent also provides functionality that allows for callbacks to be recieved on clients when the transfer request has been executed by M2Connect.
How to fix it?
You will have have to either: create a new derived M2M_UserCollectionComponent or continue to extend a M2M_UserCollectionComponent if you already have one associated with your project. You should then set UserCollectionsComponentClass on the JM_CharacterBase used in your project to this component class. Create a new server RPC function/custom event on your M2M_UserCollectionComponent. This function/custom event should contain the validation you want to do, then call M2M_UserCollectionComponent::TransferObject. Before calling your new function, you should call M2M_UserCollectionComponent::RegisterClientTransferRequest and ensure you pass the returned TransferRequestId into your server RPC function/custom event.
How to test it?
Make sure your transfer logic is functioning as expected.
m2-world-builder-project-ci cooking change side effect
Date of change: 19/10/2023
Affected Projects: All that have a WorldBuilderData with the โMapsโ field filled out in Origin Release November 1
Affected Features: m2-world-builder-project-ci
Pass through FMorpheusMovement to FillAnimVars rather than fetching internally
Date of change: 01/11/2023Affected Projects: All
Affected Features: Animation
Whatโs broken and why?
Interface change to UJM_AnimVarsComponent::FillAnimVars
virtual function. Making this change will allow us to perform more representative testing of some aspects of crowd performance locally without needing to resort to a scale test (full details in cl description).
How to fix it?
Projects that implement their own classes based off of UJM_AnimVarsComponent
that implement a custom FillAnimVars
will need to add the additional parameter to match the new function signature. They will additionally need to pass this parameter down to the base class.
Projects that call FillAnimVars
will now need to supply the current movement to the function. To maintain equivalent behaviour to before this change, this can be achieved by doing the following:
const FMorpheusMovement CurrentMovement = AnimVarsComponent->GetOwnerMorpheusActor()->MorpheusActorMovementComponent->GetCurrentMovement(); AnimVarsComponent->FillAnimVars(DeltaSeconds, CurrentMovement);
How to test it?
Check that animations and in particular crowd animations are updating as expected.Whatโs broken and why?
World Builder cooks now use a dependency cook instead of cooking all assets. Maps are used as the primary assets for this dependency graph. Without any overrides or changes, CL224200 uses the WorldBuilderData list of maps.
If no maps are in your WorldBuilderData asset (or you donโt have one), it cooks everything as before. If any maps are found, it will only cook those specific maps (inc. sublevels) and ignore other maps.
CL225721 includes a change which adds the CI experience map as a default to this list, but is not contained in the Origin Release November 1.
How to fix it?
If you donโt have a WorldBuilderData asset or no maps in it, you can ignore this breaking change.
Either of:
Remove all maps from WorldBuilderData so everything is cooked as before. You can still use
OVERRIDE_MAPS_TO_COOK
to use this new dependency cook system if desired.Add the required maps to WorldBuilderData so the maps you need are cooked as before. These only have to be persistent, top-level maps as sublevels are dependencies and therefore cooked too.
How to test it?
Run an m2-world-builder-project-ci with the modified WorldBuilderData asset and ensure the map is cooked by running a depo
New Features
Projects can now easily change the appearance of the UI Widget that displays the microphone input volume level.
Fixed a bug where the launch pad VFX breaks when the player moves far away.
Include both orgId and orgName when browser logging across all the web UIs for more consistent per-org tracking and breakdowns.
Roles behaviour is now tested in Skypark_P scale tests.
We can now optionally use a "Policy Guide ID" field to make use of CommunitySift's Next Gen" Policy Guides and Content Queues. If not specified, the default Classic Policy Guides and Content Queues will be used.
BP_ApproachabilityPlayerCharacter supports walking/sprinting movement modes.
Allow devices to use custom interfaces (not just standard UI) by overriding the Quickbar Widget Class property.
Keyboard shortcuts added to the interaction prompts (behind a live config feature flag).
Improve Millicast UX by adding a BP for Millicast Channel so the C++ class doesn't have to be placed in level.
The JunoHighSociety content plugin has been removed from Origin. Please refer to the breaking change log for more information.
When in loud speaker mode, icon will update to loudspeaker instead of a mic.
Switching to drone cam won't freeze your old pawn in place.
Added shortcuts to gadget menus.
Added shortcut support for devices/gadgets.
Appropriately configured maps allow groups of chattering bots to be managed.
The voices of speaking bots reverb now.
M2UP & Worldbuilder
When using dependency cooking, cook the experience map by default in CI alongside other maps and add option to cook all content without any modification as before.
Added bSequentialUpload=<True/False> ini setting for *EditorPerProjoectUserSettings.ini which is exposed in-editor to enable sequential uploads.
Added prompt when an upload is complete to optionally navigate to the web portal.
Uploads now prompt to save assets before upload occurs.
Renamed template content mod to Mod from BaseExperience.
Disabled creating new plugins in World Builder editors as is not supported.
Template landscape material no longer flickers.
Implement a new UI option for the World Builder editor which streamlines the user experience.
Millicast actors have now a per-instance flag allowing the screen to be rendered in post-process or by default pipeline.
Millicast screen actors will render as screen only the appropriate mesh component and leave the rest, like frame meshes, to be rendered as normal geometry.
Timings are now from 3ms to 5ms with 18K bots on GFN G6_Full and Ubitus A10.
Replaced an expensive call in Approachability PlayerController for updating highlights on late joining players with a cheaper, bespoke one to add individual objects to the InteractablesTracker.
World Builder cooks can now optionally only cook files that are depended upon, instead of cooking the entire plugin.
Projects with origin worlds launching now use it for launching worlds instead of the editor launching inside a packaged editor.
Networking
Morpheus Arrays can now be used in Blueprints.
Bug Fixes
Improved the launch pad "air-stream" effect so that it now loops seamlessly.
Fixed an issue whereby bots not in the foreground had no visible render target.
Moved device profile settings so streaming client settings do not override scalability settings. The previous override in bloom quality caused a validation crash on a motion blur texture.
Mยฒ Platform Release v7
Latest binary version: v7.1.0.224875
Prosumer Experiences
Controls & Interface : Default Origin Skin (Alpha)
A clean & simple UI/UX skin for the Player HUD, Pause Menus, Inventory, Chat, Quick Bar, Placing Objects, etc that can be used as is in any project. Projects can freely re-skin these elements to suit their needs.
Web Experience : Web3 Wallet Linking
Users will be able link their existing Wallets to a metaverse, enabling them to get access to their NFT collection.
Object: Launch Pad
Now at Beta!
See documentation. Launch Pads launch players who enter them in a predefined direction. This provides a way for users to quickly and easily traverse the environment, and for operators to create interesting gameplay scenarios. Features include:
Ability to launch multiple users concurrently Customisable destinations, including Actors and worldspace coordinates Adjustable launch speeds and flight arcs.
Operator Experiences
Windows Native Client (Alpha)
Events with high risk appetite can use Windows Native Client to reduce their Pixel Streaming cost.
Unreal Engine Capabilities
Pixel Streaming UX Improvements
Enhance user experience (UX) by making the GFN InternalError page user-friendly, familiar, and useful. Provide resolution suggestions and an error message that aligns with the overall user experience.
Enhance developer experience (DX) by providing clearer tracking for absolute streaming failure rates. This includes counting users who are completely unable to enter a stream even after numerous attempts and activating alerts when limits are surpassed.
Improved Landscape Details
Virtual Heightfields are an optional addition to Landscape actors which procedurally increase rendered detail.
They create additive GPU based meshes near the player that can have a higher geometry density than traditional landscapes This feature will be evaluated by the art team to assess usability and performance impacts.
Morpheus Crowd Rendering Improvements
Ability to populate crowd with distinct looking character models.
Breaking Changes
The below breaking changes have been introduced since the previous Origin Release.
Removing unused variables from World-Builder Config Python Script
Date of change: 16/10/2023
Affected Projects: All World Builder projects
Affected Features: Build
Whatโs broken and why?
Some (not all) of the variables set in the .config/world_builder_config.py
are being moved to global build configuration or being removed to simplify world-builder configuration.
As the variables will not be accessed any more, the build scripts will still work even if you do not โfixโ it, but project owners (or whoever handles copying from //M2Unreal...
) may end up spending extra time integrating this file manually in future.
How to fix it?
Remove the SERVICE_ACCOUNT_SECRET_NAME
, LOCAL_SERVICE_ACCOUNT_FILE
, and WORLD_BUILDER_CLIENT_START_MAP
variables (and the comments above them) from the .config/world_builder_config.py
file.
How to test it?
Run a build of the m2-world-builder-project-ci
Buildkite pipeline: https://buildkite.com/improbable/m2-world-builder-project-ci
If the build succeeds (including creating an allocation and adding bots), the change was correctly applied.
As the variables are no longer being accessed, the Buildkite builds should work even if you do nothing.
Move world-builder project-specific variables into global build config
Date of change: 25/10/2023
Affected Projects: All World Builder projects
Affected Features: Build
Whatโs broken and why?
World-builder Buildkite builds (including, but not limited to, the m2-world-builder-project-ci
pipeline) and any local invocations of the scripts under .buildkite/scripts/WorldBuilder
). Unless the Build configuration is fixed (typically be editing the projectโs .config/depot.yaml
file), the scripts (and Buildkite builds that run them) will not be able to find the world-builder uproject files.
How to fix it?
Setting the world-builder uproject path
For world-builder projects where the uproject file can be found at the following location:
{game_project_name}/{game_project_name}.uproject
โฆyou can edit the .config/depot.yaml
file so that the value of the game_project_name
field matches the game directory under the Perforce workspace root.
For example:
The //affogato/main
Stream has a uproject file at Affogato/Affogato.uproject
. So the .config/depot.yaml
file should have an entry like:
# This must match the name of the directory (under 'Game' for full-engine # projects or under the Perforce workspace root for world-builder projects). - name: game_project_name meta_data: game_project_name env: GAME_PROJECT_NAME value: Affogato
Make sure the YAML files under .config/
do not have a field named world_builder_project_path
or it will override the default that is based on the game project name.
OR
For world-builder projects where the base name of the uproject file does not match the {game_project_name}/{game_project_name}.uproject
format (e.g DawkinsFormat
), you should the world_builder_project_path
config field instead.
Ensure your .config/depot.yaml
file (or use .config/stream.yaml
if the project path is specific to the Stream) has the following entry:
# If this Perforce depot has a world-builder project, this field value should # be set to the path of uproject file (relative to the Perforce workspace # root). For non-world-builder projects; this field is not used. # This field is defined in '.buildkite/config/base.yaml'. - name: world_builder_project_path value: ExampleProject/ExampleProject.uproject
The value of this field should be equal to the .config/world_builder_config.py
moduleโs PROJECT_TO_BUILD
variable.
Any world-builder project can use โworld_builder_project_pathโ instead of setting โgame_project_nameโ if they prefer (the project path takes priority, so if both are set, the path will be used).
Setting the template project to build
For world-builder projects that want to use the M2StarterProjectBP
project as the template (for cooking and uploading template content), they do not need to configure the world_builder_template_project_path
config field.
For world-builder projects that want to use a different template project, simply add the following to their .config/depot.yaml
(or .config/stream.yaml
) file:
# Path to world-builder template uproject file. # This field is defined in '.buildkite/config/base.yaml'. - name: world_builder_template_project_path value: "<your-path-here>"
Where <your-path-here>
is the relative path to a uproject file from the downloaded packaged editorโs โWindowsโ directory.
After you have set the config fields, you can remove your projectโs .config/world_builder_config.py
file.
How to test it?
To test the changes, simply run a build of the m2-world-builder-project-ci
Buildkite pipeline (or a project-specific variant of the pipeline if appropriate).
JunoHighSociety plugin removed
Date of change: 17/10/2023
Affected Projects: All projects
Affected Features: Juno High Society content
Whatโs broken and why?
The JunoHighSociety plugin is a content only plugin thatโs been moved out of the m2unreal stream (and therefore wonโt be available in any world builder projects) and into an internal only project. This was done to trim up the amount of content thatโs available in the base Origin offering.
How to fix it?
Weโve communicated with all downstream projects already, and none have suggested a dependency on the removed content, however if you have JunoHighSociety referenced within your .uproject or .uplugin files, you should delete those entries.
If you find that you are referencing content that has now been deleted, reach out to @Michael Samiec and weโll sort through temporary asset replacements and redirectors.
How to test it?
Build, cook and run your project as normal, and check there are no warnings or errors referring to missing JunoHighSociety assets
CrowdAudioComponent loudspeaker API changes
Date of change: 18/10/2023, 19/10/2023
Affected Projects: All
Affected Features: Spatial Audio
Whatโs broken and why?
The API to enabling broadcast (loudspeaker) in the CrowdAudioComponent has changed slightly, and the BPMC_CrowdAudio blueprint along with it.
The primary change is that the way broadcast is enabled is with now alongside enabling voice, as an option to the enable voice functionality. Separately to enabling voice input, it is possible to override broadcasting to be on using the new Set Broadcast Enabled Override
callable on the CrowdAudioComponent, which will force broadcast to be enabled regardless of the broadcast boolean sent to the CrowdAudioComponent when enabling voice input.
There is a new Set Broadcast Channel
function on the CrowdAudio blueprint which sets the broadcast channel to broadcast to. This was previously done as part of the Start Loudspeaker Request
call, but has now been split out.
How to fix it?
Using the blueprint: If you require a specific broadcast channel, you must call Set Broadcast Channel
before enabling loudspeaker. If your functionality includes usage of Start Loudspeaker Request
this should work as before as of the second CL (224162).
Using the CrowdAudioComponent directly: The change is that you will have to pass the boolean indicating whether or not the voice should be broadcasted when enabling voice input, and any calls to enabling broadcast directly will now use the new function SetBroadcastChannelEnabledOverride
. Equivalent functionality to before can be achieved by always passing false to the voice input function and using the SetBroadcastChannelEnabledOverride
where previously SetBroadcastChannelEnabled
was used.
Signature of enable voice before:
void SetVoiceInputEnabled(bool bEnabled);
now:
void SetVoiceInputEnabled(bool bEnabled, bool bBroadcast);
How to test it?
Try out any blueprints which enable voice input and change loudspeaker settings, and see if they work as they did before.
Updating the flow for calling TransferObjects on User Collection Subsystem
Date of change: 20/10/2023
Affected Projects: All
Affected Features: User Collections
Whatโs broken and why?
We wanted to provide a means of adding server validation before TransferObjects is called on servers. This required a change in API on the M2_UserCollectionSubsystem. The M2M_UserCollectionComponent also provides functionality that allows for callbacks to be recieved on clients when the transfer request has been executed by M2Connect.
How to fix it?
You will have have to either: create a new derived M2M_UserCollectionComponent or continue to extend a M2M_UserCollectionComponent if you already have one associated with your project. You should then set UserCollectionsComponentClass on the JM_CharacterBase used in your project to this component class. Create a new server RPC function/custom event on your M2M_UserCollectionComponent. This function/custom event should contain the validation you want to do, then call M2M_UserCollectionComponent::TransferObject. Before calling your new function, you should call M2M_UserCollectionComponent::RegisterClientTransferRequest and ensure you pass the returned TransferRequestId into your server RPC function/custom event.
How to test it?
Make sure your transfer logic is functioning as expected.
New Features:
Unreal Game Client performance configuration options for players to fine tune their gaming experience.
Improved streaming errors with https://streaming.m2worlds.io/ now served from a NextJS app with improved styling.
Functionality added where MLB accounts now need to be associated with a TV License to access Affogato Event 3.
Improved the workflow when using devices in non-click-to-move projects, including support for having an approachability character which doesn't default to UI mode.
Interactables can implement BPI_InteractionPointOverride to specify where a character walks when they click an interactable.
Ability to upload audio files and preview in your indus collection.
Users can use the
Stat MML
console command to bring up UE5's built in profiling UI to gather information about MML objects.Static meshes are now used in m-model where possible.
Sync , and MML objects across different clients by using the start-time and pause-time attributes.
Improved services where Networking Security - Native PC Clients Release 1: Sensitive IPs will not be at risk & players shouldnโt easily crash the server.
Bug Fixes:
Fixed a defect that stopped text & voice moderation from functioning.
Fixes an exception thrown by the Millicast plugin.
Fixed an issue where the client had no audio output on GFN.
When chat starts hidden (only button enabled) clicking it will also activate the chat.
Known Issues:
Issue where bots stop moving, then spring to life when bot tests are run from 5k upwards to 18k.
"Morpheus.Bots.Run chat" does not function with the new chat.
Please provide feedback on the release notes or on the release process on this feedback form.
Last updated