Inside Unreal: Adding Mod Support with the Simple UGC Plugin

WHAT
We’ve released a new sample project to help Unreal developers bring mod support to their games. Based on the work done for Robo Recall, the UGC Example Project and SimpleUGC plugin aim to make it easier than ever to bring your community into the creative process. Join us as Senior Technical Product Designer Chance Ivey walks through many aspects of the project and plugin, including how to build and test mods for the sample, and how you can use the technology in your own games.

WHEN
Thursday, July 23 @ 2:00PM ET - Countdown

WHERE
Twitch

WHO
Chance Ivey - Senior Technical Product Designer - @anonymous_user_c5ad40d01](https://twitter.com/iveytron)
Victor Brodin - Community Manager - @victor1erp](http://twitter.com/victor1erp)

RESOURCES
UGC Example - (GitHub login and EpicID association required)
New example project and plugin for mod support released - Blog

ARCHIVE
Adding Mod Support with the Simple UGC Plugin | Inside Unreal - YouTube

6 Likes

That looks very nice !! :slight_smile:

Awesome, looking forward to it.
I would like to suggest covering the following topics as well:

  • Mobile Platform

    • How to download/mount

      • HttpChunkInstaller still recommended?

        • Handling authentication per chunk if required

    • Handling different cooked platform asset formats e.g. ASTC, ETC2. Audio etc.

  • Swapping to other asset types like Animation, Materials, Sound

  • In a closed source project, what and how do we need to minimally provide to modders / content creators.

  • Current limitations. What can be modded, what cannot.

Thank you.

2 Likes

great project, I read through the source, and have a few questions / notes:

  • 1st of all, creating a new mod plugin by a button click is really handy for modders, thanks for that! using a pair of replacement components is also a nice idea. and ofc the editor widget is also like a xmas present. but seeing more comments in the source would be lovely.

  • imo it is a better approach to build the mod plugin (as a DLC) by AutomationTool.exe + command line arguments. it seems to be more simple than a source build. I’m experimenting with it currently, calling AutomationTool by CreateProc(), args can be got from the build log of a DLC, and replacing some parameters according to actual project is easy (engine path + project name + mod plugin name), and works fine. rarely certain maps are left out, but apparently newly created ones work.
    the command looks like this:
    <engine-root-dir>Engine/Binaries/DotNET/AutomationTool BuildCookRun -project=<project-path>.uproject -noP4 -clientconfig=Shipping -serverconfig=Shipping -nocompile -nocompileeditor -installed -ue4exe="<engine-root-dir>Engine\Binaries\Win64\UE4Editor-Cmd.exe" -utf8output -platform=Win64 -targetplatform=Win64 -ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=Disabled -cook -map= -unversionedcookedcontent -pak -dlcname=<mod-plugin-name> -DLCIncludeEngineContent -basedonreleaseversion=1.0 -stage -compressed
    then the resulting pak can be found easily, ready for renaming, copying to the installed game for quick testing, and uploading…

  • it would be nice to have a solution for displaying the output log while the mod plugin is being built, similarly to project launcher (in case of errors we could support modders more easily)

  • copying the mod pak files to the Content folder of the installed game is not always possible, imo the pak loader plugin available on marketplace is the correct way how pak files should be mounted, because it enables mounting paks from any location e.g. steam workshop folders. and steam workshop support is a must today.

  • I would love to see a live stream or a tutorial of up/downloading paks using SteamWorkshop and Mod.io too, and managing them in-game, especially maps. (other stuff can be)

1 Like

Hey all, looking forward to walking through the project tomorrow! Gonna tackle some of these that are more specific / things we can’t cover on stream -

I unfortunately am not the best to comment on the topic of upload / download for mobile, you might want to post anything question you’ve got in the mobile forums under the Development Discussion section.

I have intentions to add a few more in areas where things are less than clear as well as some extra logging where appropriate. Thanks for the reminder and kind words!

This is something we had in Robo Recall, but I think we had it as an editor setting and not a plugin setting. I will check with the Editor folks to see if there’s a way to enforce that via a command, but I am not sure there is at the moment.

That sounds like fun, we’ll keep it in mind when thinking about future content. Same goes for your question about WRT paks mounted from anywhere / Steam Workshop!

2 Likes

Hey Chance! Got a few quick questions from one of our community members here in Portland:

  • Will this plugin be updated/maintained moving forward?
  • Can it be used/integrated with the mod.io plugin?

Thanks! Congrats again on the release.

1 Like

sounds like an interesting stream!
good to see ya back on one of the streams @Ivey :cool:​​​​​​​

Hey, thanks for the streaming and the plugin! It’s awesome and I always wonder a lot of how games like Warcraft III or AoE creates an mod editor for the players.

I got really confuse about this:

Should I give the users the full project of the game to let them being able to create mods? Like a Github project so them can download it and having UE downloaded create a new mod?

Thanks!

2 Likes

That is the intent on my end. I hope to add some other functionality to it to make it more robust at some point. For now, it will remain scoped around Robo Recall’s capabilities (minus code mods) as we have a shipped game using the methods and a bigger example in it.

I can’t imagine why not, but I am not terribly familiar with their tech. I’ve had brief conversations with that team, so we’ll see I suppose!

Glad to see more mod support! This was a huge strength of UT and I badly want UGC to be easier for UE4/UE5 based games (my own especially)

1 Like

This could make my job tremendously easier for my own game as well. My work for my in-game editor has been drastically reduced thanks ot this plugin!

This is great!

I wonder what’s your plan regarding code modding - Is it possible to inherit from other class from the main game or use pre existing interfaces for exemple?

-Playcraft dev

1 Like

The protecting your assets when releasing an editor is still a bit vague to me. I’m looking into having people only create new maps or edit existing ones. And of course you’d want them to have access to the game’s art. Is there any way to protect your art and not be forced to include uncooked art files in your custom editor?

Would be great if the editor could somehow read your game pak and make the art assets and maps visible in your content browser as read only, and have the modders reference these assets when they make maps.

3 Likes

I am glad this exists! Going to make my game have modding support from the beginning. The only question I have however, is:

Will there be support for this in the launcher version of the engine?

Other than that, great job!

2 Likes

We answered that and more during the livestream, but the TLDR is that we currently aren’t able to due to how the packaging process works. That might change in the future though!

Definitely looking forward to the change, but for now, I’ll just migrate to a source build of UE4.

I also forgot that I had another question:

Will this be usable with mod.io in the future?

The livestream got me excited but I am mixed up about who does what. I think it goes like this:

Dev builds automation tool from ue4.25 source.
Dev uses UGC plugin to set up their game to be moddable.
Dev builds game executable and CoolGameEditor.exe and distributes to end users.
End users receive the CoolGame game executable as well as CoolGameEditor.
End Users run CoolGameEditor and it works just like Unreal Editor but somehow knows what can be eisted and what cannot. They put their own maps,models, etc into it and hook up the replacements.
End Users user CoolGameEditor to package the mod content they created using CoolGameEditor and then email the packages to their friends to put into their mod folder.
End Users run CoolGame and it loads the mod packages at runtime and applies them according to the way the Dev dictates via blueprints.

is that all correct?

Can we get this question answered? I couldn’t understand it from the live stream, it didn’t make an ounce of sense to me. The way it sounded, is that we had to give our players the whole game project so they could make mods. At that point it’s not really a mod right? They have the full game. I’m sure I’m understanding this wrong (really hope so), but I’m not too keen on providing a full game project to just anyone.

1 Like

I don’t think so. When you package a game, you normaly create a PAK file with your content. So you could give one just the Editor Build with the UGC Plugin (and the unrealbuildtool which is why I guess you need the source build at all, if I find time I will try to just put the UGC and buildtool to a regular 4.25 project). He/she/it launches the editor, creates the mod (which is a normal plugin with a little bit of wizard from the UGC), adds its own content into the plugin|mod content folder, puts in the information for which actors it replaces and or builds a new map, packages this up with the UGC (like you would manually with any plugin you create), this builds another PAK file which goes to the folder in the game.

So I guess the question for yourself is: what classes/interfaces/Blueprints/… does the modder need to extend/change your gameplay in a way it is supposed to be. Think about a shooter where you want the users to replace weapons. I would give them a base weapon mash for orientation/fbx export…, the blueprintInterface they need to implement with functions like getAmmo, getMaxAmmo, shoot, reload, getReloadSpeed … and this bp should be marked as it replaces the normal weapon in my game (which is marked as ok for being replaced). but you could also go into dataAssets or DataOnlyBlueprints or dataTables for just providing attribute input

maybe a good start is to look into roborecall which you should find in the launcher for the purpose of being modable without giving away the whole game.

quite unclear for me is a licensing question: I guess you are only allowed to distribute your editor build via the launcher (no glue how you get in touch with epic about that) or via a forked github unreal repo, because both implicits that the end user has acceppted epics eula.

2 Likes

You’ve have to provide actual content files (e.g. blueprints, cooked art assets etc), otherwise there’s nothing for modders to actually hook into and compile against in the editor.