Able Ability System Info and Support Thread

So, I wanted to give a bit of a background / roadmap / status update on Able 3.0

[SPOILER]

Every new year I try and update Able with some large change that came out of feedback from the previous year. My own projects, which I use Able on, have recently moved more towards crafting AI behaviors, so I’ve also wanted to wrap in some things I’ve seen to help quickly craft AI behaviors without leaving the Ability Editor.

For this year, I came up with these priorities.

  • Editor flow (particularly around setting the preview asset).
  • More tools to help craft abilities and test them in the editor (specifically around AI abilities).
  • More Movement based abilities (pretty consistent user request).

So, here’s the current roadmap / status report:

  • UI Refresh

  • Able is getting a hefty UI update. While some elements won’t change, the Timeline section and Toolbar are both getting updated art assets and layout changes to be more explanatory at a glance. Icons will be getting looked at as well (by an honest to God artist and not just my horrible programmer art).

  • Progress : **Ongoing **(lots of iteration with the artist right now).

  • Target Actors Added

  • In order to better test your Abilities, you can now place one or more “Target Actors” which is simply an Actor asset you can point Able to and spawn 1 or more in the scene, much like the Preview Asset. Want to test an AOE? Spawn a bunch of Targets around your Preview Actor and watch what happens. You can reset the Target Actors back into their initial state/position at any time (or automatically after each ability play). You can also force your Ability to target a specific Target Actor while in the Ability Editor via a simple drop down list.

  • Progress: Completed

  • Transform Tool Support

  • Translate / Scale / Rotate both the Preview Actor / Target Actors using the normal transform widget. This makes placing Target Actors and moving the Preview Actor trivial.

  • Progress: Completed

  • Move To Task

  • A simple task that moves one actor towards another (using the Navmesh or simple physics).

  • Progress : **Ongoing **(Still investigating all this entails and how to properly expose all those parameters in the best way).

  • Jump To Task

  • A jump/leap task that allows one actor to jump towards another. Physics driven.

  • Progress: Ongoing

  • User Task Color Customization

  • Users can now modify the colors for Tasks in an Ability. This is per Ability (not global) as different designers may prefer different color schemes (especially in the case of color blindness).

  • Progress: **Ongoing **(Should be a 1 line change, just need to put it through its’ paces).

  • New Preview / Target Asset Selection

  • Instead of the previous, rather ugly, modal dialog; there is now an Able Editor setting which contains the list of valid classes for each asset (Preview Asset Classes, Target Asset Classes). The Ability Editor toolbar has a simple drop down list that will filter your assets based on those classes and you can select the appropriate asset.

  • Progress: Completed

  • Investigate using Delegate Bindings (e.g. UMG’s model) rather than Function Overloading for dynamically providing parameters.

  • This was a very interesting user request. This would do away with lots of the various “OnDoSomeEvent” model I had been using and switching to using something more along with the binding system UMG does for all it’s properties (see Property Binding | Unreal Engine Documentation ). There’s definitely some pros and cons here (including one big con that it will likely be incompatible with previous Able versions unless I come up with an upgrade script to transfer existing logic to the new paradigm), however it would basically allow users to override most fields without requesting me to add some callback - I’d love to hear any feedback while I continue my investigation. Very likely that this will get pushed out to the next update so I can fully investigate it.

  • Progress: OnGoing

[/SPOILER]

So, that’s the peek behind the curtain. I think people will really enjoy this update once it’s ready to go out (no ETA, lots of things are still in flight and I want to really hammer on this before it goes out).

Hi, I’m making an ability that spawns a projectile actor that homes on my targeted actor. I have everything working, except I would like the damage to be applied when the projectile collides with the target actor instead of once the projectile is spawned. What would be the best way to go about making the damage wait to be applied until the collision occurs?

I want to know how good/useful this plugin would be for making an over the shoulder third person action shooter with a level system (Think The Evil Within 2 but with stats and a level system). First question is how easy is it to integrate into a project that has assets/BP/Animations/levels/etc already in it or would I have to start from scratch? Since I’m a solo dev with absolutely no budget I won’t be able to buy the plugin until my games prototype is finished so I can apply for 2 (hopefully) 50k dev grants. Limb damage? I mean as dynamic damage to certain parts of an enemy’s body ( for example you shoot an enemy’s hand the hand falls off and only does 8 damage to the enemy’s 500 HP). How janky is gameplay made from this plugin out of the box? (Without tweaking). Does this work for character Interaction? (Pushing buttons, picking up stuff, activating UI such as diegetic UI, etc) How complex is it to learn? I’ve tried Character Interaction from the unreal marketplace but it’s super complex, not as documented as it needs to be as well as being janky. The big broad question is would I be able to make a complete game system (Shooting, different weapons/weapon types, movement system/basic vaulting and climbing up ledges, different types of enemies, swimming, I don’t mean like animation, texture, 3D model, jank I mean just how the system works) using this plugin? This has been a ton of questions so sorry I’m just confused on what exactly this plugin is for.

Can you explain custom task better please?

You could just use the “On Actor Overlap” on the Projectile to apply damage (or even run an ability that plays some effect and applies damage there). Basically just treat it like a normal projectile.

Custom Task is a pure Blueprint driven task that behaves like it’s C++ counter parts.

You can override / use various BP methods to build the task:

  • OnTaskStart is called when the Task begins. You would want to do any task setup here (You can use GetActorsForTask to get a list of all actors your task should affect according to how the user set it up in the ability editor). If your Task is just a single frame, you’d do the logic here as well.
  • OnTaskTick is called when the Task is running.
  • OnTaskEnd is called when the Task is completed. You would do any clean up logic here, if needed.
  • IsDone is a logic check, that by default, just checks if the task time has been met but you can add special logic.
  • IsSingleFrame let’s you return true if you want the task to be a single frame (so OnTaskTick won’t be called), or if it’s a multi-frame long task.
  • GetTaskRealm let’s you modify what realm you want the task to be (Client, Server, or Both).
  • CreateScratchPad let’s you return a UAblCustomTaskScratchPad based class that you can use to store any state information (various variables, actors, etc). These scratch pads are allocated per ability execution.
  • GetTaskCategory is what category you want the task to appear under in the Ability editor (you can use ‘|’ to do sub category: MainCategory|SubCategory).
  • GetTaskName is the name of the Task in the Ability Editor.
  • GetDescriptiveTaskName is a more elaborate version of GetTaskName that is built at runtime when the Tasks are placed in the Ability Editor (e.g, “PlayAnimation:<animation name>” is the descriptive name).
  • GetTaskDesciption is just a one or two line summary of what the task does. This appears in the Task selection dialog at the bottom of the window.
  • GetTaskColor is just the default color you want to assign to this Task.

Able isn’t going to do movement / pushing / etc for you. It’s more a tool you can use to help tie animations / sounds / particle effects / damage all together into a single discrete asset - which we normally just refer to as “Abilities”. While you can certainly do a shooter with Able (I even did a quick tutorial using Shooter Game, you can see the tutorials here ). I will say your goal is rather ambitious, and no one tool is going to help you cobble it together. Instead, you should take things step by step. Follow some YouTube tutorials on building a 3rd party action game, add features (vaulting, climbing, interacting with buttons, etc). Don’t try to run before you can walk. Instead, eat the elephant bite by bite.

Thanks will look into it after work. Just need to sort out what i want to do. Plans all over the place hehe

hehe Another thing i noticed
in Graph in able, cant use Get all actors of class! ><

That is by design because Abilities aren’t level blueprints. You shouldn’t be using Get All Actors of Class. You instead want to use “GetActorsForTask” which will return the actors your Ability has targeted.

Right… So i can output actors into character bps. Lol making a supernatural game atm. Got so much involved. Its based on supernatural tv show but not got main characters. Its all based around datatables. Got most of it to work like enter devils trap if a demon it will stun them until it passes a d&d style check behind scenes on tick. Spirits cant leave the area unless pc or npc picks up item holding them there and can stay around nav mesh then functions like haunt can do stuff. Complex stuff but getting things to work in development level. Demons in non possessed beings atm is swirling tornados of black smoke and can pass a dice roll to possess pc and npc. Fun project but based around char bp and npc bp.

Hey regarding the other problem montages changes when selecting animations but not anim seq. No biggy continue your 3.0 update its like problem solving ng everytime haha detective jesse haha cant wait until you release the new update

Hi ,
I am using a classic mmo style control setup for my game, and I was wondering what you would recommend me doing to make a skillshot that is created at the location of the mouse cursor, mainly regarding the targeting. I have already made a system that creates a decal of the size and shape of the ability I want to cast, and the original idea I had was to basically pass the location of the decal when the player left clicks to the Able Ability, then the ability casts at that location and damages targets based on a collision query. I feel like I am over-complicating this, Is there a better way you can think of that I could do this?

Also, thank you for putting the time into making this plugin, it has been very useful for me so far :slight_smile:

Using UE 4.20.3 with latest plugin - I’m noticing that every time I recompile my custom task, those tasks already deployed in existing abilities get broken. They turn grey in the timeline, lose their visual representation/name, and I have to remove them and re-add the task. Worse still, if I close the project without replacing all the broken tasks the project crashes on load until I remove the ability asset referencing said task. Any idea why this would be happening - I can’t imagine it’s intended behavior?

Yea, I’m looking into fixing that as part of the 3.0 update. UE isn’t very good at replacing the old BP class with the new one. I may just have to iterate over all abilities and replace those references manually.

EDIT: Code written, going to start testing it while continuing on 3.0.

Hi
​​​​​​
How far are you in 3.0?

Still going back and forth on the UI rework, but it’s making some progress. It’ll be worth the wait.

Aww i wont do too much yet until its done. Dont like restarting stuff.

All your data will still work, there shouldn’t be any need to restart or such. 3.0 will just plugin like every other Able update.

ahh thats ok :slight_smile: just that you said new features gonna be added :slight_smile: the move to thing will be good.
Are you gonna have an Input in blueprint or am i gonna still have to call datatable in all the able BPs?
made a D&D style system where it random generates rolls on stats if it suceeds to hit or not.
Might do it all in character BP (NPC and Characters share same parent class) So i might call all abilities in parent class then call able when success and pass damage out in parent class too.

Awesome, thanks for the update!

I have another question: Is there a way to get the current phase of a task? Being able to get the current phase of a task from within the task itself (custom tasks) would be nice, as would as being able to read the current phase/start/end times for each task from the Ability itself. Basically I’m looking to drive other logic using the phase from a tag placed in the ability.

I’m still finalizing all that, but there will be a way for you to dynamically pass in a position (or Actor) at runtime.