Download

Functioning UE4 Modding Example Code - No Engine Customization Required

Hi All,

I put together the above example after a week of pretty painful trial and error. It’s by no means perfect, but it at least works!

I’d love some feedback and help making it better going forward.

I think at this point, I’ve read everything on the internet that has the words “Unreal” and “Mod” in it, but one of the most helpful was https://forums.unrealengine.com/showthread.php?136048-Loading-Assets-at-Runtime

I thought I’d give your code a try, but can’t get past step 8 in your instructions to get started. You say to; Execute the “ModSkeletonExamplePluginA” launch profile for you platform, however I don’t see a ModSkeletonExamplePluginA launch profile. I’ve enabled the mod plugin as indicated. The only thing I have in the Project Launcher is the ModSkeleton project in the dropdown to the top left. There are no custom launch profiles and if I try to create one, there is no options for the mod plugin. So I’m at a loss. I’m probably missing something simple.

D’oh! Are you on a Mac? I have only tested with Windows so far. I’ll see if I can get the macOs launch profiles uploaded today.

In the mean time, I followed https://wiki.unrealengine.com/Modding:_Adding_mod-support_to_your_Unreal_Engine_4_project verbatim for creating them. Just be sure the “Name of the dlc to build.” is “ModSkeletonExamplePluginA” in the second profile.

So, I got it working on macOS… turned out I had broken some BP struct make nodes with a code change at some point…

ALAS! It turns out custom launcher profiles are not stored in the project folder, and so, are not included in source control. Does anyone know how to share launcher profiles??

Ah no, I’m not on a Mac. Just on good ol’ Windows 10. I did look at Tom’s out-dated write up too, but I’m not seeing anything like that in the Project Launcher. There is no custom profiles and no mention at all of ModSkeletonExamplePluginA anywhere.

This probably has something to do with why I can’t see the custom launch profiles. I’ve never used the project launcher before, so I have no idea how to share launch profiles. Perhaps you should open a question on answer hub about it?

OK, so I just did a bit of research into this and it seems like 4.14 is installed in the Program Files (x86) folder while 4.15 is installed in the Program Files folder. I’m not sure if this is the case for everyone, but it is on my system, so I’m guessing UE changed from 32 bit to 64 bit between 4.14 and 4.15. Anyway, this recent answer hub question shows the actual path to the custom launch profiles. I created a test launch profile and sure enough, it appeared in said folder. This is where I found it.

C:\Program Files\Epic Games\UE_4.15\Engine\Programs\UnrealFrontend\Profiles\TEST PROFILE_BF616F4F4B56CD1964B2C0A9C039EC4F.ulp2

So I’m guessing you will have some launch profiles in the same location on your system. Perhaps it will be a manual step then to upload them to source control and then others will just have to copy and paste them to the correct location as indicated in the answer hub post.

Hey, can you give a run down of how your mod system works? I am trying to get the game to just simply read uassets that are added by users later on a specific folder. Like, expanding the list of available songs in my game, and the game just reads and plays those.

Would your mod system be of use to my case?

Many apologies! I’ll post up-to-date instructions for creating the profiles. They can also then have specific instructions for this project.

Thanks for looking in to that! It seems like a bit of an engine failing to require users to muck with system directories (potentially affecting ALL their Unreal projects) to share custom profiles. Let me see how writing up the instructions for manually creating them goes. Perhaps it will be trivial enough to just stick with that.

Yes, I think it might : ) I’ll post a more detailed answer on your thread.

Huge thanks! Will check it out and try to comprehend it. I hope I am proficient enough. Would you mind trading emails just in case?

Absolutely! Though I’m not sure I understand this forum system. Is there a way to send a PM? I sent you a friend request…

I just accepted you and PM’d my email, Steam and Skype (Skype info is on the side)

This only works for 4.15? I am running 4.14 and it failed to open the UProject.

Great, can’t wait. I had a go at creating a custom profile myself but got totally lost in the options. I can’t believe project specific profiles are not stored with the project, so it would seem when you upgrade your project to a new UE version, you lose custom profiles across all your projects then. Crazy! Perhaps this should be featured requested to Epic?

I believe so. The readme on the GitHub project states it targets 4.15, so you might need to look into upgrading your project first.

Ok, I published instructions with screenshots for creating the custom launcher profiles: ModSkeleton/build_profiles.md at master · smogworks/ModSkeleton · GitHub

They are linked to in the main README.md instructions on the repo. Let me know if anything can be clarified!

I tried it again and got stuck with building the mod plugin. When I ran the custom launch profile for it, it would fail at the “Cook content for Win64” stage. It threw a few errors in red about the plugin content having a deprecated inappropriate outer something or rather… I can’t remember the exact error now. Anyway, I went through each of the 4 content items in the plugin and hit compile/save on each one. Then tried building again and the cooking passed. It did fail at packaging though, but that was to be expected. Just wanted to note this for anyone else that runs into the issue.

I followed the rest of the instructions and everything seemed to work.

Boy I hope Epic sees this and improves the pipeline though as it is pretty fiddly at the moment. Now I need to dig my head into the code and figure out how it works.

I am wondering one thing however. My main interest for this is to allow end users to be able to create content, even custom blueprints and stuff and be able to load it into my game as a mod. I’m wondering what an end user would need from me in order to create a mod for my game. Obviously they need UE4, which they can get by creating their own account and downloading it. But what else would they need specifically from my game to create a mod. I’ve read a few other threads and some people seem to indicate that you need to provide all your project files, content, assets, etc… that seems a bit crazy.

Specifically I’m thinking of a scenario where the end user creates a new blueprint with a few of their own assets as a mod. In order for their blueprint to be recognised by my game, it would need to derive from a specific class that my game understands, i.e. AWeapon class for example. How would I expose that class to UE4 for the end user to be able to derive their own blueprints from it without having to provide all my project files, code, raw assets, etc… Do you have any ideas from your own research on this?

Hey, I am also super frustrated with this issue. It seems to be a bug with the engine, rather than us doing something wrong.
https://answers.unrealengine.com/questions/573960/dlc-support-still-not-working.html

This is super frustrating, Epic needs to offer better DLC and modding support. I can’t imagine a user doing all this work to mod my game.

It is for this issue that I created the BPVariant class and the Hook Connect/Invoke system. Theoretically, depending on how you set up your game hooks (and document them so end users can implement them), someone could create a DLC pak complete with C++ and Blueprint logic with a checkout of the ModSkeleton repo without having access to any of your game source code.

This, however, would require a fairly extreme departure from the common ue4 development practices. I imagine a far more likely implementation would involve a developer creating a base repo (based on ModSkeleton) that would include all the base classes for game mechanics that are intended to be mod-able (like your AWeapon class). Any game logic or assets you do not want to distribute could be in a core mod, the source of which you keep internal.

This would require the end user to download the developers repo, which would probably require them to compile it too right? I’m hoping to find a solution that doesn’t involve code for the end user. i.e. the end user downloads UE4, adds a plugin to mod your game and away they go creating blueprints and such. Do you think it would be possible to bundle up the core classes of a game into a plugin of sorts and then distribute the binary plugin?

I haven’t tried modding with any of the pre-built mod games, like Ark or Robo Recall… but in my imagination, what you are suggesting is how those work… Because they are distributing customized Editors, those bundles can include prebuilt dlls for the core classes. Seems like it should be possible, but I don’t know how to go about it.