Able Ability System Info and Support Thread

Thanks :slight_smile: Yea, it’s stupid easy and pretty powerful.

BTW, I didn’t forget about your request do to a charged Ability video. I just need to find the right assets since that’s something you normally have custom animations for. I might do a simple top down shooter example and combine that with something like the data driven systems. Still thinking on it.

Version 1.2 Notes (submitted to Epic, should be released later in the week).

  • Ability cooldown can be data driven at runtime by overriding the GetCooldown method (which by default just returns the hardcoded BaseCooldown value). The v1.0-1.1 GetCooldown method is now called GetBaseCooldown.
  • Tasks now have a Verbose option which will print info to the log (and optionally to the screen). This option (and logic) is automatically stripped for Shipping builds.
  • Various settings have been added to allow adjusting the behavior of the Verbose output (you can find them in your Able Plugin settings).
  • There is now a ā€œCustomā€ Targeting option which will call into the Ability’s FindTargets(…) Blueprint method which you can use to populate Targets using your own logic (or copy results from your own targeting system into Able).
  • Removed a debug warning statement in the Play Montage call.
  • Fixed an issue with dependencies and non-looping tasks not getting executed properly.
  • More non-unity build fixes due to missing headers.

There’s an easy way to B.S a animation for it.

  • Just duplicate one of the strike animations and open it in persona,
  • go to the frames when he’s pulling back his weapon before the strike,
  • then delete all the frames after that pose, and all the previous frames (leaving yourself maybe 5 frames to loop),

so you just have a looping animation of him shaking as he holds his weapon back.

It won’t be clean, but it will get the idea across. :slight_smile:

Small note. V1.2 now has a custom targeting mode for you to pass your own set of targets into Able. This came as a feature request from someone who wanted to hook their own Targeting system into Able.

Ahh, I haven’t played with Persona too much so I didn’t know you could make animations with it. My programmer art is terrible, so I tend to avoid trying to make assets myself - but I’ll see what I can do.

Updated all the documentation for V1.2, you can read about the new Verbose option here.

v1.2 is now live! As always, please let me know if you run into any issues.

If you have a moment today, I’d greatly appreciate your vote in this months Community Interest Poll!

Woo! Second place on the community interest poll. Thanks for all your votes and support! I’m working on a damage video which I hope to have out soon-ish (probably this weekend).

Happy Easter!

Newest video is up!

Just a heads up that Able is Featured today due to winning 2nd in the March Community Interest poll. Thanks again for your votes!

Version 1.3 has been submitted to Epic!

Notes below:

  • Targets can now be copied when branching to a new Ability (Customer Request, keep them coming!)
    
  • Able Ability Icon no longer shows the default Blueprint Icon when selecting it from the asset context menu in the editor.
    
  • Fixed an issue where Branch Ability wouldn't properly print out it's execution in Verbose mode if it immediately succeeded.
    
  • More non-unity build fixes.
    

Howdy, I’m having an issue playing an animation using the Ability Animation Node, on an ability that IsLooping, and Channeled indefinitely.
(The idea is to have an ability perform a block with a corresponding block_loop animation)

I followed the tutorial listed here and that works,
but If I try to do a Layered Blend Per Bone, or play any other animation that isn’t the ā€œPlay Ability Animationā€ node, I always get a pop/stutter of the final animation.

Am I doing something incorrectly?

I’d be curious to see your Animation State Machine as that is likely where the pop is occurring. However, there’s another approach you may want to try that I personally use in situations like the one you described:

When doing Looping animations (blocking, jumping/falling, etc), I’ve found the best way to control those is to break out your animation in 3 separate clips (start, loop, end) and setup a simple flow in your Animation State Machine like this:



Check some state -> Transition to the start animation -> Once that animation is done -> Transition to the looping Animation -> Loop until the State becomes False -> Transition to the end animation.


Which looks like this in the actual Animation State Machine/Blueprint (in this setup, it’s for a greeting animation which has a start - lifting the arm, a middle - looping waving animation, and an end - lowering the arm):


(Note the IsGreeting boolean on the starting transition rule which is just read from the Character during the Animation Blueprint’s update).

Start to Loop Transition Rule:

Loop to End Transition Rule:

Then all you have to do in Able is use a Custom Event Task(or on AbilityStart/End), and simply set the state on/off on your character which is then read by the Animation blueprint and reacts accordingly.

Ideally I’d love to data drive this aspect (probably through a custom Animation State Machine Node like Play Ability Animation Node), but the use cases have been pretty limited/special case which you normally want to customize things anyway. Still, might be something fun to look into adding even if it isn’t necessarily Able specific.

How can i do a sailing system in able? i’ve seen many sail boat/ship project, but any with a character moving the helm like many people did with their driving systems/car controller (Assassins creed 4 Black Flag, like. in third person).

PD: i know is quite complex, but just the sailing, without the physics, etc… the real question is how can i sail a ship?

Sailing is effectively it’s own game in Black Flag. Rather than controlling the player, you are controlling a ship and passing in various data to your animation system so he spins the wheel properly, etc. That requires its own code/systems, something like that is outside of Able’s scope. Although once you have the ship controls all setup, you could use Able to fire Cannons and other things. :slight_smile:

Apologies for the lack of thread updates, I was out at a developer conference this week. Looks like v1.3 is now live. Let me know if you run into any issues and, as always, thanks for your support!

Hi ,

I have some questions about using the plugin. I have a Blueprint/C++ project for a game that I’m working on for my studio. I’ve downloaded Able, copied the plugin folder to my project’s plugin folder, and enabled it. I’ve created some DataAsset classes that our designers can use to create data assets for items and what-not. What I’m wanting to do is for our designers to add activated and passive abilities (created with Able :)) to a data assets for an item (or whatever else I add it to), and I can’t quite figure it out. Unfortunately, your C++ docs aren’t up yet. Here’s what I’m getting at:


#include "Engine/DataAsset.h"
#include "ablAbilityBlueprint.h"
#include "ItemData.generated.h"

/**
 * 
 */
UCLASS(BlueprintAble)
class SAVAGEDAWN_API UItemData : public UDataAsset
{
	GENERATED_BODY()

	public:
		// Property for the name of the item
		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General")
		FString Name;

		// Property for a description for the item
		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General")
		FString Description;

		// Property for an icon to represent the item
		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General")
		UTexture2D* Icon;

		// Property that indicates if the item is consumable
		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Usage")
		bool IsConsumable;

		// Property that indicates if the item is equippable
		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Usage")
		bool IsEquippable;

		// Property that contains a list of activated abilities
		UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Abilities")
		TArray<UAblAbilityBlueprint*> ActivatedAbilities;
};

Currently, this doesn’t work. How can I design my classes so that designers can add Able abilities that they’ve created to them?

Thanks

Hey @danhin

Try using:



TArray<TSubclassOf< UAblAbility> > ActivatedAbilities;


Since they are simply classes under the hood. I’m not sure you can use a UDataAsset to point to a runtime UObject, but the class info is serialized and should be fine. Looking at other examples in the engine, that seems to be how they work around this.

Also, Version 1.4 has been submitted:

  • Fix to various Task fields not being modifiable in 4.15.x (seemed to only affect object references).
  • Fix to OnAbilityStart not being called properly.
  • Fix to ā€œRecently Pressedā€ Branch Condition not working properly (now you can specify a time window for what recently pressed means).
  • Able now is initialized in the PreDefault phase to avoid race conditions with Actor initialization.

Hi @ExtraLiftMatt,

Thank you for your response. What class should I use to refer to an ability asset that’s created with the plugin? In other words, the designer creates an ability in the content browser and wants to add it to a data asset.

Thanks.

Use:



TSubclassOf<UAblAbility> MyReferencedAbility;


That’s actually how the Play Ability Task works under the hood. Since they’re all classes under the hood, you can just reference your Ability that way.

Hey ,

Wanted to report a bug with the ā€œMust Be Recently Pressedā€ flag on a Branch Task’s Conditions.
I setup two abilities that call each other, and bound them to the left mouse button, and when I hold it, it calls each ability repeatedly.

Here’s some screenshots of my setup:
character_input_setup
Ability 1 Setup
Ability 2 Setup
Ability 1 Custom Event
Ability 2 Custom Event