Skip to content
templatev1.6Blueprint only

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.

  1. 01Open the project in Unreal Engine 5.3, which is the recommended version.
  2. 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.
  3. 03Open the Maps folder and load one of the example levels from AllLevels or TestingMaps.
  4. 04Press Play. The player should move, aim, fire and interact out of the box.
  5. 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

GoalGo to
Add a new weaponCombat, interaction and weapon systems
Add a new pickup typePickup systems
Modify AI behaviourAI combat system
Change camera or view modesAiming, ADS and camera systems
Understand damage flowDamage system
Modify sword combatSword attack system
Understand the folder layoutFolder 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 / symptomCauseFix
Skipped package /Engine/EngineMeshes/HumanoidEngine content not fully installedEpic Games Launcher > Verify UE installation > Restart engine
Material error in bottom-right after engine upgradeInternal material node changed in UE 5.7+Click error > Open material > Reconnect broken node > Compile > Save
Player does not move or controls do nothingInput mappings missing from Project SettingsEdit > Project Settings > Input > Add all Action and Axis Mappings from the Input System section
Weapon does not fireNot aiming, Equipped? is false, or out of pulse energyAim first by holding right-click, pick up a weapon, wait for pulse to recharge
Duplicate UI elements on screenWidget references created more than onceWidgets are created in Begin Play. Ensure Begin Play fires only once per spawn
Blueprints show errors after engine upgradeStale redirectors or intermediate filesDelete Saved / Intermediate / DerivedDataCache > Reopen > Recompile Blueprints
AI does not attack or moveBegin Play events not wired, or detection range is zeroOpen BP_AI > Check Begin Play connections > Verify sense range variable is greater than 0
Sword hits not registeringAttackStart / AttackOver notify timing is offOpen sword anim montage > Adjust AttackStart and AttackOver notify positions
Camera snaps during ADS / scopeMinScope value is too lowIn BP_PlayerCharacter Begin Play > Increase the MinScope value
Mac: shaders recompile every launchShader cache not preserved. Mac not officially testedAllow 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 / Libraries

Input 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 namePurpose
JumpActionJump
StanceActionChange stance or mode
SprintActionSprint
WalkActionWalk toggle
AimActionAim weapon
CycleOverlayUpCycle ALS overlay upward
CycleOverlayDownCycle ALS overlay downward
FireAttack / Shoot
InteractPickup and world interaction
PauseGameOpen pause menu
HealUse heal crystal
TaskCustom action slot
SwitchCameraToggle first-person / third-person

Axis mappings

Axis namePurpose
MoveForwardW / S movement
MoveRightA / D movement
LookUpCamera up / down
LookLeftCamera left / right
TurnCharacter 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

PlatformStatusNotes
WindowsTestedPrimary supported platform
MacNot testedMay need shader recompile and material reconnection
LinuxNot testedNot 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.

  1. 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.
  2. 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.
  3. 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

CheckBlocks firing if...
CanAttackAttack 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

  1. 01Add a boolean to BP_PlayerCharacter, for example RocketLauncherPickup.
  2. 02Add a branch in the Weapon Decision Layer.
  3. 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

ContextScroll result
Player IS aiming with scopeCalls ADS Zoom. Forward is zoom in, back is zoom out.
Player is NOT aimingCalls 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.

GroupVariables
Character StatsDefence, 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

FunctionResponsibility
SwitchWeaponCycles and equips available weapons
SpawnBulletsCentralised projectile and hitscan output
WeaponTypeResolves current weapon behaviour category
TakeDamageProcesses damage against shield then health
WallTraceDetects walls blocking fire
SwitchToSwordTransitions to melee mode
SheathWeaponHides weapon meshes when holstered
DeathHandles player death state and cleanup
StopAnimSafely interrupts any active animation
Create WidgetSpawns 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

  1. 01Player input is temporarily disabled.
  2. 02A random animation is selected from the SwordAttackAnim array.
  3. 03The animation montage plays.
  4. 04The system waits for the montage to finish.
  5. 05Input is re-enabled.

Animation notify events

NotifyWhat it does
AttackStartFires 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.
AttackOverFires 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 typeConditionEffect
HealthHealth < MaxHealthAdds HP, clamped to MaxHealth, plays Heal SFX
Heal CrystalAlways consumableIncrements HealCrystalCount
Pulse EnergyPulseCharge < MaxPulseAdds 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 eventBehaviour
Begin PlayInitialises all AI state and kicks off custom events cleanly
Sense PlayerDetects player within range and valid combat conditions
Face PlayerSmoothly rotates AI to face player each frame
AttackApplies damage. Respects cooldown and overheat state
Missile FiringFires projectiles after conditions met. Each shot adds heat
OverHeatStops firing, triggers recovery timer, creates player attack window
Increase / Dec DamageScales damage output on overheat state or difficulty triggers
AnyDamageReduces AI health. Centralised across all damage types
DeathStops 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.

PrinciplePractical meaning
One Fire EventAll firing logic lives in a single custom event
One Interact EventInteraction is a dispatcher, with no hard references
Player owns weapon stateWeapons feed values, the player holds all state flags
Data-driven weaponsEach weapon provides values to shared logic, with no duplication
Reference-based UIAll widgets created once and reused via stored variables
Independent regenEnergy and shield regenerate on separate, isolated loops
State-driven logicSystems react to boolean flags, not random triggers
Optional camera FXCinematic 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.