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!
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.
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.
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.
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.
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.
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.
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.