# Morpheus Platform Release v30

See [this guide](https://docs.msquared.io/creation/unreal-development/tutorials/upgrade-the-editor) on how to update your existing project to a new editor release.

***

**Version Released:**

### Morpheus Platform Release v30

05/11/2024

Latest Binary Version `30.0.0`

{% hint style="info" %}
Please note v30 removes support for any build on v25.0.0 on Pixel Streaming.
{% endhint %}

{% tabs %}
{% tab title="Highlights" %}
**Support for multiple unique video streams with Millicast**

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

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

**Support for microphone on Mac**

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

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

**Improved Mac performance**

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

{% tab title="Breaking Changes" %}
**Removed `JLR_Plugin_NoFPDependencies`**

**Affected Features:** Linting

**What’s broken and why?**

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

**How to fix it?**

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

**How to test it?**

If your preflights run fine, all is well!

***

**Health in HealthComponent no longer replicated in background**

**Affected Features:** Health Component

**What’s broken and why?**

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

**How to fix it?**

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

**How to test it?**

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

***

**Improved Raycastable Crowd Prioritization**

**Affected Features:** Shooting

**What’s broken and why?**

Raycastable Crowd prioritization is now more configurable from Blueprints.

**How to fix it?**

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

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

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

Refer to [Enabling Raytracing for Crowd Members](https://docs.msquared.io/creation/unreal-development/features-and-tutorials/action-gameplay/enabling-raytracing-for-crowd-members#integration-4) for more guidance.

**How to test it?**

1. Start a PIE session with bots/other players.
2. Force everyone into LOD1 so they will be using RaycastableCrowd
3. Shoot at other players and verify they are still receiving damage/interacting.

***

**Removed JM\_ModularCharacterComponent and AddedCrowdStaticMeshesOverride**

**Affected Features:** Avatars

**What’s broken and why?**

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

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

**How to fix it?**

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

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

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

**How to test it?**

Blueprints will compile and avatars will behave the same as before.
{% endtab %}
{% endtabs %}
