Combat Component {{ currentPage ? currentPage.title : "" }}

Since this Framework has combat in it, there is no doubt a combat component. In reality, the functions here are extremely minimal where it only sets and gets stuff mostly, as you can see below.

The combat component relies on Attack & Defense Properties for Attacks. Each Attack you wana deal, like a swing of a sword will require special properties or variables that you might be using it later to perform a hit reaction. you will also need it to calculate or apply more damage to a specific stat/attribute you own. say you have a greatsword in hand and it does base damage of 50, but sometimes you want to add crit to it or a multiplier based on a buff the player owns. all that is done inside the “BP_BaseAttackProperties”

————————————————————————————————————————————————————-

  • BP_BaseAttackProperties

you will need to tag this property with a proper name so you can actively use it when needed, it holds info that is based on the condition of the impact, type of impact , amount of damage to what type of impact, buffs/debuffs and influencing the damage to apply to each attribute based on that impact.

To help simplify the need of a whole class, here is an exmaple: a sword swing have a type of swing direction to be taken into account, so for that we will create a new variable called a swing direction like shown below.

a question might rise, do I need to set a new class for every swing direction ? The answer is obviously no, otherwise you will end up with many different classes that all do the same thing except a variable change. so how do we use this ?

Attack properties are usually assigned on the trace you will be performing, I have prepared a notify for you to use called “ANS_Trace”. Inside that notify, you will be assigning an attack property.

if you pay attention to the picture above, you will see the variable “swing direction” exposed for you to modify along with the shown variables from the other picture. with this you can have unlimited swing directions from One class only.

another example is Grab/Assasination, those rely on an animation to perform based on the type of target hit in addition to syncing them both infront of each other, etc. just like we did with swing, i also made a grab property.

The type of montage that will be performed on both characters if the required attack landed BASED ON the hit target. saw you don’t want to perform the grab on an AI that is not included here, you can do that with this.

this method only applies on animations running, but what about arrows or projectiles ? they dont use animations to deal damage right ? yes, for that you need to manually create the attack property as well as the trace like shown below:

for the picture above: a projectile is usually an actor that is fired at some point, for that actor you need to create a trace and assign its properties like a tag and mesh info to perform the trace, after that I am toggling it and creating a property and assigning it to that trace.

Long story short, new type of attack that will result on something new ? create a new attack property and manage it from there without adding a huge number of classes and if conditions.

————————————————————————————————————————————————————-

  • BP_BaseDefenseProperty

this is more simple in concept than attack property but does more work in reality. this is what happens when an attack is received. This is where you modify the received damage amount, determine the type of impact, hit /block /deflect.

This works hand on hand with the states and abilities to determine the hit result type. this is character dependent, meaning you mostly need to create a new type of defense property for every type of character that behaves differently based on its design. you can extend/modify/ add/ remove however you like without effecting other characters, by creating a new class for every type of enemy. for the overview video you saw, i only created one defense property for all the enemies you saw.

How to specify it for every character ? simply do this shown on the side.

{{{ content }}}