Upgrading from SML 3.10.x to 3.11.x

SML3.11 brings support for Satisfactory 1.1, revamps the blueprint hooking system, and fixes some bugs. Mods compiled for SML3.10 are unlikely to work with SML3.11 due to changes to the base game headers and the blueprint hooking system.

Please read this entire page before you begin updating your mod. It will save you time later to have an idea going in of what to expect while updating. After you have finished reading this page, follow the directions on the Updating your Mod guide to install the updated engine, starter project, and update your mod.

New Features

This section talks about the new features that SML 3.11 brings to the table.

Blueprint Hooks as Assets

The Blueprint Hooking system has been completely rewritten to offer additional capabilities, eliminate the need for brittle hardcoded references, and improve the developer experience.

New capabilities include:

  • Ability to hook before/after/replacing statements

  • Intuitive hook graph editor interface

  • No C‍+‍+ code required to create a hook

  • Hooks implemented in the blueprint code can now alter function parameters and return values

  • No more hardcoded string references to function and class names

  • Editor-time checking of hook parameters and function signatures

To learn more about the new system, see the Blueprint Hooks page. To learn what you need to do to migrate your existing hooks to the new system, see the Blueprint Hooking Overhaul heading.

Actor Mixins

Actor Mixins are a special kind of Blueprint Hook that replace the SCS hooks system. They make adding custom components to actors much easier and more intuitive to work with in the editor.

See the Actor Mixins page for more information.

Launch Argument: DumpBlueprintPatchingResults

When the game is launched with the -DumpBlueprintPatchingResults argument, SML will dump the bytecode of all blueprint hooked functions to the log in a relatively human-readable format.

Read more about it on the Blueprint Hooks page.

Example Mod Improvements

ExampleMod has been enhanced with additional examples:

  • Persistent storage of per-player data in multiplayer

    • See ExampleMod_PerPlayerDataMixin and ExampleModPlayerDataComponent

  • Custom recipe-based production building

    • Requires no custom logic to function

    • Has 1 solid and 1 fluid input port, 3 solid output ports

    • See Build_ExampleRecipeBasedBuilding

Alpakit Mod Sorting

The Alpakit Dev and Alpakit Release windows now allow you to sort the displayed mods by Friendly Name or Mod Reference. Mods were previously always sorted by Mod Reference.

Alpakit Add C‍+‍+ Module

The Alpakit Edit Mod dialog now allows adding a C‍+‍+ module to an existing blueprint mod. To add the module, click the "Convert to C++ & Blueprint Mod" button in the bottom left of the dialog. Note that you must regenerate Visual Studio project files and build for Development Editor before it can be used in the Unreal Editor.

Alpakit Versioned Cooked Content

Alpakit now uses Unreal’s versioned cooked content feature, increasing the robustness of pak mods, potentially allowing them to survive engine updates without needing to be repackaged. We do not have a good way to test this behavior, so it may be tweaked further in the future.

Notable Fixes

Not Done Yet

The following features are not quite ready to use yet.

Advanced Game Settings values not saved

The Session Settings page explains how you can create your own Advanced Game Settings. However, their values are not currently saved with the save file. Session Settings still function correctly - their values are saved.

Content Bundle Cooking

The optimal way to add modded content to the game world (like ore nodes, deposits, etc.) is to use the Content Bundle system, but Unreal currently refuses to cook content bundles unless the world is also cooked. This is a known bug and will be fixed in a future SML release.

The next best way is to use sublevel spawning. ExampleMod uses sublevel spawning to spawn its example resource nodes - check the game world submodule. Here is an example from Kyrium of how to do that in C‍+‍+:

Required Changes

In addition to any specific-to-your-mod issues you may encounter, the changes described below must be made in order for your mod to be updated.

Dependency Updates

The following project dependencies have updated. Install the updated versions as you follow the Updating your Mod guide.

Engine Update

Satisfactory 1.1 is still on Unreal Engine 5.3.2, but Coffee Stain and Fishlabs have made some engine and engine plugin modifications in their work towards console support. Download and set up our custom release while following the Updating your Mod guide.

Since both the previous and updated engine version are 5.3.2-CSS, in order to have both editors installed, you will need to edit the old engine’s Register.bat to specify a different engine version (ex. 5.3.2-CSS-1.0) otherwise the 2 engine versions will share the same entry.

Opening projects under the old engine version will also require editing the .uproject file to specify the different engine version.

Wwise Update

CSS has also updated to a newer version of Wwise. The Dependencies page Wwise instructions lists the new Wwise version and guides you through integrating it into your project as you follow the Updating your Mod guide.

Generate Wwise Sound Banks

If you see the "GeneratedSoundBanks folder does not seem to be set. Would you like to open the settings window to set it?" message, use the Wwise editor to manually generate sound banks once, You should not need to do this again unless you create a new Wwise project or use Wwise systems in your mod.

Additional Changes

You might not be affected by these changes, but we’d like to draw extra attention to them.

CppStandard20

If one of your mods uses C‍+‍+ and you haven’t already added CppStandard = CppStandardVersion.Cpp20; to its Build.cs file, this update will likely require you to do so. See the Alpakit template in Mods\Alpakit\Templates\CPPAndBlueprintBlank for an example.

FChatMessageStruct Changes

The base-game FChatMessageStruct has changed in the following ways:

  • Now uses FText field MessageText instead of FString field Message.

  • Now uses field MessageSenderColor instead of CachedColor.

Blueprint Hooking Overhaul

C‍+‍+ Blueprint Function Hooking Removal

The previous FBlueprintHookManager system (FBlueprintHookManager::HookBlueprintFunction) has been replaced with the new Blueprint Hook system. The old system cannot coexist with the new system, so you must migrate as part of this update.

Because the C‍+‍+ side is unaware of the structure of assets defined on the blueprint side, C‍+‍+-implemented blueprint hooks were always in a messy and brittle state of requiring lots of reflection and hardcoded assumptions to work. The only way to mitigate this brittleness was to have the hook call a blueprint-implemented function.

The new system removes the middleman by having blueprint hooks defined and implemented on the asset side, giving them full knowledge of asset structure. It can also do matching instead of just specifying an instruction index, and can insert the hook before/after/replacing the existing statement.

Bind on BPFunction Node Removal

The Bind on BPFunction node offered by the old hooking system has been removed.

The old system was exceedingly limited in that you could never get function parameters or influence return values - you only had access to the object instance calling the function. The new system allows you to get the function parameters and modify the function behavior like was already possible with hooks implemented in C‍+‍+ in the old system.

Instead of a Bind on BPFunction node, move the event and hook definition to a Blueprint Hook asset. This process is covered in the Blueprint Hook Migration Guide.

Widget Blueprint Hooks: Inline Widget Template Removal

This feature was removed due to bugs in the editor causing the template configuration system to not appear under many circumstances. You may have not even known it existed as a result.

Instead of the inline template, make one-off widgets that contain the widget you wanted to customize, using that extra 'layer of widget' to set the template options.

Simple Construction Script Hook Removal

Simple Construction Script Hooks have been removed in favor of the new Actor Mixins system.

The data used to set up existing SCS hooks is still visible in the editor, but the SCS hooks themselves are not functional, and the creation of new SCS hooks is disabled.

For more info, see the SCS Hook Migration Guide.

Some devs have reported issues with Actor Mixins applying on level streamed actors. Please report any issues you encounter with Actor Mixins on the Discord.

Complete Changelog

The full list containing every changed file and asset can be viewed using GitHub’s Compare Changes feature: https://github.com/satisfactorymodding/SatisfactoryModLoader/compare/v3.11.0…​v3.10.0