Able Ability System Info and Support Thread


Ah that video helps quite a bit! I’ll try and repro that locally.

Awesome! Glad the video helped. Keep me posted!

the function return value is the value :wink: not everything is a variable. so you found it right.
The dedicated server works fine as “client cancel” doesn’t refer to the server so player cant be the server. for that you have I think a second function “can be cancelled” - and this allows the server to cancel.
Most multiplayer games ends up with dedicated servers anyway :wink:

I have the same issue on my end though, and that bool is already unchecked.
It works if I use the montage version, but using the ability animation node the animation gets chopped up. I also made sure this issue is not due to my anim bp.

It might be related to an issue someone reported that has a fix going out with the 4.26 update. See if it still occurs when the next update hits.

@ExtraLifeMatt, a way to lock/freeze a task’s position on the timeline didn’t sneak into the update for 4.26, did it? I’d have so much <3 for something like that.

Locking? No, but it shouldn’t be hard to add. I’ll see what I can do but no promises.

It isn’t a pressing issue at all. It’d just be nice to have that extra layer of insulation from errant clicks.

While I’m here… I’m fiddling with something outside my typical wheelhouse today, and I’m sure I’m overlooking something obvious, but is a “traditional” first-person setup only possible by playing multiple animations on each mesh using a shared skeleton? “Traditional” here meaning “only-owner-see 1P mesh, owner-no-see 3P mesh” a la ShooterGame.

Using different skeletons throws up the expected warnings about skeleton/animation mismatches. Using the shared skeleton seems to be overriding whichever animation plays first with the second, regardless of slot setup or even discrete anim BPs, which is obviously going to cause problems in anything more developed than a very limited test scenario. I’ve seen mention of folks doing FPS with Able, so I’m fairly sure it’s just something I’ve missed in my experiments.

So I got some problems putting in animations.
I have a combo and the blending doesn’t work.

I’m using default blending settings, turned off “reset animation state on end” and my animation bp is using a “Blend by bool” node before the end output, which gets fed a bool using the “has ability animation” function.

Between combo attack 1 and combo attack 2, the idle combat pose is assumed, which then blends into the combo attack 2 animation.
Animation-wise, attack 2 starts with the same pose that attack 1 ends with, so blending should not be a problem at all.

Here is a gif that I recorded using the new animation insights:

The data is not on screen, but basically stated that nothing outside of the ability animation node was running. I also double checked to see if that bool was switching to ‘false’ for a frame between the two, which was not the case, so the animation BP is not the issue here.

Possibly noteworthy information:
I’m not using the ability node inside a normal animation state machine: I have a completely separate state machine called “AbilityStateMachine” with a single state called “Ability” with the ability animation node inside. I then cache that pose result to reuse it right at the end of the graph using the aforementioned method. It should not play a role, but since I don’t know specifics I felt like I should mention it.

I now added only the cached pose to the output pose, and also tried out doing it like it is in the tutorial, with the ability state inside the locomotion state machine. Same results.

I’m only using DynamicMontage for my montage, and everything is OK, you can try it.

Able doesn’t care about Skeletons, but it doesn’t know which skeleton to use if you somehow have multiples - so it tries to play it on all on them. So yes, in that case you would need a shared skeleton. I can look at a way to try and allow logic for both but I fear that might be a bit of a rabbit hole and make the task too complicated for people who don’t use multiple skeletons.

The bug I reference would affect blending too. It’s a pretty nasty bug, I was shocked I didn’t catch it and it wasn’t reported sooner. If you want to apply the fix locally, you can edit AnimNode_AbilityAnimPlayer.cpp and paste the following method over the current one:

void FAbilityAnimEntry::UpdateEntry(float deltaTime)
  TimeAccumulator = FMath::Clamp(TimeAccumulator + deltaTime, 0.0f, AnimationSequence->SequenceLength);

The bug that currently exists is that the “+ deltaTime” was missing, so entries never progressed - which would screw up blending and a few other things.

I actually prefer the shared skeleton approach, I was just trying anything I could think of to get the distinction made, and I definitely wouldn’t suggest up-ending the system as is. Could the animation asset binding expose a hook to grab an anim instance override using the dynamic identifier, maybe? I could absolutely be wrong, but I’d guess if you’re digging in far enough to be binding the asset, you can probably manage an interface call for which anim instance is gonna play it.

I implemented that fix as you suggested, however, that is making my animation play twice as fast. It also didn’t fix the blending issue. You probably implemented that missing delta time elsewhere already as it wasn’t progressing properly, so now it’s added twice. That’s my assumption anyways.
I’m curious how that has gone under the radar for so long? Aren’t people using the ability animation node for combos? Or for anything really?

Just not using an option is not a good… option. I’d rather help fixing it.

Yea, looks like 4.25 / 4.26 update that value elsewhere - which is why you see it going twice. Interesting. So the original way was correct, I wonder if the guy that reported that bug is using an earlier engine version. I’ll double check with him.

You may want to put your branch just a bit before your Ability actually ends, so you never leave the Ability Anim state in your Animation Blueprint. If you queue up the next animation, your “Has Ability Animation” bool should never return false until the 2nd animation is done.

My branch is already set up like that, and it never evaluates to false after the first attack has started.
Even plugging in only the ability anim node into the anim BP results in it, so the idle animation is not even considered. It appears to be the starting frame(s) of the first attack (which starts from the idle).

From my perspective everything is set up correctly, just the blending is simply put…broken.

Hello! I’ve been loving ABLE so far! I saw a reply earlier stating it was easy for ABLE to hook into existing Stat systems, like AttributeSet from Unreals GAS.

What is the best way to do this? Should I be including “AttributeSet.h” into “ablAbility.h” or “ablAbilityComponent.h” or something entirely different? When I attempted this II ran into issues with the compiler, where it could not find attributeSet classes or "cannot open source file “attributeSet.generated.h”. Am I missing a step here?
Example - #include “…/…/…/…/…/Runtime/GameplayAbilities/Source/GameplayAbilities/Public/AttributeSet.h”]

My goal is to utilize curve tables for unique abilities and having that attached to my Able ability blueprints seems like a great method. So far it looks like curve tables are heavily interwoven within the GAS/Attribute system and since I’ve been running into problems exposing that to the able system I am at a loss for how to progress.

What would be a better method of extracting data from a curve table into the Able system?

The code looks correct, but I have things in a lot of pieces right now for the upcoming update, so I can’t verify things at the moment. I’ll schedule some time to look at it this weekend. If you have a demo project or whatever, that shows your setup and the issue, you can submit it here Dropbox - Submit files and I’ll use it to verify things or find what’s going wrong.

Uploaded, it’s called “AbleBlendingBug.7z”.

I set it up so you only need to press Play and do one left click, the branch will automatically trigger.
The AnimBP has only the ability node feeding into the output pose. One bit of info: I’m also extracting root motion from those anim sequences instead of montages only. I don’t think it should matter here but I felt I should point it out regardless.

Also, Ability 3 and 4 were migrated too, but only 1 and 2 are relevant here.

Perfect! I’ll let you know what I find.

Sounds like your missing a module reference somewhere. I don’t use GAS so I can’t help you there, but there should be plenty of posts on how to properly enable GAS on the forums / youtube / google.

Once you have that, you can just reference those values when you go to calculate cooldown, damage, or whatever in the Ability Blueprints. You don’t need to add any includes or modify Able’s code in any way. Able will just ask “What should this Cooldown/Damage value be?” and that’s where you can do whatever logic and reference GAS if you want.