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
- In the Epic Games Launcher, open Unreal Engine > Samples and download Action RPG for engine 4.27.
- Create a project from it (for example
ActionRPGSampleUE427). - Make a copy of the project folder. Leave out
Binaries,Intermediate,SavedandDerivedDataCache. 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):
| Step | Changes | Open items |
|---|---|---|
project | 27 | 1 (Manual) |
cpp | 8 | 0 |
- Project: engine association 4.27 to 5.8;
WindowsNoEditor/MacNoEditorrenamed; 11 plugin entries removed (PhysX-, VR-, Magic Leap- and LPV-related plugins among others); 13 Android and iOS settings updated for 5.8. One Manual item: the removed SlateRemote plugin. - C++: 46 source files scanned, 7 fixes plus regenerated project files:
- build settings
V2toV7with the 5.8 include order, in both targets; - an
AbilitySystemLog.hinclude added; - two ability-task checks updated for the component's weak pointer;
- an
EventData.Targetaccess updated for object pointers; GetReferencerNameadded to the loading screen'sFGCObject.
- build settings
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:
| Step | Status | Changes | Left (error/manual) | Warnings | Time (s) |
|---|---|---|---|---|---|
| Project and config | ran | 3 | 0 | 0 | 0.0 |
| Assets resave | ran | 873 | 0 | 0 | 14.1 |
| Blueprints | ran | 0 | 1 | 0 | 8.6 |
| Enhanced Input (opt-in) | not selected | 0 | 0 | 0 | 0.0 |
| Cascade to Niagara | ran | 75 | 0 | 11 | 78.5 |
| C++ source | ran | 1 | 0 | 0 | 10.7 |
| Rendering and mobile | ran | 6 | 0 | 0 | 0.1 |
| Physics (PhysX to Chaos) | ran | 10 | 0 | 0 | 0.0 |
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
SpawnEmitterAttachedcall onBP_WeaponSpider, 1 Level Sequence). They keep playing Cascade, which still works in 5.8. - 19 config changes in this pass: 3 packaging denylist keys, 6 rendering settings (including the mobile values that keep Lumen and Virtual Shadow Maps off) and 10 PhysX-era physics settings removed.
- The SlateRemote item of the first pass was resolved by the rerun of the project step: that run found nothing left to do (reruns are idempotent).
- 179 Blueprints compiled, 1 with errors: the only open item.
6. Read the report
The single open item in Left to do:
| Severity | Category | Location | Fix (short) |
|---|---|---|---|
| Error | Compile error | GA_GoblinRange01 | UE5 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.baton 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 and activates melee attacks, and the converted Niagara effects play.
- Total unattended migration time: about 4 to 6 minutes on the test machine (both migration passes and the builds).