Ultimate Action RPG Starter Project
A complete action RPG foundation.
A Blueprint-only action RPG starter project with no external plugins. Open it, verify your input mappings, and you have a working action RPG foundation to build on in under ten minutes. Ships with a player system, an energy-based combat system, Blueprint-only AI that actually fights back, and a full menu framework. Single-player only.
- Engine support
- Unreal Engine 5.3 and newer
- Version
- 1.6
- Backends
- Not applicable
What you get
- Blueprint-only, no external plugins and no Behavior Trees
- ALSV-based locomotion with sprint, dodge and FPS/TPS camera switching
- Energy-based Pulse Charge weapon system instead of traditional ammo
- Animation-notify-driven sword combat with no ghost hits
- AI that senses, chases, attacks, overheats and dies cleanly
- Full menu framework, dynamic crosshair and sniper scope
- Clean modular architecture: every system is independently replaceable
Quick start guide
New to this template? Follow these five steps to get up and running in under ten minutes.
- 01Open the project in Unreal Engine 5.3, which is the recommended version.
- 02Go to Edit > Project Settings > Input and verify all Action and Axis Mappings listed in the Input System section are present. If any are missing, add them manually. Missing mappings are the most common cause of controls not working.
- 03Open the Maps folder and load one of the example levels from AllLevels or TestingMaps.
- 04Press Play. The player should move, aim, fire and interact out of the box.
- 05If you see any errors on startup, check the Common Errors table before anything else.
If you are converting to UE 5.6 or 5.7, read the Common Errors and Requirements and Compatibility sections before opening the project. Engine upgrades require a few extra steps, and knowing them in advance saves a lot of time.
What you can customise immediately
- Change health, shield and pulse energy values in BP_PlayerCharacter variables
- Swap weapon meshes in the Weapons folder
- Add or remove levels in the Maps folder
- Replace UI widget art in the UI/PNG folder
- Adjust AI detection range and damage values in BP_AI
Where to go for common tasks
| Goal | Go to |
|---|---|
| Add a new weapon | Combat, interaction and weapon systems |
| Add a new pickup type | Pickup systems |
| Modify AI behaviour | AI combat system |
| Change camera or view modes | Aiming, ADS and camera systems |
| Understand damage flow | Damage system |
| Modify sword combat | Sword attack system |
| Understand the folder layout | Folder structure |
Multiplayer: important disclaimer
This template is single-player only. It has NOT been designed, tested or validated for multiplayer. Do not purchase this template expecting ready-made multiplayer functionality.
Specifically:
- No variables are replicated
- No RPCs (Remote Procedure Calls) are implemented
- No network prediction or lag compensation is present
- It has never been run in a multiplayer session
Adding multiplayer requires a full replication setup, which is a significant engineering task that is outside the scope of this starter project. The Blueprint architecture is clean enough that multiplayer can be added in the future, since event dispatchers, interface calls and centralised player state all support eventual replication. However, none of that work is done for you here.
What this template is for
Single-player games, prototypes, learning projects and game jams. It is an excellent foundation for solo experiences and can be extended to multiplayer by an experienced developer, but that extension is not included.
Common errors and fixes
Check this table first before posting a support question. Most issues have a fast fix.
| Error / symptom | Cause | Fix |
|---|---|---|
| Skipped package /Engine/EngineMeshes/Humanoid | Engine content not fully installed | Epic Games Launcher > Verify UE installation > Restart engine |
| Material error in bottom-right after engine upgrade | Internal material node changed in UE 5.7+ | Click error > Open material > Reconnect broken node > Compile > Save |
| Player does not move or controls do nothing | Input mappings missing from Project Settings | Edit > Project Settings > Input > Add all Action and Axis Mappings from the Input System section |
| Weapon does not fire | Not aiming, Equipped? is false, or out of pulse energy | Aim first by holding right-click, pick up a weapon, wait for pulse to recharge |
| Duplicate UI elements on screen | Widget references created more than once | Widgets are created in Begin Play. Ensure Begin Play fires only once per spawn |
| Blueprints show errors after engine upgrade | Stale redirectors or intermediate files | Delete Saved / Intermediate / DerivedDataCache > Reopen > Recompile Blueprints |
| AI does not attack or move | Begin Play events not wired, or detection range is zero | Open BP_AI > Check Begin Play connections > Verify sense range variable is greater than 0 |
| Sword hits not registering | AttackStart / AttackOver notify timing is off | Open sword anim montage > Adjust AttackStart and AttackOver notify positions |
| Camera snaps during ADS / scope | MinScope value is too low | In BP_PlayerCharacter Begin Play > Increase the MinScope value |
| Mac: shaders recompile every launch | Shader cache not preserved. Mac not officially tested | Allow shaders to recompile fully once > Save all materials > Reopen project |
If none of the above resolves your issue, visit the Discord server at https://discord.gg/cq464nBPRE.
Folder structure
All content is organised for scalability and clarity. Every system is separated by responsibility.
Content/
UltimateActionRPG/ ................ main project content
Arts/
ALSV/
PlayerAnimations
Data
Environment ................. from ALSV package
FX/
WeaponFX
SwordSwingFX
Mesh/
Weapons/
WeaponMeshes
AdditionalMeshes
SFX/
Cue/
Wave/
Maps/
AllLevels
TestingMaps
VisualAssets/
PhysicalMaterial/ ............. MetalBody_PhysMat
Materials/
Textures/
CameraShake/
UI/
Widgets/
PNG/
Blueprint/
AI/ .......................... BP_AI + Weapon/AIProjectiles
Menu/ ........................ HomeMenu + GameInstance
Player/
BP_PlayerCharacter
Weapons/ ................... Enums, Projectiles, Weapon_BP
Pickable/ .................. BP_Pickable, HealthPickup, HealthPickupBase
GameplayFramework .......... Logic / Interfaces / LibrariesInput system
This project uses the Legacy Input Mapping System, not Enhanced Input. All mappings must be configured in Project Settings. Go to Edit > Project Settings > Input. If any mapping below is missing, add it manually with the exact name shown. A missing or misnamed mapping will silently prevent that input from working.
Action mappings
| Action name | Purpose |
|---|---|
| JumpAction | Jump |
| StanceAction | Change stance or mode |
| SprintAction | Sprint |
| WalkAction | Walk toggle |
| AimAction | Aim weapon |
| CycleOverlayUp | Cycle ALS overlay upward |
| CycleOverlayDown | Cycle ALS overlay downward |
| Fire | Attack / Shoot |
| Interact | Pickup and world interaction |
| PauseGame | Open pause menu |
| Heal | Use heal crystal |
| Task | Custom action slot |
| SwitchCamera | Toggle first-person / third-person |
Axis mappings
| Axis name | Purpose |
|---|---|
| MoveForward | W / S movement |
| MoveRight | A / D movement |
| LookUp | Camera up / down |
| LookLeft | Camera left / right |
| Turn | Character turning |
Requirements and compatibility
Recommended engine version
Recommended: Unreal Engine 5.3. The template was originally built and validated in UE 5.3. Conversion to newer versions such as 5.6 or 5.7 and above is possible but requires the additional steps described below.
Engine content dependency
The legacy ALS locomotion system depends on Engine/EngineMeshes/Humanoid.
UE 5.6+ change: Starter Content is no longer bundled in UE 5.6 and above, which may mean this asset is not installed. If you see "Skipped package /Engine/EngineMeshes/Humanoid", this is NOT a broken template. It is a missing engine installation dependency. Fix it with Epic Games Launcher > Verify your UE installation > Restart engine.
UE 5.7 material conversion
When converting from 5.3 to 5.7, a material error may appear in the bottom-right corner. This is caused by internal node changes in the engine, not a broken template. Fix: click the error, open the affected material, reconnect or replace the broken node, then Compile and Save. The error disappears permanently after saving.
General upgrade maintenance
- Fix up Redirectors by right-clicking the Content Browser root
- Delete the Saved, Intermediate and DerivedDataCache folders
- Reopen the project and recompile all Blueprints
- Re-save affected materials
Platform support
| Platform | Status | Notes |
|---|---|---|
| Windows | Tested | Primary supported platform |
| Mac | Not tested | May need shader recompile and material reconnection |
| Linux | Not tested | Not validated |
Future update plan
- Remove legacy EngineMeshes dependency
- Improve UE 5.6+ and 5.7+ migration stability
- Expand Mac testing and compatibility
- Reduce manual setup steps
Core systems overview
The template ships with four fully Blueprint-based gameplay systems. Each is modular and independently replaceable.
Player system
- Smooth locomotion (ALSV-based)
- Sprint with stamina regeneration
- Health and Shield (Defence) system, where shield absorbs damage first
- Multi-directional Dodge and Roll (Forward, Back, Left, Right)
- First-person and third-person camera switching
- Energy-based weapon system (Pulse Charge, which replaces traditional ammo)
- Sword combat with animation-driven combos
- Weapon cycling via mouse scroll
- Physical material hit detection (metal, wood, concrete, glass, body)
- Partial Save Game implementation
Combat system
- Single-shot and auto-fire weapon modes
- Pulse energy recharge, which stops while shooting and resumes on release
- Wall trace fire blocking, which prevents shooting through geometry
- Melee fallback when pulse energy is depleted
- Centralised projectile spawning with per-weapon parameters
- Shield-first damage calculation
- Per-weapon spread and recoil
AI system
- Blueprint-only, with no Behavior Trees required
- Player detection and sensing
- Smooth rotation to face the player
- Direct attack logic with cooldown
- Missile firing system
- Overheat system, which creates attack windows for the player
- Dynamic damage scaling on overheat and recovery
- Clean death handling, with no logic running after death
UI system
All widgets are created once at Begin Play, stored as references, and added or removed from the viewport as needed.
- Full menu framework: Home, Main, Options, Controls, About, Store, Credits
- Pause Menu
- Dynamic Crosshair that expands with movement speed
- Sniper Scope overlay
- Weapon Pickup prompt
- ALS HUD
- Damage Indicator with randomised timing, auto-removed
BP_PlayerCharacter: core event systems
This section covers how the player is initialised, how systems update each frame, and how all major gameplay inputs are handled.
Event Begin Play
A Sequence node runs each initialisation step independently, keeping startup logic readable and debuggable.
- 01Parent Begin Play and On Begin Play. Calls the parent character class first, which handles core movement, rotation and animation initialisation. This is inherited from the Base ALSV Character. The On Begin Play function inside BP_Base_CharacterBP manages movement, anim instance, rotation and stance.
- 02Create Widget References. Spawns all UI widgets once and stores them as variables. Widgets are added or removed from the viewport via these references, never recreated. This prevents duplicate UI elements and makes dynamic updates reliable.
- 03Weapon References, Scope Zoom and FPS Limit. The remaining Begin Play steps cache the weapon pickup actor reference, cache the base weapon actor and set the minimum scope FOV, and apply a 60 FPS frame rate cap via Game User Settings.
Do not remove the Parent Begin Play call. Removing it without replacing the parent system will break movement and animations.
Event Tick
Five systems are isolated by a Sequence node: pulse energy, shield, crosshair, attack reset and wall trace.
- Restore Pulse Energy. Recharges weapon energy over time. Pauses while IsShooting? is true. Uses a small initial delay to prevent instant recharge after firing. Loops until MaxPulseCharge is reached.
- Restore Shield. Slowly restores the Defence (shield) value. Pauses while GettingDamage is true. Loops until MaxDefence is reached.
- Wall Trace. Detects geometry blocking fire.
- Dynamic Crosshair Spread. Maps velocity to spread range.
- CanAttack Reset. A delay-based cooldown to prevent attack spamming.
Combat, interaction and weapon systems
Design rule: one Fire Event. One Interact Event. Everything else reacts.
Fire Event: safety checks
| Check | Blocks firing if... |
|---|---|
| CanAttack | Attack cooldown has not reset yet |
| Death? | Player is dead |
| Equipped? | No weapon is currently held |
| Aiming? | Player is not currently aiming |
| IsOutOfPower? | Pulse energy is at zero |
| NearWall? | Wall trace detected geometry directly ahead |
Fire Event: weapon output
After all checks pass, a Gate node controls continuous fire via Retriggerable Delay. SpawnBullets handles projectile spawning, muzzle flash, sound, recoil, spread and material hit effects. Each weapon feeds only its own values into this shared function.
Interact system
The Interact input calls the Interact Event Dispatcher only. No checks, no logic, no hard references. Pickups, NPCs and any interactable actor bind to this dispatcher and react independently.
Weapon pickup variables
One boolean flag per weapon type controls equip logic and prevents duplicate pickups.
- PistolPickup
- RiflePickup
- ShotGunPickup
- SniperPickup
- FlameThrowerPickup
Adding a new weapon
- 01Add a boolean to BP_PlayerCharacter, for example RocketLauncherPickup.
- 02Add a branch in the Weapon Decision Layer.
- 03Create a pickup actor.
No interaction logic needs to be rewritten.
Aiming, ADS and camera systems
Aiming system
Before aiming activates, four conditions must all be true: not near a wall, weapon equipped, not in sword-only mode, and CanAttack is true. When all pass, Aiming is set to true, rotation mode updates via BPI Set Rotation Mode, and sniper-specific scope logic applies.
ADS zoom
Reads the current camera FOV, adjusts it incrementally by the Forward input value of plus or minus 10.0, then clamps the result between MinScope and MaxScope. This gives smooth gradual zoom instead of an instant snap.
Mouse scroll: dual behaviour
| Context | Scroll result |
|---|---|
| Player IS aiming with scope | Calls ADS Zoom. Forward is zoom in, back is zoom out. |
| Player is NOT aiming | Calls Roll Weapon, which cycles through available weapons. |
FPS / TPS camera switch
A FlipFlop node toggles between First Person and Third Person by calling the BPI Set View Mode interface function. Using an interface keeps camera logic decoupled from the character, allowing reuse across multiple character types.
Sword attack camera (optional)
When enabled, each sword hit triggers a camera angle switch via FlipFlop and a slow-motion effect via timeline-driven time dilation. The camera blends smoothly using Set View Target with Blend over 0.5 seconds, and TimeTrigger drives the slow motion via Set Global Time Dilation.
This entire system can be disconnected without affecting any other gameplay system.
Damage system
Damage and feedback
The AnyDamage event only applies damage if Dodging? is false and the damage value is valid. When damage lands, Defence is reduced first. If Defence reaches zero, Health takes the remainder. The GettingDamage flag is set briefly to pause shield regeneration.
For feedback, a Damage Indicator widget is created and auto-removed via delay, using a Do Once node. Camera shake plays with its epicentre at the player's world location.
Character stats reference
Three variable groups define the entire player state. These are what every system reads from and writes to.
| Group | Variables |
|---|---|
| Character Stats | Defence, MaxDefence, Health, MaxHealth, CamBlend, HealCrystalCount, ExpCoin, Death?, GettingDamage, Dodging? |
| Weapon Stats (Booleans) | PrimaryWeapon, SecondaryWeapon, Equipped?, CanAttack?, SwordAttack?, IsAttacking?, ContinousFire?, IsShooting?, IsOutOfPower?, IsAutoFire, Scope, SwordHit?, Hit?, SpreadBullets?, NearWall?, MaxDamage, Damage, MaxPulseCharge |
| Weapon Stats (Floats and Enum) | PulseCharge, FireRate, SpreadRange, DecalLifeTime, DecalSize, MinScope, MaxScope, ShotAmount, E_WeaponType |
Foundational systems
Weapon socket names
Weapons are attached to the character skeleton via named sockets, not hard-wired mesh references. The variables are SwordSocketName, PrimaryWeaponSocketName and SecondaryWeaponSocketName. To move a weapon to a different position such as back, hip or shoulder, change only the socket name variable. No Blueprint rewiring is required.
Weapon switch and roll
The Roll Weapon function cycles through available weapons by checking pickup boolean flags and skipping any that are false. It updates equipped state, weapon meshes and weapon type variables, then syncs with the firing and aiming systems. Mouse scroll, UI buttons and keyboard input all call the same function.
Character components
The character component hierarchy is intentionally structured. Weapon holding components (MeleeWeaponSocket, PrimaryWeaponSocket, SecondaryWeaponSocket) each match a skeleton socket. Multiple AttackArm components under the Attacks hierarchy each carry a scene component, child actor and camera attachment, used by the optional sword CamSwitch system. The full hierarchy is CapsuleComponent, Mesh, weapon socket components, VisualMeshes, HeldObjectRoot and AttackArms with child cameras.
Core functions
| Function | Responsibility |
|---|---|
| SwitchWeapon | Cycles and equips available weapons |
| SpawnBullets | Centralised projectile and hitscan output |
| WeaponType | Resolves current weapon behaviour category |
| TakeDamage | Processes damage against shield then health |
| WallTrace | Detects walls blocking fire |
| SwitchToSword | Transitions to melee mode |
| SheathWeapon | Hides weapon meshes when holstered |
| Death | Handles player death state and cleanup |
| StopAnim | Safely interrupts any active animation |
| Create Widget | Spawns and stores all UI widget references |
Sword attack system
Melee combat is isolated from gunplay so the two systems never conflict. All sword logic is driven by Animation Notifies, so the Blueprint does not guess at timing.
SwordAttack custom event
- 01Player input is temporarily disabled.
- 02A random animation is selected from the SwordAttackAnim array.
- 03The animation montage plays.
- 04The system waits for the montage to finish.
- 05Input is re-enabled.
Animation notify events
| Notify | What it does |
|---|---|
| AttackStart | Fires when the animation reaches the hit window. Sets SwordAttack? to true. Damage can only register while this flag is true, so there are no ghost hits. |
| AttackOver | Fires when the animation exits the hit window. Sets SwordAttack? to false, resets SwordHit?, and re-enables input. |
Dodge variables
The dodge variable group is DodgeF?, DodgeB?, DodgeR? and DodgeL? as Booleans, plus DodgeAnim as an Anim Montage.
Player action systems
Dodge system
Input is Shift plus the movement keys. The system checks velocity is greater than zero, then directional key state sets the correct dodge boolean: W, S, A and D set DodgeF?, DodgeB?, DodgeL? and DodgeR?. The Dodge montage plays the corresponding directional animation. Works in both FPS and TPS.
Heal system
Requirements: at least 1 Heal Crystal and Health below maximum. When used, the crystal count decrements, Health increases by MaxHealth divided by 4.0, the result is clamped, and a heal sound plays.
Pause system
The PauseGame input calls Set Game Paused, then adds the Pause Menu widget reference to the viewport. The logic is centralised, so duplicate pause menus are not possible.
Pickup systems
Base weapon pickup
On Component Begin Overlap validates the overlapping actor is BP_PlayerCharacter, binds to the Interact dispatcher, and shows the pickup UI. On End Overlap unbinds and hides the UI. It does not decide which weapon is given, since that lives in the Weapon Decision Layer.
Health, crystal and pulse pickups
This blueprint is generic and self-contained. It validates before consuming, clamps all values, plays feedback, and destroys itself.
| Pickup type | Condition | Effect |
|---|---|---|
| Health | Health < MaxHealth | Adds HP, clamped to MaxHealth, plays Heal SFX |
| Heal Crystal | Always consumable | Increments HealCrystalCount |
| Pulse Energy | PulseCharge < MaxPulse | Adds energy, clamped to MaxPulseCharge, plays SFX |
To extend to new pickup types, add a new branch, a new variable on BP_PlayerCharacter, and feedback such as sound or VFX. No redesign of collision or interaction logic is needed.
AI combat system
The AI is designed to fight, not just exist. It senses the player, rotates to face them, attacks with weapons and missiles, overheats, recovers, and dies cleanly. Every behaviour is a custom event, so replacing or rebalancing any one of them does not affect the others.
| Custom event | Behaviour |
|---|---|
| Begin Play | Initialises all AI state and kicks off custom events cleanly |
| Sense Player | Detects player within range and valid combat conditions |
| Face Player | Smoothly rotates AI to face player each frame |
| Attack | Applies damage. Respects cooldown and overheat state |
| Missile Firing | Fires projectiles after conditions met. Each shot adds heat |
| OverHeat | Stops firing, triggers recovery timer, creates player attack window |
| Increase / Dec Damage | Scales damage output on overheat state or difficulty triggers |
| AnyDamage | Reduces AI health. Centralised across all damage types |
| Death | Stops all logic and destroys actor cleanly when Health is 0 or below |
Architecture philosophy
Every system in this template follows the same core set of rules.
| Principle | Practical meaning |
|---|---|
| One Fire Event | All firing logic lives in a single custom event |
| One Interact Event | Interaction is a dispatcher, with no hard references |
| Player owns weapon state | Weapons feed values, the player holds all state flags |
| Data-driven weapons | Each weapon provides values to shared logic, with no duplication |
| Reference-based UI | All widgets created once and reused via stored variables |
| Independent regen | Energy and shield regenerate on separate, isolated loops |
| State-driven logic | Systems react to boolean flags, not random triggers |
| Optional camera FX | Cinematic systems can be disconnected without breaking combat |
Safe customisation
- Replace guns with magic spells
- Replace pulse energy with stamina
- Remove the sword system entirely
- Add new weapon types
- Replace the entire UI
- Remove FPS or TPS mode
- Disable cinematic sword camera
- Add new pickup types
- Adjust all stat values (health, shield, energy, fire rate)
Nothing is hard-locked. Nothing fights you.
Support
For bug reports, questions and update announcements, join the Discord community at https://discord.gg/cq464nBPRE. Before posting, please check the Common Errors and Fixes section, since most issues have a documented solution.
All Marketplace assets included in this project are fully integrated and cannot be extracted separately. All logic and systems are editable for your own commercial games.
Stuck on something?
We answer every serious message ourselves. Discord is the fastest way to get an answer from the person who built the plugin.