Abilities System/Module - Examples? Docs? Estimates?

Hi…

Now I’m going to implement skills on my game, UMG buttons working, keyboard mapped…
On getting a research I’ve seen that U4 API already contains a system intended to this funcionality (and Amen! It uses DataAssets!), what points that I’ll be probably reinventing the wheel if I write my own.
On the other hand, I got no docs other than the API that reffers to this system (ok, the classes are there, how they does works with each other?) and there is no card dedicated to it on Trello.

Is there any estimate about when some documentation or example will be released to users? Any directions would be a bless.

Thank you.

No answer? And if I say “pleeeeeeaasssseeeee?”…

What kind of abilities or what is the documentation you are looking for?

Are you just talking about documentation on data assets?

API link

You can enable the Ability editor with these lines on the .ini
[GameplayAbilities]
GameplayAbilitiesEditorEnabled=true

But then break on try to edit an asset because of lack of “TAGS” (whatever this could be LOL)

Searching on Hub, looks like @inside was already trying to add GameplayTags, but just on read his discussion with the Epic Staff guy about subclass engine and editor to make it bypass this first error I’m already scared. LOL

Here the TAGS discussion: inside and David Ratti about Gameplay Tags

Just by see the words: “Poison, Burning, Ice and Mana” on the discussion I “suppose” that many of us could save a lot of work if Epic give us some directions on this.

To short:
U4 “ALREADY” has a system that:

  • Gets a Character.
  • Considers rules to allow skill activation.
  • Defines target, skilltype, cost (mana, rage whatever).
  • Launches the skill.
  • Play a montage on the character (animation or cool summon one).
  • Attachs a particle system/effect somewhere.
  • Resolves (apply damage/effects on targets).
  • Self Destroy the “skill actor”.

AND… Asynchronously!

A side comment:
Just “NOW” I understood why @inside was so much insistent on say that skills should be Actors instead of objects on some posts. The guy is probably lightyears forward on this.
Respect! LOL

looks interesting

LOL… Yep, now I must see “IF” this information will come at time to fit my milestones/demo release date OR I should forget and make my own, the situation is more or less this one:

I open the editor…
9ad6a44450235f07eb8db378df69152a0cb26ebe.jpeg

And after…
despair.gif

Actually i wasn’t insistent :D. As in many cases it really depends on your target game/resources/hardware.

If you are doing small game like Dota (small in terms of players in single match), then trying to create elaborate generic system is kind of pointless. Replicating UObjects is not by any means hard (and you can essentially just let actor which replicate sub-object decide about things like relevancy, if actor is relevant to other actors, it’s subobjects are also etc. It’s crude, but should be sufficient for most cases).

But with abilities as actors, you have much of replication problems solved.

I actually migrated my own ability system to UObjects, and replicate them trough ActorComponent. Not much different for my case, but I have less Actor cruft to deal with in subclasses.

The big difference that I noticed about the engine AbilitySystem, is the fact that it mainly rely on non-instanced objects.
And while I know what it means, I don’t know what are cons/pros for doing it this way.

One difference I’m sure of that non-instanced objects, can’t have BP graph executed.
I’m not sure if non instanced objects, can have things like RepNotify (something, that my system is very dependent on).

Anyway, I would also like to hear more about this subsystem. Though I’m checking every commit and scour trough code quite often, I ended up rolling my own system for no other reasons that:

  1. The build in one seems complicated, especially if you don’t know what it is supposed to do :D. Or why it is the way it is.
  2. It seems to be very generic, to be able to carter to wide range of games (I have specific type of game in mind, so I can simplify mine to do what I need, though it’s still fairly extensible… as long as you do action rpg ;p).
  3. It also seems to treat the using csv data very seriously for effects especially. I didn’t found it appealing to me.
    I like to keep everything in single blueprint (within reasonable range of course).
  4. To learn few new things (;.

Though I’m sure that build in system, is at least 100x better than mine, has better performance (especially under heavy load), and is more flexible.
Especially since my implementation heavily depends on RepNotifies, RPCs, object instancing(abilities are instanced per actor), creating/destroying new objects (damage over time effects), and on creating event driven logic for all above using blueprints.

And here about tags:

GameplayTags is absoluawesomlygood (new word!) module.
I personally use it for pretty much everything. I tended to use it even for indentifying objects, without creating some odd class inheritance trees. I just create base class with tag container, some base functionality, and make blueprints with different tags.

Thanks for share your thoughts inside, I’ll look at GameplayTags after I left the “Woody’s Bear State”. LOL

On begin to “scratch” the skillsystem I thought about get a single static “skillthrower” ingame (what I think is near the built in one) because the skills on my game are not “class” related and can be learnt more or less freely (like with diablo 1 books). If you remember, the Warrior class could learn Fireball.

So, going to Unreal… Imagine a Blueprint to each character with “92” animations and a switch (BLARGH), what also would be a hell from a waste due to my game “limit” the player to enter on a dungeon with just 7 skills enabled…

paid.jpg

So would be more “effective” assign just the 7 animations/effects on this skillthrower and on activate, make it “borrow” the character control from the player, play animation, effects, whatever and on finish give back the character’s control to the player…

Also, as you see, my skills are paid with “generic” resources exactly to allow all classes to trigger them (other thing that “I suppose” U4 built in system already predicts)…

Write an own system would be great, but if at least we get some “minimal” advice on this, I think I could easily adapt my game to use it… :smiley:

Actually classes (as a character classes :D), have little to do, with the fact that my abilities are instanced per actor. The main reason why I decided to go this route, is the fact how my abilities would be constructed in future like.

Final Damage = Intelligence10 + MagicPower0.5.
Or
Final Damage = Intelligence10 + (Intelligence (caster) - EnemyStrenght) * 2;
Or
if(MyIntelligence > EnemyIntelligence)
{
Final Damage = MyIntelligence+EnemyIntelligence
2;
}
else
{
Final Damage = EnemyIntelligence*2;
}

You got the idea. Multiple attributes affecting single ability at the same time.

From what I gather GameplayAbility system allows for the same thing, but in their case it is achieved trough applying multiple GameplayEffects, which I didn’t found that appealing to me.I would have to maintain lot of them, along with lot of csv files.
In my case i dump everything into single Ability blueprint, which calculcate output damage upon being triggered.

There are two ways of doing it. Create elabroate system which will aggregate data from actors, or just instance ability per actor, and be done with it. The former allow me to directly access attributes from Causer/Target.
In the end it is simpler to code, and simpler to use with blueprints. Idk, if it is efficient.

Idk, why you would need 92 or 109123 animations ;). Unless they all are unique animations.
You just assign needed animations on per ability basis. Something like attack animation, spell casting animation, or whatever you need.

You overthink the problem. Animations (more likely anim montages), are going to be played on pawn. Where you assign them is irrelevelant honestly, as long as you can access to play them. I would do it per ability basis, since at some point you might decide, that you really want different animations for different abilities. If you dump it all to single.
Nobody said that animations must be unique ;p.

Paying resources is not that complicated problem. Depending on complexity of your system. In my case it’s single array of FGSAbilityCost struct. Which contains attribute name name, and float cost, for resource.
then in one function I check if pawn have all needed resources, and then subtract them (if have everything required). That’s the easiest way to approach it.

That’s one item on my skill table.
I built more things to feed UMG than exactly make the skills “happen” until now…

11eacbc454c7ab7011ae36a1cf895964db8ca6db.jpeg

Most of the “data” to work is there, I’ve come to the part where the system gets input, evaluates if the player can “land” a skill or don’t (because can’t pay from his inventory or doesn’t have the right weapon), decreasing resources and such, now about the visual aspects and effects… LOL lots to do…

One question ? Why do you atlas your abilities icons ? Slate will automatically batch all images, that you throw it ;).

And what really interest me, is why you keep your skill info in DataAsset ? I don’t really think there is any particular advantage to do it (especially in small game). What I can see for sure, it will hell of of hard to manage when you have more skills.

You should try to implement policy of OneSkill - OneBlueprint.
Where blueprint derive from MySkill class (which is either actor or object).
Right know all you accomplish is making your life hell lot of harder than it should be :D.

https://github.com/iniside/ActionRPGGame/blob/master/Source/GameAbilities/GameAbilities/GASAbility.h

Here is my implementation of ability.
And here is extension:
https://github.com/iniside/ActionRPGGame/blob/master/Source/GameSystem/GameSystem/Abilities/GSAbility.h
Which implement some more game specific behaviours.

Well… All players can have all abilities so I thought that get a single UI image to then (always loaded) feeding the buttons should be a right choice, this atlas has also the cursors, some effect icons…

My “suppositions” were confirmed on compare the performance loss between “Atlasing” on my skilltree and skillbar and Load 64x64 single images to items icons on demand (alike suggested on some Epic tutorials to inventory), when I do open my management window “NEVER” got a lagload on the skilltree, but is frequent go to my stash and see that some icons were still loading and filling their places. :wink: IF UMG/Slate is batching images it don’t likes me and is not batching to my game. LOL

Unfortunatelly to add new items to the game in the future, Epic’s approach on get an image/item is way better than change an ItemAtlas by version/expansion.

About being a “DataAsset heavyuser”, lol, I thought that if skills could be added/balanced through a table on editor instead of on multiple Blueprints this will further benefit on easy balance/expand the game, also as you can see the text fields are exposed, so while we don’t have yet Localization systems to assets AND I got no way to integrate UMG with the localization system was a nice workaround to anyone with access to the editor translate them to any language.

I don’t know if does makes sense, my first RPG game. LOL

Well, ya know, you can edit multiple blueprints at once ? ;p (go to AssetActions > Property Matrix)
Assuming that your spells have different formulas, it does not really matter where you store them, what should really matter is how easy is to edit it ?

As for localization (I say, if you don’t know English don’t play games!), but if you really insist… You can either store translation strings in separate source (like DataTable), and then from it simply pull what you need. I can only assume that at some point you will want to write auto generating tooltips, and don’t even bother with unique descriptions, anyway.

I honestly tried this approach for items at one point, I have created even item editor (lol), and it turned out to be waste of time (aside from the fact I learned how to create custom editor, and serialization). I’m better off, with using CDOs and object instances when needed.

You current approach would be good, if… you would generate AbilityMagnitude (like damage) outside (in something like excel), and you would import it as Curve Asset (or data table), and used it to evaluate current ability damage.
That I can say it could make balancing and expanding game easier. (though I personally also don’t like it).

I personally prefer to simply create formula directly inside blueprint, and then just edit defaults. Without touching excel and bothering with importing csv files.

I don’t plan to go all this further… I thought simply on watch players asking for nerf something on some forum, go to the table, index, reduce the Multiplier (or chances as described on the builtin system) and release a patch if the request makes sense. LOL

About localization, as you see “I’m” storing the Strings on the DataAsset plus with some gameplay info, about “auto-tooltips”, well, some fancy skill descriptions are a nice way to give tips from the game story, and to some RPG fans (imo) it’s a must have.

But back to topic… No one from Epic will talk anything about the Ability system to us :frowning: ? I’ll use the Puss in Boots again! LOL

Here is something.
I guess they are to busy working on it, to talk about something that can be utterly changed next week :D.

I’ve found this post on my searches, but thank you by the link.

Probably they’re using this system already on Fortinite, by what I’ve seen on videos so it’s “working”.

Don’t get me wrong, I’m not asking for info about how Fortinite guys used it (that’s Epic secret magic), but just the same “start” information to explore the system by our own (enable, build a simple skill, play it) OR a “we don’t plan on release anything about this before X”, “next months” is a heck of vague statement. LOL

Personally if any info about this will come:

  • Until March - Ok, let me take care from something else.
  • Until May - Hmmm… At least I could work on All animations, particles and sounds before implement.
  • On August+ - Better make my own SkillSystem now, implement the entire combat, and forget about this.

Doubts, Doubts, Doubts… :smiley:

I think that most of us share this “feeling”.
We could learn a new built in system (with docs) in more or less a week.
10-45 days to implement an own (varying on complexity).

I agree, I am just getting started in game development myself and I’m wondering how to do my skill system at the moment, or quite frankly the best place to start in general haha. But the skill system is absolutely my most interested catego0ry atm, but it seems there is no support for any built in functionality, and I am at a loss as to where to begin myself, with 0 knowledge in c++ at this point.