UE5 mod manager

At the moment I am working on a UE5 mod manager framework for a 100% mod-based space opera. (non-profit)

The UGC plugin for UE4 was great but i can’t find a mod solution for UE5 so far.

I would be grateful for a hint or links to forums or C++ source code about that specific topic.

2 Likes

Hey! I am sorry, but there aren’t many solutions or resources regarding modding. It’s very sad and I wish we had more. I am not sure either, but I am hoping that with UEFN, Unreal will create mod support tools for individual games.

You can either implement a modding solution framework which I have seen one time a few months ago. It basically allows you to extend some functionality into modding. The more likely solution is that you create your own system.

I would have a look at how people added or created mods for Hogwarts Legacy. They didn’t really have any modding tools, but people have been able to create mods for that game still. With the information on how they create mods, it’s perhaps easier to know how you can alleviate the mod creation.

Please let me know if you find something interesting! :slight_smile:

1 Like

Ark: Survival Evolved, Satisfactory and Remnant 2 working on UE5 mod support.
If I find useful information there, I will post it here.

Someone has been working on a port, you can look into it
https://github.com/TheHellcat/UE5-SimpleUGC/tree/main

1 Like

It seems that FICSIT is making progess with UE5 modding.
I’m not sure at this point if they just “hack” the baked UE5 archives or found an editor-only plugin solution.

For inspirational purposes:

(UGC UE4 overview starts at 9:00)

Tracker:

I’ve probably found a trajectory to a plugin-only UE5 mod manager framework.

The Procedural Content Generation Framework (PCG) plugin seems to have all the necessary API for modding. I just need to add I/O functions and some kind of mod registry.

If I come to any results, I will publish them here.
However still, any help or advice would be appreciated.

Easy PCG tutorial:

UE Plugin specs (entry point for mod scan / database):

Are these two plugins worth buying?
I still dream of a ready to go solution. Modding, UGC, plugins, DLC paks… it is a rabbithole and eats up life time like crazy. :slight_smile:

Free code:

The main thing about UGC is that it provides custom editor folders where assets have a custom virtual path (eg. /Mod1/SomeBlueprint.uasset), which you can then cook individually.

The rest is essentially standard UE behavior. Engine loads all paks it finds (in various paths) by default, and it loads their contents into asset registry. Then you can use standard AssetRegistry search methods to find and load assets dynamically. There’s no plugin required to do any of this.

So I would say the PakCreator plugin looks interesting, but the Primer posted above seems to imply that packaging plugin contents into their own pak, with their own virtual path, is already the standard behavior. So if that works I don’t really get the point of that plugin. I’m not familiar with plugin content paks but it’s probably worth exploring that direction.

1 Like

Thank you @Chatouille for opening my eyes.

Funnily enough, I was looking for runtime asset management source code, but Unreal is already the ultimate mod manager itself. :nerd_face:

You just need to mount pak files and your assets will be immediatly accessible.

Discussion:

That’s the design i would recommand at this point of my knowledge.

a) If you just want to build a game with building blocks provided by independent mods, you don’t need GameShared.

b) If you want to use original game assets inside mods, you need GameShared.

c) If you also want to modify the original game assets, you have to define your own inherited classes to switch between original and mod assets. (see UGC).

(Probably a mod language like lua would be a good idea too.)

While that is certainly an option, there is also a simpler less heavy method.

In the virtual filesystem, PAK files are kind of like zip archives that you extract one after another into a content directory.
If two archives contain a file with the same name/path, the second will overwrite the first. That’s where PakOrder comes into play.

For example, main game wants to use texture at /Game/Textures/Logo. That virtual path maps to ProjectName/Content/Textures/Logo.
Main game pak naturally contains the original asset at ProjectName/Content/Textures/Logo.uasset
Now you add a mod pak which contains a different texture, but also at ProjectName/Content/Textures/Logo.uasset

If you give mod pak higher priority, the asset will be loaded from mod pak, while original one will be completely shadowed. That’s one way to seamlessly replace original assets without any work or overhead.


Alternatively, offering a scripting solution (such as Lua) can provide modders with all the tools to replace assets ingame (and much more). By giving them access to the full BP virtual machine, you grant them ability to iterate actors, components, read/write properties, and call functions (such as SetMesh or SetMaterial). Essentially anything Blueprints can do.

2 Likes

Luckily, thanks to @Chatouille expertise, we can cancel the class wrapping.

A mod manager ui seems to be enough:

  • scan paks
  • enable/disable paks (mount/unmount)
  • set pak loading order
  • save/load config

and optional for debugging

  • deep pak inspection (list of included assets)
  • asset search funktion
  • detect assets that appear multiple times

→ class FPakPlatformFile : public IPlatformFile

What should i put in GameShared?

  • Basically any asset that a modder could use: building blocks, materials, props… and most importantly, your mannequin. In this way, level modder could easily add StartPlayer to their world and test it with all the gameplay mechanics that the original player character offers.

What should i put in Game?

  • For example security measures against broken mods (max xp, falling through floor…)
  • Multiplayer mechanics
  • Mod Manager
  • And any 3D marketplace assets you purchased because it would probably be illegal to make them available to the public

Persistent Data:

  • The Game instance is the only safe place to store persistent data (save / load).
  • Add forward functions to GameShared like AddQuest, UpdateQuest, AddProp, AddBuildingBlock, AddWeapon, AddVehicle, AddItem, AddNPC, AddLevelToMap…

Map:

  • Organize you game world (map) into POI (point of interest) chunks. This allows the modders to add unlimited new levels (landscaps, cities, planets…) and expand the game world.

  • Quest progress should be saved (AddQuest, UpdateQuest) so that the player can easily switch between levels and continue their quests at a later time.

  • Maybe some modder just want to add an Item. Implement a function AddItem and all the traders in the world will offer this new Item in their shops.

1 Like

UE5MMExample:

I expect to upload a ready-to-use Unreal Engine 5 Mod Manager example project by the end of this year.
(UE version 5.3.1)

Version 1 will implement:

  • pak code
  • mod manager ui
  • mod manager config save/load
  • Example loading mod actor
  • Example loading mod level
  • Example loading original player character into mod level

Version 2 planning:

  • add databases for items, quests, building blocks, weapons, vehicles…
  • POI world map

Version 3 ideas:

  • Unreal Editor plugin
  • Async pak loading and Cut-Scene when moving from one level to another
  • LUA support

This is intended as a long-term project and I will expand the functionality as my free time allows. And hopefully this will spare other developers the headaches surrounding unreal and modding. And hundreds of hours of research too. :wink:

1 Like