1. Mortal Rite
  2. News
  3. Dev Log 7 - LEVEL TRANSITIONS

Dev Log 7 - LEVEL TRANSITIONS

Greetings Everyone!


As we say in the business, another day another dev log… anyways let’s jump right into it!

“Level transitions” refers to the unloading and loading of assets for a specific level. “Level Transition System” is what we are calling the system that replaces most of the previous systems and logic used to determine what gets loaded dynamically for a level. The “Level Transition System” lives in a component that is globally accessible called a Level Transition Component (LTC).

The LTC manages Data Layers that are part of Unreal Engine 5’s World Partition system. LTC allows level designers to set up configurations for each map that define the following Data Layers.

Each configuration contains:
  • Display Title: To tell the player what level this is.
  • Allowed Floor Minimum: Minimum floor this configuration can be played on, meaning the earliest into a run you would be allowed to play this level configuration.
  • Allowed Floor Maximum: Maximum floor this configuration can be played on, conversely meaning the latest into a run you would be allowed to play this level configuration.
  • Configured Player Starts: Specific spawn locations for this configuration.
  • Progress Player Starts: Specific spawn locations that the player can unlock in this configuration.
  • Layout: Data Layer for the Basic Level Layout.
  • Dynamic 1: Data Layer that provides level changes specifically needed to support 1-2 players.
  • Dynamic 3: Data Layer that provides level changes specifically needed to support 3-4 players.
  • Dynamic 5: Data Layer that provides level changes specifically needed to support 5 players.




[previewyoutube][/previewyoutube](Data layer transitions)

Above is a clip from a test level of the data layers transitioning between unloaded, loading and activated.
(BASE)

When a level is loaded, the LTC shows the loading screen and then it determines which configurations are valid for the level and the number of players. The LTC then uses a seeded stream to determine which configurations to load as needed. Once the configuration is chosen, the LTC replicates the needed information to any attached clients (for multiplayer) and waits for the clients to report that they have loaded the Data Layers needed for the chosen configuration. It’s necessary to know when all clients have loaded the configured data layers so that all clients can have their loading screen hidden at the same time.
(Living Trees)

LTC has other helper functions such as a function to load the next configuration and a function to reload the current configuration and Reload Current Configuration that are exposed to Blueprints.

(Dead Trees)

Below is a video showing the Nanite Lumen Test level in a very unfinished form. For this clip the NLT level was set up with 3 themes (Cloudy, Thunderstorm, and Dust Storm), and 3 level layers (blank, dead trees, and living trees). Using those layers the following configurations were made: Cloudy/Blank, Thunderstorm/Living Trees, and Dust Storm/Dead Trees. The clip shows Dawksin in a configuration that has a wall blocking him until he uses a trigger to cause LTC to load the next configuration. By the end of the short clip, Dawksin has gone through all 3 test configurations.

[previewyoutube][/previewyoutube]

The clip is kind of a quick test of the LTC using real assets and it might not look very impressive, but it has helped iron out a lot of bugs.

While we have the technology to load and unload data layers during gameplay, because loading and unloading assets takes time, all level transitions for Mortal Rite will happen during a loading screen when the players are traveling to a location. Once the level has loaded and the game is playable, there should be no level transitions until the players travel to a new level.

Dynamic changes to levels are handled outside of the LTC, but can be persisted via Progress Items, which are used to save progress within levels and throughout Mortal Rite.

Anyways see you in the next one!

~Round Toast Studios