Skip to main content

Case study: migrating Epic's Action RPG (4.27 to 5.8)

Action RPG is Epic's free C++ sample game built on the Gameplay Ability System. It is a good test: C++ modules, Gameplay Abilities, many Cascade effects, mobile settings and a loading screen module. This page follows a complete unattended migration from 4.27 to 5.8 with UEAPM and shows the real numbers from its report.

1. Get the sample​

  1. In the Epic Games Launcher, open Unreal Engine > Samples and download Action RPG for engine 4.27.
  2. Create a project from it (for example ActionRPGSampleUE427).
  3. Make a copy of the project folder. Leave out Binaries, Intermediate, Saved and DerivedDataCache. All the following steps work on the copy.

2. File steps from a 5.8 project​

The project cannot open in 5.8 yet: its C++ does not compile. Run the project and cpp steps from any 5.8 project that has UEAPM, pointed at the copy:

powershell -File Tools\migrate_headless.ps1 -Project D:\Host\UeapmHost.uproject `
-Target D:\Work\ActionRPG58\ActionRPGSampleUE427.uproject -Steps project,cpp

Result of this pass (Saved/UEAPM/History/ keeps it):

StepChangesOpen items
project301 (Manual)
cpp80
  • Project: engine association 4.27 to 5.8; WindowsNoEditor / MacNoEditor renamed; 11 plugin entries removed (PhysX-, VR-, Magic Leap- and LPV-related plugins among others); 13 Android and iOS settings updated for 5.8; 3 packaging denylist keys renamed (IniKeyBlacklist to IniKeyDenylist and the same for the section and its own self-reference). One Manual item: the sample enabled the removed SlateRemote plugin but does not use it, so there is nothing to do.
  • C++: 46 source files scanned, 7 fixes plus regenerated project files:
    • build settings V2 to V7 with the 5.8 include order, in both targets;
    • an AbilitySystemLog.h include added;
    • two ability-task checks updated for the component's weak pointer;
    • an EventData.Target access updated for object pointers;
    • GetReferencerName added to the loading screen's FGCObject.

3. Build​

Run the build command printed in the report's C++ Notes:

& "C:\Program Files\Epic Games\UE_5.8\Engine\Build\BatchFiles\Build.bat" ActionRPGEditor Win64 Development `
-Project="D:\Work\ActionRPG58\ActionRPGSampleUE427.uproject" -WaitMutex

The project builds on 5.8 with no further source changes.

4. Install UEAPM into the project​

Copy the plugin to ActionRPGSampleUE427/Plugins/UnrealEngineAbsoluteProjectMigrator/ and build again.

5. Run the migration​

Open the project and run the default steps from Window > Absolute Project Migrator, or unattended:

powershell -File Tools\migrate_headless.ps1 -Project D:\Work\ActionRPG58\ActionRPGSampleUE427.uproject -Editor

Summary table of this run:

StepStatusChangesLeft (error/manual)WarningsTime (s)
Project and configran0000.2
Assets resaveran8730015.2
Enhanced Input (opt-in)not selected0000.0
Cascade to Niagararan7501161.4
C++ sourceran1005.5
Rendering and mobileran6000.1
Physics (PhysX to Chaos)ran10000.0
Blueprintsran0107.2

Note the execution order: Blueprints now runs last, after physics, so any Blueprint that only compiles once its dependencies have been converted gets a fair shot.

In numbers:

  • 873 packages resaved in the 5.8 format, no load errors.
  • 26 Cascade systems converted to Niagara, and 49 references replaced: 33 anim notifies, 9 emitters placed in maps, 4 Blueprint components and 3 spawn nodes.
  • 11 warnings for references it could not replace (9 custom Trail notifies, 1 SpawnEmitterAttached call on BP_WeaponSpider, 1 Level Sequence). They keep playing Cascade, which still works in 5.8.
  • 1 C++ change: the project files are regenerated once more after the asset and Cascade steps touch the source tree.
  • 16 config changes in this pass: 6 rendering settings (including the mobile values that keep Lumen and Virtual Shadow Maps off) and 10 PhysX-era physics settings removed. The 3 packaging denylist key renames now show up in the first pass instead (see above).
  • The SlateRemote note stays in the first-pass report kept in Saved/UEAPM/History/: the sample does not use that plugin, so nothing needs to be done about it.
  • 179 Blueprints compiled, 1 left: the only open item.

6. Read the report​

The single open item in Left to do:

SeverityCategoryLocationFix (short)
ErrorCompile errorGA_GoblinRange01UE5 Gameplay Abilities require a cooldown Gameplay Effect to grant tags. Either set CooldownGameplayEffectClass to None or give the effect a Grant Tags component with a Cooldown.* tag.

Following the report, open GA_GoblinRange01 and set CooldownGameplayEffectClass to None. Compile and save.

Verified result​

  • The C++ project builds with Build.bat on 5.8.
  • 179 Blueprints compile with 0 errors after the manual fix.
  • All 4 maps load.
  • Play In Editor from the main menu into the level works: the intro plays, the player character spawns, moves about 15 m, and melee attacks activate; 7 particle components are active (the converted Niagara effects).
  • Timing on the test machine: the first pass (file steps from the host project) takes under half a minute; the second pass (the unattended editor run) takes about 2 minutes, most of it the Cascade to Niagara conversion; each build takes about a minute, though a build can take longer if another build is holding the build lock.