UE4 Needs a more friendly Modding System

Hello.

So, I am currently working on a game, and we want the game to be modded by users. The game is Musical Range, a rhythm shooting game where you shoot along songs. The idea is that users can create their own custom songs, by simply creating a midi file in a outside program, and then sync that to a youtube video. The game would read the Youtube Video (Already done) and then simply play the midi to generate the track.

The problem I have is that the game is too good at protecting the game itself. First, I though that maybe the users only need to put the files in a project template, take the uassets, and place them inside the game folder where it is installed, and the game would find those assets. Wrong! Game won’t read anything that is not cooked and packed in. How to read uassets outside of packaged game? - Modding - Unreal Engine Forums

Then, a helpful community member made a function so that the game can read any pak files that you add to the packaged game inside content/pak. Functioning UE4 Modding Example Code - No Engine Customization Required - Modding - Unreal Engine Forums .Brilliant I thought. Got his code working, until I figured out that creating DLC Paks is so complicated.

The guide used to create the paks is back from UE4.9 A new, community-hosted Unreal Engine Wiki - Announcements - Unreal Engine Forums. Not only that it is based on the fact that you need a project to package first before you can create the DLC package. I thought of creating a template for mod that users just download and put their files in, so that can be helpful, but I have no idea if it will work as I can’t even get to pakage the DLC. It always throws errors and using unrealpak to check shows that the pak is empty. This DLC system is very outdated, and ugly workaround.
https://answers.unrealengine.com/questions/573960/dlc-support-still-not-working.html

Then, I though, well maybe I don’t need to do a DLC package, just put the content in and package the game like I normally would, but I end up with 60MB of engine content which I dont need, and those add up quickly. Maybe there is a way to remove those using UnrealPak, but the cpp documentation doesn’t offer a parameter for that on UnrealPak.

How can I expect a User to go to all this trouble, when its way more complicated than it should be? We just have to be working with workarounds everywhere, when all this could be much, much simpler from the get go.

All I need is the user to create 2 files in the editor. Lets say in Content/ModName, and then a way to tell the engine to just cook and pak the files in Content/ModName, because then I can just grab that ModName.pak with the AssetRegistry.bin, have the user place them in the games content/pak folder and then ModRegistry could mount those pak in.

Or even better, a way to directly read uassets placed in the game’s files even if they are not cooked and packaged in the original game.

In short, UE4 needs a more friendly modding system for Developers and Users, as User Generated Content becomes very valuable to a game’s lifetime and enjoyment.

Cheers

Your experience has been very similar to mine. I have some what given up on the idea for now. I figured it out and got something working, but the process is so complicated I could never expect a user to do it. The other big problem too is that you would need to distribute all your uncooked project files for anyone to make reasonable mods. Who wants to do that?!? Why can’t UE4 mount a cooked version of the project files that the user can then use to build mods without having direct access to all your blueprints and C++ code.

If you check out the modding section on the forum there is a sticky in place on this very subject.

It is a need being worked on but due to the dynamic requirements making a game that is modifiable under the UE4 engine seems to be a difficult possibility as to the need to force construction with in a controllable manner that does not do damage to the host game. As it is now it is possible to change the entire mechanics of a game making it unique and stand alone from the host.

What the current process seems to be is to first make your game then approach Epic to produce a version of the editor, as demonstrated by some of the games available in the launcher, that locks the dependencies to your game.

So yes you can make your game with modding in mind and once you get there Epic will do what they do so well in helping your game become successful as to your vision of what it should be.

I saw that thread many times before. That response from epic was 2 years ago, in fact, The last 2 posts refer to the ModSkeleton code, which I am already using, which is a help, but still not streamlined enough for the end user. And that thread has since been quite silent from Epic.

My game is super simple, it doesn’t require any extra functionality or scripting, just adding assets and have the game read them, but the way the engine is made hurts me out. Can’t just place uasssets and have the game read them. Or find a way to override that option.

Honestly, the ModSkeleton by Neonphog is a big help. The real part that is creating a lot of headaches is the packaging process. I just need a way to have either, to delete content from a already created pak, or have a unrealpak.exe option to only pack a selected folder in a project. Just that would make times a thousand times easier for the end user.

Edit. having epic create a separate build of the editor for each game out there is not feasible in the long run. There will be a lot of games that would be ignored just because they are quite niche. there must be some solution that covers devs from all ranges.

Hey y’all! Thanks for the feedback here. came back to do a new Robo Recall mod editor livestream not to far back, but I can see what you are saying as far as making the whole process simpler. I’ve featured this thread in a report and I’d love to keep getting more specifics as you come up with them.

Yeah, probably not feasible for us, but we can see where the struggle is here. If you do come up with some more scale-able solutions, please share them with us.

Honestly, I think the most important editor improvement would be to have a “cook” option from the plugins dialog (near the “package” and “edit” links). In my estimation, this option would provide target platform options (Win64, Mac, etc) similar to the top-level game package menu. If it is just cooking / pak-ing everything in the plugin content dir, it shouldn’t need a “release version” to compare against when picking contents, right?

I recently added a command-line build script to ModSkeleton (ModSkeleton/ue4build.js at master · smogworks/ModSkeleton · GitHub) that, at least for me, makes pak-ing mod plugins a bit easier, but it’d be nice if end-users didn’t have to make use of external tools.

Thanks for listening. Like I said, I propose 3 solutions to start with, which while requiring some work, would make the workflow for the end user much easier, which is what the end goal is.

Option 1.
I think a good option is to have an Option on the game, like a project settings, to set certain folders as read all. Like if I have a folder called “Content/UGC/Midi”, and I have a function that already returns a list of the assets inside of a folder path, then that function would find the items, even if the uassets placed there were not cooked or packaged in. So, by the user simply adding new uassets to a folder manually, they are modding the game with new content. In my game, the game would just read the new songs, no need to script anything.
Function to Find Assets in a Folder. (Only works with assets that were added in the editor) -> GetSongNamesInsideFolder - Pastebin.com
How to read uassets outside of packaged game? - Modding - Epic Developer Community Forums

Option 2.
Add in a Lite Package Option. So, we can create a basic template mod project to give to users. Where the user simply adds in his new assets. Then we can select what folder from the project is going to be pakaged. So, if I have inside “Content/UGC”, then I can just select Edit > Lite Package > Only pakage One Folder > UGC" or similar. So, in the end I have a pak with cooked assets but no engine content or anything not needed for the mod. This would work amazing with the work that Neonphog has made with his ModSkeleton code, which is easy to implement.

Option 3. Like Neonphog suggested. Have the Game be able to package individual plugins. So, a plugin is a Mod in this new context. This would be neat, as we can create a template mod project, and the same uproject would be able to hold multple plugins/mods, so the user doesn’t have to create hundreds of uprojects for every mod out there. This would be very well organized.

Option 4.
I don’t really like this one, because it requires an extra step outside of UE4 and thus makes it more complex. Another option is to add functionality to UnrealPak.exe to remove certain folders. For example something like [PathToUnrealPak.exe] “[Path to Pak]” -remove Engine". So that using the same basic mod project template, the user can package the game as we normally all would. But at the end, when it finishes packaging, the user would run a command line to simply remove the unneeded engine content, to decrease file size of mods.

Option 4 or 3 would be neat, as in theory the system could be expanded, so that if I want to release a map editor, then I create a template uproject mod with “Class Template” blueprints, and then the user creates his new level, adds in custom assets, places in the template blueprints, maybe even programs his own behavour for more fancy effects. Then justs paks in the level as well as the custom assets used. And then, the game would read the level and put in the actual full blueprints.

But honestly, just being able to choose what assets to pak would be a great boost in the right direction. I think.

Well from day one it has been the intention of our project design to included at the very least 3rd party contribution of environments, maps, and what we keep coming back to is the need for controlled distribution. Looking for ways and means we have been paying close attention to the development of Unreal Tournament as our needs are very similar.

Requirement number 1 Packaging.

Looking at a possible solution that can be scaled is to start first with packaging assets for the purpose of distribution as part of a two step process.

  1. Package the asset as being unique and standalone as being DLC compatible be it as meaning that all parts of the asset is packaged with no dependencies linked to the host game. The package can then be distributed either by 3rd party or as part of the asset pool of the game actual.
  2. A standardized function that would parse the package into the games environment that makes the asset visible to the game in the same manner as it would have been if the game and all assets as part of the game was cooked off in full.

For the most part the Unreal Tournament editor has a big fat “Share” button that clearly defines a pathway of extracting usable assets that I assume makes the package available in full with out redundancy to whatever game uses the Unreal 4 engine and sub system framework.

As a content creator I would feel that this would be a good start as the fundamental problem has never been how to make the art work but where the works have to go once completed and by packaging the working asset in full as to use would be one way to signal to others that the work has been completed.

A secondary benefit of packaging as to an Internet based project would be the decrease of project management, more so in the area of storage, that does not require the submission of all asset dependencies at the source level. A cooked map for example could be in the megabytes as compared to the gigabyte numbers we are currently experiencing as far as making maps available to the game as part of the complete package.

Requirement number 2 Copyright concerns.

Perhaps should be the number one concern but copyright protection is still an issue of controlled distribution as far as official assets or 3rd party contributions goes and it’s SOP that copyrights of all IP works belongs with the original creator.

From an official asset standpoint the protection of assets is built into the process as to the need for due diligence but due to the nature of 3rd party submission, even under creative commons licensing, there is no current means of protection to ensure that submitted works for the purpose of inclusion of “our” game is in place.

This goes to the fact that asset flipping or even the stealing of the game in it’s completed form has become not all to uncommon and as the developer of the game we do have a level of responsibility to protect “their” works as to their “intention” of only allowing their asset to be used as a contribution to our project and not shared with the rest of the world as works being released as being public domain.

A possible solution we have been considering is the use of private/public key encryption that binds the works to the host game that excludes the use of working assets with any other game sharing the same UE4 framework that makes it clear that such secondary use is not allow as to the required process necessary to break the encryption.

Epic being able to provided at least these two requirements as a first offering would be a first step of providing the means to package and protect working assets that meets the modding requirements half way and additional feature allowances scaled in based on the rules of private/public key encryption.

Could go on but risk writing a book on the subject. :smiley:

If we’re talking about true modding. And convenient modding, it would be also great to have “override” option.
Every modding-friendly engine allows to override single original asset/script with single modded asset. This is way is very easy to alter game’s behaviour in modder’s favor. Or simply change icon, texture or sound. Of course I mean cooked version of file. Without any packages, plugins, etc. Such overrides are always important part of modding. Of course it could require more work from engine team.

Well, just throwing out suggestion. Because every modding improvement would be much appreaciated. And probably one more reason for many devs to choose UE4 over Unity :wink:

It is possible to package a build without using pak, so the final build would be similar to your uproject build, where its just a bunch of uassets. I didn’t try to replace them with other uassets that aren’t cooked. like straight form another project. No idea if that would work. It would be neat that it works, but I think it will not work, as it would be a non cooked uasset and the game would recognize it. Would be worth a try though.

If this does work, it wouldn’t help my game much, as I would have to add 100’s of empty songs for modders to replace them. But for replacing guns, sounds, texture, it would be neat.

Yep, you need different solutions for original content :wink:

Well, maybe solution described by you could work. But still the perfect solution for gamers is to not overwrite original files. What if you want to disable this mod? You’d need to:
A) If you downloaded game from Steam - you can remove a file and use “Verify integrity” option but it takes time, it’s annoying to wait. And of course that works only for Steam users :wink:
B) Have a backup - sometimes modding tools can help with that.

Still solutions above wouldn’t be the best if few mods are overriding the same original file. So when you’re testing mods, you disabling mod A, enabling mod B. But later you decide do disable mod B and enable mod A :wink:
It’s common practice - at least for complex games like RPG ones. Hardcore gamers sometimes love to stack lot of mods.
Fallout 4 example

I started my career by modding RPGs and difficult to find better examples/references for modding. It’s enough to research Bethesda’s games, Torchlight games.
Or simply any game popular on Nexus Mods - it’s simply means there many mods - and that’s means engine/game is well prepared for modding :slight_smile:

So many ideas… of course has different ideas that are specific to their game project. It will be up to Epic to find a way to give modders access to the host game content in a protected way. Both to protect copyright and intellectual property and to give the modder something to work with and cook/package against. Here’s my idea on a way to do it.

Have an option for the developer to package a mod kit. This essentially “half-cooks” and packages the game content (assets, blueprints, source, etc…). The modder then installs UE4 and loads this “mod kit” (like a plugin for example), which exposes all of the assets, blueprints and such from the host game, but in a protected fashion. i.e. They can’t export/migrate out the models or edit the original blueprints for example. What they can do is add their own assets in, create their own blueprints, derive blueprints from existing game classes, use existing game assets, etc… Finally, the modder hits a package button and UE4 produces a pak file of their content only (like how the DLC system works, since it will have the original content to compare against). They can drop this pak file into the game’s Paks folder and the game can read it and add its contents to the asset registry, which we can already do with neonphog’s code (which could be built into UE4).

Hey all, I wanted to let you all know that I’ve dropped an update over on the thread linked above. We’ve made some progress but still have room to grow. Thanks for all the feedback and ideas here :slight_smile: WE’re glad you’re all as passionate about modding as we are.

I just read that out and replied. Came here suspecting you would have replied! I’ve had lots of progress with my game so the modding scene is looking very positive. Thanks for the update.

Any updates? I really want to add mod support to my game so people can change everything about the game, like even adding in new units or changing stats.

The process for supporting mods is still the same as before I believe.

Either you create your own in-game tools for creating new content, or you speak to Epic about hosting your games’ mod kit on their launcher (head to the modding tab to see what I mean - most users have modified the engine etc. so users can more easily create mods. Robo Recall includes the source so you can see how this could be done).

There are ways to support mods without doing this, like using some kind of external data storage and have your game parse game configuration from those files (like JSON etc.) - but that’s up to you to include. The bottom line is that you cannot distribute the editor and/or it’s source to your steam users, so you have to either talk to Epic or add some kind of custom external file support to your game.

try telling Unreal not to use a ‘pak’ file: (Edit/Project Settings/Packaging/No Pak File)

Greetings, is it still the same? I mean, UGC was released, and it is cool but how should I allow my game/app users to build their own content without giving them the whole project? I want to give a user the cooked game and allow to add mods using UE4Editor somehow.

I’m also interested in this - we tried Simple UGC plugin, created our own version - everything works like a charm… if we have all the source code… But how do we give the ability to build mods to our users?

You have to give them entire project with all the assets, including code and BPs.

With UE4 it’s easier to deal with users making models, anims, textures than levels and code-based mods.