v9.x

Legacy Skin Dependency

Date of change: 15/08/2025

Affected Features: UX Skins

What’s broken and why?

M2 has deprecated their skinning system which the ODK still has dependencies on. This dependency will be removed in a subsequent ODK release.

How to fix it?

When updating your existing ODK project, please add the following entry to DefaultM2Deprecated.ini

[/Script/JunoCoreUI.J_UISkinsSettings]
bEnableLegacySkinningSystem=True

Domain Check

Date of change: 15/08/2025

Affected Features: Deployment access

What’s broken and why?

Nothing is broken, however we now do a domain check when accessing your world within the web app to ensure that the world you are accessing is pointing to the same domain that you're accessing it from. This is essential to ensure correct functionality of the ODK. If you do access a world that is running on a different domain, you'll see this message. Simply select the "Redirect" button to be taken to the correct domain, and then enter your world.

Emotes Refactor

Date of change: 15/08/2025

Affected Features: Emotes

What’s broken and why?

The coop emote and standard emote flows have been unified to some degree. There may be more unification work in future. The BPC_ODK_EmotesComponent has become the morpheus actor component BPMC_ODK_EmotesComponent and now lives on the BPM_ODK_PlayerCharacterBase. Some functions have had an API update. Following this documentation should help with those change: https://docs.otherside.xyz/odk-documentation/documentation/odk-plugin/emotes

How to fix it?

You will now need to grab the component off the BPM_ODK_PlayerCharacterBase.

Updated allowed avatar collection list

Date of change: 13/08/2025

Affected Features: Avatar management

What’s broken and why?

To unify where allowed avatar collections are retrieved, we've moved the definition into the backend. This means that if you need to modify your avatar collections going forward (outside of Yuga's defaults) then you'll need to request an update to your project.

How to fix it?

Delete any overrides you have for your project.json to ODK.AvatarSelector.AllowListCollectionContractsArray , and if you need specific collections filtered for your project, please reach out within your nearest Yuga support channel.

Token ID management rework

Date of change: 12/08/2025

Affected Features: Token management

What’s broken and why?

To support token management across multiple chains (not just ape chain), we've introduced the concept of an "experience group" that defines what chain + contracts your world should be operating on. This information is provided on startup, and you're able to retrieve it via BP_ODK_WalletWorldService as you normally would (previously the information was hardcoded within live config). The one difference is that TokenIds themselves will need to be updated dependent on the chain you're operating on. That means that utilities like BP_GetTokenIDBase and BP_GetTokenIDFromLiveConfig have been updated to be able to provide two token ids (the correct ID will be automatically grabbed dependent on the chain you're operating on).

How to fix it?

For each instance of BP_GetTokenIDBase , be aware that you'll need to provide a curtis token id if/when you start operating on curtis. For each instance of BP_GetTokenIDLiveConfig , this object now expects an array of two numbers (instead of just a single number). Go through any definitions in live config, and update the schema to provide an array of two numbers. For instance:

"TokenIDLiveConfigName": {
	"type": "array",
	"items": {
		"type": "number"
	},
	"default": [1, 8],
	"description": "On apechain, the token is 1. On curtis, it is 8."
}

Project Live Config Location Update

Date of change: 12/08/2025

Affected Features: Live Config

What’s broken and why?

Previously the project.schema.json was versioned with project content, and both ODK and project values were added to this single file. This meant whenever you took an ODK update, projects needed to manually merge any new ODK config changes into their project.schema.json. We've now split the schema file and it'll be versioned with the ODK plugin itself. This means the project.schema.json file is available for exclusive use of the project, and you'll not need to do any manual merging going forward.

How to fix it?

Navigate to your project's project schema file (<ProjectDir>/Config/LiveConfig/Schemas/project.schema.json) and remove the "ODK" object blob from the file. If you've not added any of your own live config overrides to the project schema, you can remove the file entirely.

How to test it?

Start a PIE session in editor, and confirm that you see the green "schema generated successfully" toast appear.

New Bootflow Singleton

Date of change: 12/08/2025

Affected Features: Startup flow

What’s broken and why?

To help simplify the startup logic, we've added a new bootflow singleton that coordinates retriving dynamic world information, and providing it to server/clients as part of the bootflow process.

The singleton is called BPM_ODK_BootflowSingleton and currently provides two purposes, but will be extended in future to solidify the ODK bootup experience.

  1. Retrieve smart chain contract details and then replicate them out to users. This allows developers to easily switch between different chains + contracts. You can listen for this event in your internal logic by using the WaitForCondition node and waiting on ExperienceDataSet

  2. Retrieve allowed avatar contract list and apply before user avatar is applied. This ensures your clients adhere to the current avatar contract policy deploy by Yuga. You can listen for this event in your internal logic by using the WaitForCondition node and waiting on AllowedAvatarsRetrieved

How to fix it?

For any previously created levels, please add the BPM_ODK_BootflowSingleton to the AdditionalSingletons array within the World Settings. For any new levels the singleton will be added automatically.

How to test it?

Ensure your bootflow starts correctly, and you're able to apply your set avatar model.

Movement Mode Refactor

Date of change: 29/07/2025

Affected Features: Movement Modes

What’s broken and why?

As part of an effort to make movement modes more extendable and to simplify their structure, some breaking changes have been made. A new movement mode component (BPC_ODK_MovementComponent) has been added to the render target to help manage movement modes The main breaking changes are: - BPE_Y_MovementModes has been removed. Checking for a given movement mode can be done by either querying the new BPMC_ODK_AnimVarsComponent MovementMode if needed on non auth clients or BPC_ODK_MovementComponentBase::GetCurrentMovementModeId on auth clients. - BPMC_ODK_AnimVarsComponent has an updated event dispatcher: OnAnimationMovementModeUpdated. Ensure any code triggered when the anim vars component updates it's movement mode use this new event dispatcher are fixed up. - If you need to change to a movement mode, you can use BPC_ODK_MovementComponentBase::TrySetMovementMode. - You may need to change update some of your bindings to listening to the new event dispatcher: BPC_ODK_MovementComponentBase::OnMovementModeUpdated. - If you have custom movement modes, it may be worth converting them to use the new ODK movement mode system. Documentation can be found here: https://docs.otherside.xyz/odk-documentation/documentation/odk-plugin/movement-modes

How to test it?

Ensure your logic behaves as it did before these changes.

Improved Mixpanel Analytics to support other data types

Date of change: 17/07/2025

Affected Features: Mixpanel Analytics

What’s broken and why?

To allow support for more data types, in this case Int, Floats and Bools, we have added an enum to the event struct that allows you to tell the API which data type you wish to use.

How to fix it?

If you have existing mixpanel event structs being created (S_ODK_AnalyticsEventData), you'll need to open, recompile and save any BP that is creating them. They default to String type, so nothing else will change. However, you may want to take this opportunity to swap any Ints, Floats or Bools over. Just select the type you want from the Make Struct node, then hit the show more arrow at the bottom of the node to reveal the types. Here is an example of each type:

How to test it?

On you Mixpanel dashboard, you can view your events. If you select "Full JSON" view, you'll see that any event that has been swapped over will now be its correct type.

Removal of BPFL_ODK_WidgetHandler.

Date of change: 01/07/2025

Affected Features: UI Mode

What’s broken and why?

The API has been modified to more generic allowing generic uobject context to be used to request UI mode rather than widgets

How to fix it?

Simply use MarkContextNeedsUIMode and UnmarkContextNeedsUIMode instead of the old library helper fucntions.

How to test it?

Ensure UI mode works as you intended.

Last updated