Can't Upgrade Project when New Engine Version Released

I’ve noticed a workflow issue with UE4.

Here is my scenario:

  • using ShooterGame as basis for developing new FPS game

  • modifying PlayerPawn Blueprint for new game by creating new construction, event graphs, etc.

  • new version of UE4 released

  • download/install new version of UE4

  • when opening project in new UE4, told to convert project, click yes, etc.

  • project fails to compile every time, making it impossible to move development forward

  • attempted to manually recompile project with VS, get following error:

  • 1>------ Build started: Project: ShooterGame, Configuration: DebugGame_Editor x64 ------
    1> Parsing headers for ShooterGameEditor
    1>F:/UDK_Games/Shooter Game 4.2/Source/ShooterGame/Classes/Bots/BTTask_FindPickup.h(6): error : Superclass BTTask_BlackboardBase of class BTTask_FindPickup not found
    1>F:/UDK_Games/Shooter Game 4.2/Source/ShooterGame/Classes/Bots/BTTask_FindPointNearEnemy.h(6): error : Superclass BTTask_BlackboardBase of class BTTask_FindPointNearEnemy not found
    1>F:/UDK_Games/Shooter Game 4.2/Source/ShooterGame/Classes/Bots/ShooterAIController.h(5): error : Superclass AIController of class ShooterAIController not found
    1>Error : Failed to generate code for ShooterGameEditor - error code: 2
    1> UnrealHeaderTool failed for target ‘ShooterGameEditor’ (platform: Win64, module info: F:\UDK_Games\Shooter Game 4.2\Intermediate\Build\Win64\ShooterGameEditor\DebugGame\UnrealHeaderTool.manifest).
    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.MakeFile.Targets(38,5): error MSB3073: The command ““F:\Program Files\Unreal Engine\4.3\Engine\Build\BatchFiles\Build.bat” ShooterGameEditor Win64 DebugGame “F:\UDK_Games\Shooter Game 4.2\ShooterGame.uproject” -rocket” exited with code -1.
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

  • currently the only way to continue working with my project when a new engine version releases, is to download the new version of the ShooterGame sample, then I have to copy and paste all assets from the previous version backup

This can’t be right, it can’t be that in order to use a new engine version of UE4 with ShooterGame, you have to download the new project version (which has none of your work), then you have to copy/import everything to the new ShooterGame version. This happened to me when upgrading from 4.1 to 4.2, at which point I thought it was a one-off bug, but it has happened again now with 4.3.
Right now the only options are to either:
a) never upgrade engine version, continue using same engine version you start your game project on until your game is finished and ships (defeats purpose of subscription, downloading new updates, etc.)
b) upgrade engine version, download updated ShooterGame sample from Marketplace, go through and copy/paste/import all your assets, code changes, Blueprints, work, etc. into new project

Both options above are impractical and shouldn’t be the case.
The ideal solution would be to update engine version on release, and continue using same project. Right now the tools that “updates” the project to the latest version of Unreal does not work. Compiling manually in Visual Studio leads to compile errors.

Does anyone know a solution that can work here? For the time being, I am stuck on 4.2 and can’t use 4.3 because of this.

This is what I’m afraid of.

I’m now going full throttle on a game project I plan on going commercial with, it will be about a 1.5 year development cycle. UE4 is arguably the best engine I have ever used, whether in the studio or at home. This however is a HUGE problem; it’s a show stopper.
There has to be someway of making this work, someway of being able to compile ShooterGame successfully. The fact that Epic releases new versions of ShooterGame with new engine versions confirms that it can be made to work, are there release notes somewhere to see what code changes need to be made to the ShooterGame to get it to work? My thought process is that something was changed in respect to native Unreal classes; with code from ShooterGame updated to reflect these changes- if there were some release notes detailing the code changes, I could edit the header and source files that are spitting back these compile errors.
Can someone from Epic answer with some helpful info on how to compile ShooterGame from 4.2 to 4.3; and for all future versions for that matter? Thanks!

I was able to just edit the uproject file in Notepad++ and change the EngineAssociation to “4.3”, upgraded without a hitch. Should look something like below:

{
	"FileVersion": 3,
	"Version": 0,
	"VersionName": "0.0",
	"EngineAssociation": "4.3",
	"Modules": [
		{
			"Name": "MyProject",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		}
	],
	"EpicSampleNameHash": "0"
}

EDIT: I should clarify, my project is remarkably simple, with only the GameMode and Character classes overridden. YMMV on more complicated projects.

Any Epic guys that can comment on this?

Would vergenzs solution work, or are there issues that can arise from making that edit?

(Thanks for the tip vergenzs !)

Surely it can’t be that easy, can it? I mean, there’s a conversion process, or so the new engine versions claim. I would expect there be a bit more going on, but hey, if it works it works! :slight_smile:

Yeah, we’re just grumpy jaded developers who are in very similar situations. I’d absolutely love for this method to be proven true though.

That’s exactly what I was thinking. My instinct tells me this might seem to work at first, but further into development you will run into a major issue that will make you think “ah so that’s why you shouldn’t do that, I knew it seemed to simple…”
I could be wrong, and in fact I hope I am, but I’ve been working in game development for years, solutions are never that simple…most of the time haha

So I tried editing the project solution with the 4.3 edit, and doesn’t work. I expected that to happen since the problem appears to be the following:
I found that some of the code for ShooterGame has changed, and is relying on files that exist in 4.3, not 4.2.

One of the compile errors I received is:

1>F:/UDK_Games/Shooter Game 4.2/Source/ShooterGame/Classes/Bots/BTTask_FindPickup.h(6): error : Superclass BTTask_BlackboardBase of class BTTask_FindPickup not found

When I looked up that header file, comes with ShooterGame 4.3, there is a different include entry that references files located in a 4.3 engine folder called "“AIModule”. This directory doesn’t even exist in 4.2. This discrepancy is what I think makes it impossible to compile with 4.3. I’m not an engineer, so I can’t confirm, though I will dig around more tonight when I get home from work.

Can anyone from Epic comment please?

I spent some time trying to manually convert this. No idea if I did it properly, but I finally got it to compile. Things involved:

  • Get rid of DependsOn and add a #include instead
  • Replace all OVERRIDE with override. (There was one instance that didn’t need it so be careful ctrl+f replacing
  • Engine.h needs #include “Slate.h” added to it
  • The build ShooterGame.Build.cs needs AIModule added in PrivateDependencyModuleNames
  • #pragma once” was needed to be added somewhere. Forgot where. Compiler error will tell you.
  • GetMaxSpeedModifier() changed to GetMaxSpeed()
  • A ton of files need #include header files added to them. You just got to slowly sift through all the compile errors. Wherever it says something is undefined, just right click > Go to Definition on the thing in question and find the header file that contains that definition. Throw it up at the top and try again. Don’t worry about any of the IntelliSense errors. Those mostly drop out after you recompile after adding #include headers.
  • SChatWidget.cpp: the bool bFoundPath has some conversion error too. I changed it to this:

bool bFoundPath = FSlateApplication::Get().FindPathToWidget(ChatEditBox.ToSharedRef(), WidgetToFocusPath, LastVisibility);

Hi everyone,

Our goal with the sample projects is to provide you with a working example of what can be done with Unreal Engine 4, and to let you dig in and see how it is done. Every project you create in the Engine is likely to need some manual updates when the Engine is updated, and the same is true with the sample projects. The more complex the project is, the more manual updates will be needed to ensure the project conforms to the updated Engine.

How you update your sample projects to a new version of the Editor is up to you. If you have not made any changes, or your changes are few or minor, it may be easiest to simply download the newer version of the sample project available with the updated Engine version.

However, if you have made extensive changes to a sample project, or you are basing your own project on one of the sample projects, our recommendation is to switch your project to the new version of the Engine, then work your way through any build errors and/or warnings to clear them up. We do our best to detail all of the changes to the API in a new Engine version in the release notes for that version. The release notes combined with the error and/or warning messages should help you get everything cleared up, though this will be a much more time-consuming process with a complex sample project like Shooter Game. For version 4.3, the release notes can be found here. Search for the API Update Notes section, which is about the last 25% of the update notes (though it is definitely a good idea to read through the whole post).

Keep in mind that by upgrading your sample project, you will also be missing out on any changes that may have been made to that project specifically with the new version of the Engine. Shooter Game in particular had about half a dozen changes in 4.3 that you will not get by upgrading your project from 4.2.

The upgrade process will also become smoother in the future. At the moment we are still actively making changes and adding features to the Engine. As the Engine matures and stabilizes, significant changes to the API will become more infrequent.

Thanks Tim for chiming in, really appreciate it.

This is pretty sad news, as it makes it kind of impractical to use ShooterGame.

I work in the AAA games industry, and I’ve spent the past 4 weeks modifying the PlayerPawn BP after work and on weekends. I am committed to using UE4 to create my indie game.
I’m worried that I’ll make/edit Blueprints, and when a new version drops, it will be extremely difficult (in a worst case, not possible?) to move over all of my work.
Here’s a screen of the PlayerPawn after 4 weeks in my free time:

That’s the event graph, I have a ton of custom functions, and I’ve also added my own animations, so I have edited AnimMontages, AnimBlueprints, etc.
I plan on working on this game for the next 1.5+ years in my free time. I don’t want to get invested in it so far, and a year into development hit a wall because of an updating issue.
When I updated from 4.2 to 4.3, my project wouldn’t compile anymore. I had about 5-10% of the work you saw, so I scrapped my 4.2 ShooterGame, installed the new 4.3 version, and copy/pasted/recreated the work in 4.3.
I figured it was a hack solution (not left with any options), but now I’m thinking- “what happens when I have 25% of my entire game complete? 50%? 75%?”.
Copying/pasting/redoing work makes no sense to me; this would never be an option at a game studio.

Seems there are only two solutions here:

  1. upgrade, grab the latest Shooter Game, copy/paste/recreate tons of work over and over again, everytime a new engine version drops
  2. stick with one stable engine version for the complete duration of development, and never upgrade (defeats purpose of subscription model Epic has adopted)

What are your thoughts Tim? Any advice?
I love UE4, and personally think it’s the best engine ever produced.
I look forward to seeing you guys make some progress towards alleviating the pain of upgrading engine versions!

Personally I don’t understand why you didn’t create a new project, then base the project off of the examples by picking them apart. That’s what we did and we’re having no real issues converting upgrading out projects.

The issues I reported before were all due to UE4 wanting to use VS2013 while another developer was using VS2012, and it was just confusing things. Once we straightened that out, everything we’ve converted has worked just fine.

It’s just a lot faster and easier to take what’s there and start iterating on it, as opposed to reverse engineering and rebuilding it again.

Though the taught did cross my mind initially, maybe I will consider your suggestion moving forward.

Hi Jak,

I can understand your frustration. The major issue with upgrading projects to new Engine versions is that as the Engine code changes, it will often require corresponding changes to game projects. The underlying functionality will rarely change, but how you access that functionality may. For example, one of the major improvements that we made in 4.3 specifically was to significantly improve build times in Visual Studio. This improvement was partly achieved by removing a number of includes from the Engine.h file. Anyone who needs one or more of those includes for their game would have to add the ones they need back in when upgrading their project.

In my opinion, the biggest drawback to using Shooter Game, for example, as the basis for a project is that it provides a good foundation that is (relatively) complex and is intended to work with a specific Engine version. When a new Engine version becomes available and you want to upgrade, you may not be as familiar with the foundation you are building on as you would be if you had built that foundation yourself. The developers here who are working on Fortnite go through this process regularly as they receive updated versions of the Engine, but they are intimately familiar with every aspect of the game since they built it from the ground up.

As I mentioned before, the upgrade process is expected to become smoother in the future as the Engine matures. For the immediate future though, I would expect to still need to make changes to projects when upgrading to a new Engine version. If you do decide to hold off on upgrading your Engine version, keep in mind that if you decide to go ahead and upgrade a year from now, you will still need to make most, if not all, of the changes you would have made with each individual upgrade to the Engine.

Hi Tim,

I completely understand and agree with what you’re saying, in the back of my mind I kinda already new the answer to this, but was hoping there was a solution I missed that someone at Epic could point out.

The best solution is to create your own project from scratch, I know this from experience, but the ShooterGame is soooo good and has so much done, it’s enticing to want to just go in there and “mod” it into a game of your liking- especially a huge time saver for me, since I’m working on this on the side in my free time after work and weekends.

I personally don’t want to stop updating the engine; 4.3 had some awesome updates- and so many!
I’ll keep pushing forward and solve problems as they come.
You guys are doing a fantastic job and just killing it. Keep up the amazing work, you’re changing the industry and molding the future- I immediately knew that working with UE4 was the future since I first started using it over a year ago back when I worked for Spark Unlimited in Los Angeles. UE4 has only gotten better and better; it actually makes game development FUN again!
I only wish we used it at my current studio hahaha!

P.S.
I think as an interim solution, you guys should put out more detailed release notes for the more complex example projects that depend on so much C++ (ShooterGame being the best candidate). If you guys released more detailed info on what you had to change to make it compile with the new engine drop, on top of the bullet point list of updated features to the game, it would be great.
I think this could clear up a lot of confusion and make the upgrade process much easier and smoother for lots of people, including myself. I hope you’ll consider it!

Its absolutely shocking and unbelievable how many things break when porting from one version of the engine to another. Utterly amateurish in every way, i can’t believe serious development teams would put up with this garbage.

Have you ever tried to follow a tutorial from a version slightly different from the one you’re using? Stupidly difficult to find the correct new terminology or function for what you want to achieve.

No serious AAA team would put up with this.

BOTTOM LINE … TIME IS MONEY…