Editor launch stuck at 72% due to a blueprint issue

Hey guys,

I’ve just been developing a training project further in order to try and fully round off the project for myself and the friends who have been kind enough to help playtest my version of the training project.

However recently I’ve run into an annoying snag that just doesn’t seem to want to stop ruining the project for me.

This bug is extremely irregular and no amount of debugging helps me find out how to stop it.
So what is the bug you ask?

The Problem:

When starting my project the project actually gets stuck loading at 72% and no longer consumes CPU as it has somehow got stuck.

No amount of manipulation prevents the issue entirely.
After 2 days of fighting with this bug trying to get it sorted I was left with no choice but to remove UASSET files one by one to find which one is tripping the system up.

After removing the file I can load my project and then place it back to load it in and finally fix up all the references in the blueprint to get my project loaded back to a state where I can work on it.

So to recap what I’ve said and to add what I’ve already tried.

What I’ve tried.
Action - Result
-Waiting to load - No effect after 3 hours
-Rebuilding visual studio files - No effect
-Reverting code files to previous state - No effect
-Recompiling C++ - No effect
-Attaching debugger as unreal loads - Minor Succes, Gave some debug info but not much
-Deleting all UASSET - Moderate Succes, Game opened, No content was there
-Reinstating all UASSET 1 a time - Massive Succes, Only one file couldn’t be added (BP_Tile)
-Swapping BP_Tile for older version - No effect, still blocked me loading unreal
-Rebuilding BP_Tile from the ground up- No effect, still blocked me loading unreal
-Deleting some modifications all around- Massive Succes, now loads unreal
(When the issue came back today)
-Deleted BP_Tile.UASSET - No effect
-Deleted InfiniteTerrainGameMode.UASSET - Massive Succes Now Loaded Unreal

My Deductions
The Issue has nothing to do with the C++ side of the project.
The Issue must have something to do with blueprint.
The Issue resurfaced after messing with InfiniteTerrainGameMode & BP_Character
The Issue also seems to prevent packaging.

Why I think it has something to do with InfiniteTerrainGameMode
After fixing the issue and confirming that it works fully I saved my data to source control.
My Project for the day was to revamp the scoring system so that your score is based on (KIlls&Gounds Captured)
This I managed to achieve only for the editor breaking issue to resurface.
The changes I’ve made were:
-Added two int variables → Grounds, Kills
-Added three new functions → GetGrounds (Basic Getter), GetKills (Basic Getter) & EnemyKilled (Basic Increment Operation based on TileConquered)

Why I think it has something to do with BP_Character
The first time this occured I had massive changes in BP_Character and as the issue developed I scaled back or blatantly removed new features on the character to try and fix the issue.

The Second time this issue started to occur I removed a cast to InfiniteTerrainGameMode (To Call the update function for kills) and after restarting the editor it launched just fine.
One of the edits I removed from before was trying to link BP_Tile with BP_Character as well as I was going to adjust character defaults to the local tile difficulty (A feature I removed entirely to try and fix the issue.)

So what now.
The reason I bring this up is that this could reoccur at any project I intend to build.
And I would not want to have to deal with this during a comerial project.

I have no idea why this is happening.
I need help with figuring out how to stop this happening and I’ve seen several threads on the official unreal forums with this bug as well that have been ignored and unresolved but I failed to find any resolved ones.

If anyone knows I am all ears.
I will dump a debug log below. Hope anyone can spot the trouble.

I know for a fact it is blueprint related as the problem is only in existence when I added this blueprint flow to my BP_Character:
Get Gamemode → Cast to InfiniteTerrainGameMode → Call Function EnemyKilled()
Without that, in my BP the whole project starts happily without the bug.

link: Data Directory with Image of bp & code dumps from startup

Looks like the problem here is casting the game mode to your custom game mode in a class that’s also referenced by your game mode! This causes a circular include, which during startup causes the game mode to load the character which causes the character to load the game mode which causes the game mode to… yeah.

So what you need to do is make a blueprint interface that your custom game mode implements and declare the functions you need to call from the game mode in the interface.

Since you need to call InfiniteTerrainGameMode->EnemyKilled() from BP_Character:

  • Add EnemyKilled function to your blueprint interface.
  • Call EnemyKilled (Message) directly off the GetGameMode node in BP_Character
  • Add an event in InfiniteTerrainGameMode for EnemyKilled via Interface
  • Have that event call InifiniteTerrainGameMode->EnemyKilled

This will stop the circular include infinite loop.

Hi dude, it seems both of use following udemy unreal c++ course, I get the same issue, its stop at 72% did you find out how to fix this?
i will thank full if you can help me too.

Hi there, it’s been a while since I made this post.
Once you get the issue there isn’t much you can do other than what I described.

  1. Save all your UASSETS
  2. Back them up to an alternative location
  3. Delete them (in your project folder) one by one to see which one is causing your issue
  4. Once it loads add all the good ones back in.
  5. Make sure you remake the CPP/Blueprint for the faulty code without a circular reference.

After doing that read Deiain’s answer about circular references.
The issue was caused by a cast for the game mode into a class that is also referenced by said game mode.

I find out the problem was where, it was from the .cpp game mode.
just remove or comment out DefaultPawnClass line in your constructor game mode.

{
	// set default pawn class to our Blueprinted character
	//static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/Dynamic/Character/Behavior/Character"));
	//DefaultPawnClass = PlayerPawnClassFinder.Class;

	// use our custom HUD class
	HUDClass = AS05_TestingGroundHUD::StaticClass();
}

I don’t know why its cause the problem, but for sure it will fix the problem.

Thx for replay,

I love you

It’d be really nice to see a fix put into UE4 to catch these circular issues in blueprints. I’ve had this happen twice now in the project I’m working on. Last time I knew exactly what I had changed and just deleted a blueprint I had changed recently and restored it from source control and then rebuilt it. But this time I haven’t touched the project in a week and was excited to make some progress on my project - but no, project is locked up on opening, so I guess I need to rollback and redo what I did a week ago - suck.

For me this issue seems to be between my HUD and my Player Controller blueprint. I add the HUD in my Player Controller, but in order to access player attributes such as health within the HUD I also need to access the Player Character. I thought the issue with due to health in the HUD, but I removed that function and I’m still getting a lockup. But that’s the Player Character, not the Controller - I made the mistake of thinking that was the circle, but it isn’t. The Character does access the Controller to get the HUD and add things to it

The most frustrating part of this issue is that it doesn’t exhibit or indicate an issue when compiling the blueprints, and the game works fine - but then when I restart the editor it locks up. I’m not even sure where the issue is now, as the only access within the main HUD widget was in the health, but the lockup still exists - so it must be in some sub-object.

The only solve for me seems to be to remove the HUD asset from the project directory to start the editor, then re-add it to the project and fix all the broken references manually, which is pain. It’d be nice if Epic added a check and indicator for this type of issue. Even something that detects the issue on startup and disables an asset so that you could start the editor with an error message with be a big improvement. I’m not sure if this is addressed in later versions, but I’m running 4.20.3 and you guys were having the same issue with 4.12

It seems that I’m adding the HUD incorrectly, I know other people add it in the game mode, but in the Testing Grounds project we started with it added in the PlayerController, so I’ve just continued that, but I’m expanding the project and now that’s causing issues. I’m not sure how to access the HUD asset correctly to add other UI elements without running the risk of these circular references. This is super frustrating and really makes me dislike blueprint even more.

Wow, so despite this having been working for like a month, the issue turned out to be the reference to InfiniteTerrainGameMode in my HUD. I don’t really understand it. The InfiniteTerrainGameMode does set a reference to BP_TestingGroundsHUD, which loads WBP_HUD_UI, which has the reference back to InfiniteTerrainGameMode to get the score, so that’s circular. But I have had no loading issue with that being the case for a really long time and have edited nothing related to that recently, and suddenly it became an issue. Also I removed the references from both BP_TestingGroundsHUD to WBP_HUD_UI and the reference from InfiniteTerrainGameMode to BP_TestingGroundsHUD, and even disconnected the call to Cast the game mode in GetScore and it still locked up. It wasn’t until I deleted the reference to the game mode entirely from the HUD that it fixed the issue. Such a pain. I wish I understood the HUD interface better - I think I need to do some cleanup and change the way connections are working, It appears that my WBP for my hud ui is getting included twice, once in the game mode through BP_TestingGroundsHUD and again in the BP_PlayerController, through fault of my own, but somehow this doesn’t create an issue as removing those connections didn’t fix this. Still much to learn and it seems some of the courses I’m using aren’t teaching the ‘right’ way to do this stuff.