Unreal Engine Livestream - ActionRPG - August 2 - Live from Epic HQ


Have you ever wanted to make a high-end RPG for mobile devices but had no idea where to start? Maybe you know where to start but want to know how to set up and use the UE4 Ability System? Well, you are in luck! On this week’s livestream Sam Deiter, Paulo Souza, and Ben Zeigler will talk about the work they did to help bring Epic’s newest game sample project, Action RPG, to life.

Thursday, August 2nd @ 2:00PM ET - Countdown


Ben Zeigler - Technical Lead - @JZig](
Paulo Souza - Evangelist, Brazil - @UnrealPaulo](
Sam Deiter - Senior Technical Writer - @Sam_Deiter](
Amanda Bott - Community Manager - @amandambott](


[USER=“270”]Ben Zeigler[/USER]

In this thread comment: ‘hoping action-rpg would be pure Blueprint’ Ben replied:

Could Ben say more on that, to better understand Blueprint capabilities / limits.
Is this online-multplayer RPG or any RPG including Single-Player etc. Thanks! :slight_smile:

[USER=“270”]Ben Zeigler[/USER]

In this thread comment: *hoping *action-rpg would be pure Blueprint Ben replied:

Could Ben say more on that, to better understand Blueprint capabilities / limits.
Is this online-multplayer RPG or any RPG including Single-Player etc. Thanks! :slight_smile:

I will try to follow this one.

Some question:

Could you please explain a bit the way you design the Damage system?
How do the **AttackPower **& **DefaultAttack **(Damage Curve) interact and why having those 2 attributes?
Why did you used the “Damage” property to set the DefaultAttackValue as also the number of damage that will impact the health?

In Ability system, why did you choose to use ActivateAbilitiesWithTags to start skills and not the tradional input system?

What was the key decision to not use the GameplayCues for FX & Sound? Is it to heavy for single player mobile game?
The same with the targeting type system, why did you create a new one? Was it because it was a single player? or because it is to heavy for mobile?

My question are really related to understand how in your design process you choose or avoid some pratices for the mobile game.


very cool… I was thinking of running two projects at one time so I wouldn’t get bored, and action rpg would be the game type… I like hack and slash (who doesn’t??) but I kinda like a story, some puzzles and quests… a journey in a game (going farther north than I’ve ever been before :slight_smile: )… very cool, thank you for releasing this…

I have few more technical questions:

  1. How scalable the system is (how much duration/periodic effects can be reasonably handled), how many running abilities.
  2. What are the plans for the system future ? Planned features, optimizations.
    (Or is the system as generic as it can get and there are no more features/refactorings planned ?).
  3. How is Fortnite using this system (some quick overview, which part of game are using it). Like weapons, input handling (weapon switching, character movement) etc.

If you can show how to painlessly integrate this into a Blueprint based project, I might actually check it out. Personally tho, I don’t like when anybody says you need to do anything a certain way.

A non-pandering explanation of the benefits of this system would be sweet.

In the ActionRPG project, all primary assets are fully static and created by-hand in the editor. But surely this way of manually instancing primary assets in the editor only works when you have a finite (and reasonable!) number of possible assets (i.e, only x weapons).

How would you go about using the asset manager when there are too many possible secondary assets combinaisons to do them all with hand-made primary assets? (i.e 20 weapon meshes and 20 particle systems). Which is a problem that will be encountered by basically any RPG with a weapon enchantment system, for instance. Or any RPG with a good customization system.

The main question I would like to ask is about weak prediction such as spawning a gameplay cue from a montage event that plays on both server and client. I would like to know how to predictively launch the gameplay cue on the montage event on the client but have this cue be linked with the server one as in this case a prediction key is not available.

So my question would be on the topic of handling weak prediction with the system.

please address this
i would also like to know what i should not use blueprint for.

i have watched many tutorials and they all use blueprint for attacks (including registering damage) but this sample uses cpp to register damage.
also from the documentation, inventory is using AssetManager? which is cpp.

other things i know about that we have to use cpp for is
Nigeria and GAS only supports CPP but what is the difference between using GAS and making stats a variable in BP which most tutorials do?
also AI is one issue i found to be frustrating to make when using BP to create and you guys have said multiple times to use cpp if there is a need for complex AI

also off topic but can you show some settings we can turn off in UE so that we can make our stuff with a lower end PC?

hmmm… I can make an action rpg in BP

I think he does not recommend blue print because the ability system is not 100% compatible, and doing 100% blueprint would mean not taking advantage of it.

from the wiki:

He never said it was impossible to do it, just not what he would recommend.

understood… what I ment was I can build my own arrays and such in BP and bypass this one… it would be nice to learn c++ on a game that I would use but I don’t think this is the one :slight_smile:

If performance isn’t the reason to not use BP, I’d say why not to make similar system using BP and make whole game in BP ? (or better yet, make an effort and expose abilities to BP 100%)

Hey everyone thanks for watching the stream, I’ll try to answer a few of the more technical questions here. I do think AnswerHub is probably better for some of these, that way other people can chime in too

The way we’ve done this on the past for Paragon was add an anim notify that plays the gameplay cue locally, but ONLY on the client, so not directly replicated at all. This works out well because the montages are predicted/cancelled because they are tied to abilities that are predicted/cancelled. You need replication for any cues activated by abilities (and the GAS handles that) but for other cases you can do it just on the client. There is a theoretical “prediction” problem here if it plays the montage when it shouldn’t but it was already failing prediction by playing the animation so it isn’t much worse to play the cue as well. There’s no easy way to “link” gameplay cues from the client->server, as cues are fairly fire-and-forget

For these discussions of C++ vs Blueprints I’ll just remind that this was my personal advice based on working on games with medium-to-larger-teams. If you’re one person trying to make a small rpg than blueprint-only may be fine, but for my personal one-person projects I’m doing about 25% native, 75% blueprint for things like this. Of course, I am a programmer so that’s what I’m used to.

There’s no “right way” to do hobbyist/one person projects but if you’re making something data-driven that you will want to maintain for years you should think about C++

Thank you Ben for answering this question as this part of the system is what I struggle most with.

Then, related to this one if I want to fire a cue that has a projectile as a source actor, should I fire the projectile on both the client and the server, calculating overlaps on both of them for destruction of the projectile, but only doing damage logic on the server? Or would it be better for the gameplay cue to have the same logic of the projectile ( as it were a duplicate of it ) and fire only the real projectile with logic on the server?

Thank you very much.

Makes sense now, thanks for answering the question!

In RPGAttributeSet, it looks like Health and Mana are forcefully clamped in PostGameplayEffectExecute. What’s the reason for clamping there instead of clamping in PreAttributeChange (via the NewValue argument)?

In my own project, where should I clamp attribute values?

There are a few different approaches here, one I’m looking into now is having the projectile spawn on the server only, and then it replicates down it’s destruction event, and that spawns the gameplay cue locally on the client only. It’s really hard to “predict” projectiles without there being lots of errors, but it does make the spawn feel a bit laggy.

Both clamp methods can work, I believe we went with this one because it makes it easier to track damage that goes over the limit. IE, if your enemy has 50 health but you do 100 damage, you may want to display the 100 damage in your popup even thought it only did 50 actually. But yeah experiment and try things.

Because you’re continuing to develop this, what are the chances of a github project? It would be super interesting to see your development process.