Free YouTube Transcribe

Video transcript

Smart Enemy AI | (Part 22: Boss Fight Final) | Tutorial Unreal Engine 5 (UE5)

Ali Elzoheiry · 6,142 words · 28 min read

Want to search this transcript, jump the video from any line, or download it as TXT, SRT, or VTT?

Open in the transcript tool

Full transcript

Intro

0:00welcome back everyone to part 22 and

0:03this is the last part in this boss fight

0:05and it's my favorite part because uh

0:07this is where we're going to add the

0:09really cool and unique boss abilities

0:11and attacks and we're going to bring it

0:12all together at the end and fight our

0:14boss to see how everything looks like

0:16when it comes together so I hope you

0:18enjoy it and let's get

0:21[Music]

0:26started all right now I want to add yet

Boss Jump attack

0:29another attack we're going to have so

0:30many attacks for this for this

0:32boss uh and again I have an animation

0:35for it and this time it's a jump

0:37attack and it looks like this boom it's

0:42pretty fast so you see the boss jumps

0:44and then does the lightning

0:47smash so let's go ahead and add

0:50it um we already have a jump attack we

0:53did for our melee enemy so we're going

0:55to be doing the same thing we did

0:58there so

1:00custom event let's just copy this one uh

1:03and call it jump

1:07attack uh and we are going to copy our

1:10bpc attacks and call jump attack jump to

1:15attack

1:16Target uh no sorry this is not the right

1:18one it's

1:20uh is it the right

1:23one

1:25no what was it

1:27called oh it was called long range melee

1:30attack Okay jump to attack Target is the

1:33helper okay so this is long range melee

1:39attack and uh we make attack info this

1:44is our Target and it's going to be the

1:48axe jump attack and damage

1:52info now this is going to be an

1:54interesting one because if you see here

1:58this has a jump and AOE slash so the

2:01Montage notify that does damage is an

2:03explosion it's an AOE

2:05slash but the uh long range melee attack

2:10only supports slash not AOE slash so

2:14we're just going to add it here so we're

2:16going to add a new PIN call it AOE

2:20slash and on AOE slash just do the AOE

2:25damage and radius um let's say

2:31300 by default and the Damage info just

2:35get it from

2:37here oh you can actually get it from

2:39here to be a bit

2:43cleaner all right um so now we support

2:47AOE slash which we have here we just

2:50need to pass our damage info let's say

2:53it does 20 damage type explosion and

2:58this one can't be blocked can't be be

2:59parried and should force interrupt

3:02usually our explosions do these three

3:04things and hit

3:08reaction all right so as usual adding it

3:11to our boss attacks real quick here

3:14let's call it jump attack back to

3:19our uh attack based on name function

3:22inside our BTT attacks we

3:25call

3:26jump

3:28attack

3:30plug it in plug in the attack

3:32Target I told you it's was going to look

3:34like spaghetti soon but still

3:37manageable

3:39um all right so now that we have this

3:42attack um let's just uh demo it so I'm

3:45going to unplug all the other attacks

3:47and let's just call let's copy one of

3:51these let's call jump attack let's call

3:54it jump

3:58attack all right so let's start off a

4:02bit further from the enemy somewhere

4:05here and he's going to

4:07jump see that he didn't quite reach me

4:10if I'm close he's going to reach me but

4:13if I'm further away let me go a lot

4:17further actually let me start already

4:21let's start him somewhere here and I'm

4:24somewhere

4:28here

4:30yeah he's not going to quite reach me

4:31and he's also jumping pretty slow for

4:33this kind of attack let me explain

4:36why um if I go to my bpc attacks and

4:39look at this jump to attack

4:41Target uh in the suggest projectile

4:43velocity custom Arc there is an arc um

4:47param so how steep should the arc be now

4:50if I did make this something like 0.9

4:53five like very high number if you look

4:56here it says between Z and one where one

4:58is directly upward Ward uh and sorry one

5:01is directly towards the end position and

5:03zero is directly upwards so 0.95 is

5:07almost straight at the Target and let's

5:10see how this looks like so again if I

5:12start playing from further away say I

5:15throw a projectile at him so he jumps at

5:17me from further away now he reaches me

5:21very nicely but if I'm close to

5:24him it looks pretty

5:27weird right especially when I'm

5:31moving yeah this is not what we

5:34want so uh for this case I want to check

5:38if the boss is close to me then have a

5:41smaller Arc if he's further then have a

5:43larger Arc so we're going to do a little

5:45bit of math here um uh and we're going

5:48to use a bit of math nodes uh but it's

5:51going to make sense uh when it all comes

5:53together so this Arc Pam first I want to

5:56get distance

5:57between uh the owner so let's say get

6:02distance two from the owner oh and my

6:05cat's in the way

6:08again uh to the uh attack

6:13Target all right I'm going to get this

6:15distance and I'm going to normalize it

6:16so I'm going to call um normalize to

6:19range and what this does is you see an

6:22example here if you normalize 20 to the

6:24range of 10 to 50 then that means it's

6:270.25 so it basically normalizes is a

6:29certain value between two other values

6:32and the two other values that I'm going

6:33to use is uh 400 and

6:37800 so this is sort of like my minimum

6:40and maximum distance anything below 400s

6:43use um

6:45.5 as the arc Pam and anything above 800

6:49use

6:500.94 but how are we going to do that

6:52we're going to need to use another node

6:54called lurp or linear

6:58interpolate um and then based on this

7:00lurp nodes uh oh sorry before we lurp we

7:02need to clamp this so I'm going to

7:05clamp again sorry clamp float to zero

7:09and one meaning that I want these values

7:11to never go below zero and never go

7:13above one right and then here we're

7:17going

7:18to do a

7:21lurp where this is the alpha so alur

7:24just picks a value between A and B based

7:27on this so if it's zero it picks a if

7:29it's it picks B and we're going to plug

7:32this into our Arc

7:35peram all right so if it's zero pick 0.5

7:39as the arc if it's one pick

7:420.94 so that means if the value if the

7:45distance of the target is less than 400

7:47then the arc will be 0.5 if the distance

7:49is greater than 800 then the arc will be

7:520.94 now you can of course do it with an

7:55if condition but yeah I found this to be

7:58um also uh quite flexible so now let's

8:02test it out if I'm further away he does

8:05the really long jump and if I'm closer

8:07he does the sort of smaller

8:11jump all right yeah I think this looks

8:13good and this is also very useful for

8:15our melee enemy because if the melee is

8:17melee enemy wants to is usually closer

8:20and the boss is usually further

8:22away all right now uh this jump attack I

Randomly choosing between jump/quick attack

8:25want it to be actually part of the throw

8:28axe but uh a chance to pick one of them

8:32so like we have here a chance to do

8:34combo one or combo two at the end of the

8:36throw axe uh I want there to be a chance

8:39also to either do the quick attack well

8:41teleport plus quick attack or a jump

8:45attack so let's do this as well so we're

8:48going to have a selector here and we're

8:51going to select either the quick attack

8:54or

8:55the we need to call boss

9:00attack and do

9:02the jump attack with our attack Target

9:07let's also call it jump attack and we're

9:10going to add our chance decorator on it

9:13so look for chance and it's going to be

9:1650/50 as well so 50% chance it will do

9:18the jump 50% chance it will do the

9:20teleport plus quick

9:23attack and let's uh make the cool down

9:27also very low so we can start with it

9:29throw axe once throw axe twice and this

9:35one was quick attack so the player now

9:38has a choice between blocking or dodging

9:41because you can't block the jump

9:43attack see so now I have to really focus

9:46what animation the boss is about to do

9:49to know what to

9:51avoid great so one thing you notice is

9:54that the uh boss is still uh locked on

9:57me when doing the jump attack I actually

9:59don't want that because then it's really

10:01overpowered so I want the jump attack I

10:04I want this to be a sequence

10:07actually and the Chance is on the

10:10sequence I'm going to call this the jump

10:13attack

10:14sequence and before doing jump attack I

10:17want to clear

10:21Focus so that means that uh if I move

10:24away while the boss is jumping he he

10:25won't keep staring at he won't rotate to

10:28face me and that makes a bit easier to

10:30avoid otherwise it's really op you can't

10:32even uh evade it all right so this one

10:36was quick attack I was able to estimate

10:39that and I parried

10:41successfully what is this one going to

10:43be jump and I didn't I didn't evade in

10:47time okay let's try it

10:50again and jump all right so I I evaded

10:55but again a bit too early so this is

10:57where the Finesse or the skill comes

10:59into

11:00play there we go that was the right one

11:03so you see he didn't rotate to face me

11:05as I teleported away from

11:08him nice so this adds a lot of

11:11variability in the game play you know

11:13that the boss is going to do one of

11:14either and you have to really pay

11:15attention which one is coming so you

11:18know based on the animation what attack

11:20is going to happen but even when you

11:22know it's uh hard to uh avoid and that's

11:26what I call predictable but challenging

11:30all right now it's time to add one more

Ground smash AOE attack

11:32attack that we don't have yet or our own

11:34flavor of the boss attack of the ground

11:37smash attack uh so that's going to be an

11:39AOE attack but a much much larger one

11:42and let me show you the animation for

11:44that I think it's pretty

11:46cool uh ground smash yeah this

11:50one so the boss raises his axe and then

11:55after a few seconds he does this um like

11:58AOE attack and you can see there's a

12:00ring that denotes how big the attack

12:04is so uh to break it down um this just

12:08has a sound so again as I mentioned you

12:11should make sure that the attacks have

12:13visual cues audio cues the player should

12:15know what's coming so this one has an

12:18audio uh queue when the attack is

12:20charging up and then

12:22a animation and also a um an area of

12:27effect to show the player how big this

12:29attack is and then by time the player

12:31will learn the radius and learn to avoid

12:34it so let's add our attack to our

12:39boss again custom

12:42events ground

12:45smash

12:47input attack

12:50Target and we're just going to call um

12:54ground smash from bpc

12:57attacks ground

13:01smash

13:07make and we're going to see the axe

13:10ground

13:12Smash and we're going to have this do

13:15like I don't know it should do fairly

13:18large amount of damage and it's going to

13:20be explosion hit

13:23reaction uh can't be blocked can be

13:25parried um should force interruptible as

13:28well well and the radius now I I played

13:31around with the radius a bit to see

13:32something that matches the uh exact um

13:36um animation sorry the uh the VFX and I

13:40think it was about

13:421,100 which is a significantly large

13:46radius so then let's add it to our enum

13:49ground Smash and let's um add it to our

13:55attack task as

13:57well

14:00boss ref ground

14:05Smash and pass in our attack

14:09Target all right um let's test it out

14:13we're I'm going to unplug all of the

14:15attacks and we're going to test it out

14:17but first uh let's create a sequence for

14:20it um now this ground smash I want the

14:24the boss to only do it when he's close

14:25to the player so since it's uh the

14:29the closer the boss is to the player the

14:31further away the player has to run so

14:33then it's better to do it when you're

14:34closer to give the player a bit more of

14:36a

14:37challenge so first thing is uh we set

14:41Focus uh sorry first thing is sorry with

14:43The Decorator so uh we had a Blackboard

14:46key called distance to attack targets so

14:51only if the distance is less than or

14:53equal say 300 then you're allowed to do

14:57this um and you maybe want to also put a

15:00cool down node on it you know as you

15:02wish um and then the sequence is as

15:05follows um we do a focus on the attack

15:10Target and then we just

15:13call um boss

15:17attack and choose ground smash attack

15:20Target name it ground

15:24smash um yeah and that's about it for

15:29now let's look at it so if I'm further

15:32away he's not going to do it and he's

15:33not going to do anything because uh we

15:35didn't plug any other attacks okay but

15:38then as soon as I get close to

15:41him then he does this and boom I got

15:45damaged so again now I need to run away

15:49run

15:49away very nice let's see if I'm just

15:54within the

15:55radius nope I didn't get hit great so

15:59you can see that uh the boss follows me

16:01while I'm doing this so he keeps focused

16:03and uh then it's clear that he's going

16:05to do this

16:07attack very

Making the boss invincible during certain attacks

16:10nice now one thing uh you should also

16:13note is that this attack um I can uh I

16:17can't interrupt it right but I can still

16:20damage the enemy during this attack

16:23which means that I can also Force

16:25interrupt the

16:27enemy so if I'm doing my

16:30combo I'm forc interrupting him uh and

16:33also one thing to note is that this

16:35ground

16:36smash

16:39um uh is by default non-interruptible

16:42but I want the enemy not just to be

16:45non-interruptible I want him to be

16:46Invincible means he doesn't take damage

16:49and we actually do support invincibility

16:51in our bpc damage system um but we

16:55haven't used it yet so let's start by

16:58using it

16:59um and let me show you in our damage

17:02system so we have here in um sorry in

17:06the uh bpc damage system we have

17:08something called is invincible and it's

17:10used in take damage to see if we are

17:12invincible or

17:13not so uh in our BPI so this is the

17:17interface for our damageable actor I'm

17:19going to add a function just like set is

17:21interruptible we're going to set is

17:26invincible and it just takes a single

17:29value um which is a Boolean just like

17:33the interruptable one as

17:35well and then if we compile we want to

17:38implement this on both our player and

17:40our base

17:41enemy so go to your enemy base under

17:45interfaces you will see the new function

17:47set is

17:49interruptable uh sorry set is

17:51Invincible right here let's put it next

17:53to the interruptible one and it does the

17:56same thing gets our damage system system

17:59but instead of setting interruptible

18:01just sets is

18:03Invincible to this

18:07value great and we're going to copy it

18:10and do the same exact thing for the

18:17player excellent now we need a behavior

18:20tree task for it so go to your behavior

18:22tree new task blueprint base put it in

18:25tasks and call it BTT set is

18:33Invincible we're going to event receive

18:36execute AI going to get our pawn and set

18:40is

18:42Invincible promote this to a variable

18:45just call it value that's

18:47fine make sure to click the I icon and

18:50once we're finished finish execute also

18:54a very simple

18:56one now in our ground smash sequence

18:59what we want to do is set is Invincible

19:03to true so that the boss is Invincible

19:06can't take damage can't um uh be hit and

19:11can't be interrupted of course if you

19:12don't take damage he can't be

19:13interrupted and then once we're done

19:15with the ground smash we set it back to

19:17false now the thing I like about this is

19:20that there's a very obvious visual cue

19:23that the boss is Invincible which is

19:25this floating red ring around him so I

19:27can damage all I

19:29want I can even do the this smash that's

19:33supposed to uh interrupt or Force

19:36interrupts but it's not doing anything

19:39because they're invincible and that's uh

19:42that's the point of having this all

Floating platform ability

19:44right now I want to create my favorite

19:46attack um and for this attack uh I

19:49already prepared a prop uh that I'm

19:52going to use here I have a folder here

19:54called props and I have this BP floating

19:57platform

19:58so it's just a circular mesh with the

20:01same effect that we have on the ground

20:02smash on top of it uh and on the bottom

20:05as well now for this attack I'm going to

20:08have the boss float on this pillar and

20:11do sort of an AOE Trail um and this

20:15again you see a lot in boss fights where

20:17they teleport to a place where they're

20:19unreachable and invincible and then do

20:21some environmental damage or start

20:23throwing things at you uh so I think

20:25this is going to be pretty cool let's

20:26take a look at how we're going to do

20:27that

20:29so first let me explain this floating

20:31pillar it's just this static mesh with

20:33these two effects on it and it has a um

20:38a function called start floating and all

20:41this does is it plays a timeline and

20:43moves from its initial zv value to a zv

20:45Value Plus 350 so it moves 350 up on the

20:49z-axis and then once it's done it calls

20:52um on float timeline finished and this

20:56is a start floating it has stop floa

20:58floating that does the exact same thing

20:59but in Reverse so it goes back down and

21:01then also calls on float timeline

21:04finished so this as soon as we begin

21:07play uh we call um start

21:12floating all right so now let's see how

21:14we're going to uh use it as part of our

21:18attack uh so if we go here to our

21:21boss um somewhere here I'm going to

21:24create the start and stop floating so

21:27I'm going to do a custom event call it

21:29start

21:32float and um the first thing this does

21:35is uh that

21:39um you know you can set the

21:41invincibility so I have here the damage

21:43system I can set is Invincible as a

21:46variable as well uh because I'm inside

21:49the the the um uh actor so I have access

21:53to this damage system so I can say that

21:55no matter what you do in the behavior

21:56Tree in this attack you're you're

21:58invincible so that's another way of

21:59doing

22:00it um and then uh what I want to do is

22:05uh

22:06spawn the floating

22:09pillar MVP floating platform uh and the

22:14spawn location I want it to be um below

22:16my feet so to do that I need to actually

22:18do a line Trace to find my uh the ground

22:22location so align Trace by

22:26Channel the start location will be the

22:29get actor location so starting from

22:32where I'm

22:36from and ending to where I'm from

22:40multiplied

22:42by one on the X one on the Y so don't

22:44change the Y don't change the Z and just

22:46multiply it on let's say I negative uh a

22:49th000 on the Z so just do a line Trace

22:52straight down and find uh where you hit

22:55and where you hit that's the ground

22:56location so and that's going to be uh

23:00get the out hit break it and the

23:03location is going to be our spawn

23:05transform

23:07location we're not going to handle the

23:09case that there's no hit because we

23:11always know there's a floor underneath

23:13us you can if you want but I'm not going

23:16to all right so this is the start float

23:21and um then we want also to bind so

23:25assign on float timeline finished so

23:30once on once the timeline reaches its

23:32end that means the platform reached its

23:35peak uh we want to call another event

23:40dispatcher why because we're going to

23:42call this from Behavior tree so we need

23:43to know when it starts and when it

23:45finishes so we're going to have a new

23:47event dispatcher here I clicked on the

23:48plus call it on start uh sorry uh on

23:55float um height reached

23:58something like that and we're just going

24:01to call it

24:06here oh and we also want to create a

24:08variable for this so we want to promote

24:10this platform to a variable so call this

24:13the uh floating platform ref or

24:23reference oops all

24:26right great and that's a start float so

24:30now we want custom event called stop

24:33float so when they land down so when

24:36they land the first thing we want to do

24:37is check first if uh get this floating

24:41platform ref we want to make sure that

24:42it is valid because if it is invalid for

24:45any reason then there's nothing for you

24:48to do

24:49really so if it is valid then destroy

24:53it

24:56um oh oh actually sorry before we

24:58destroy it uh we want to call stop

25:03floating because if you recall here um

25:06on begin play of this floating pillar it

25:09starts floating but nothing calls stop

25:11floating so we need to call it manually

25:13ourselves so we call stop floating and

25:17then we also assign on uh float

25:21timeline uh finished oh and this reminds

25:25me it's very important that here where

25:27we bind we also

25:29unbind so we get our floating platform

25:32and say

25:35unbind

25:38um

25:40from what was it called unbind from

25:43float timeline reached so unbind event

25:46on float timeline reached and plug the

25:49event here this is important because we

25:51don't want this to be called when this

25:56happens so if we don't unbind this will

25:59be called on both floating and stop

26:01floating but once you unbind then it's

26:03called once and it doesn't happen again

26:05until the next time you spawn of

26:08course so same here uh also after doing

26:11this we want to

26:15um

26:16unbind

26:19from event from onf Flat timeline

26:23reached and then just

26:26call um

26:27[Music]

26:29onf

26:30float

26:34ended

26:36right oh and we need to set the

26:38invincibility back so we're going to set

26:41is Invincible back to

26:52false all right and if for any reason

26:55this is not valid oh did I forget

26:59something oh this should be

27:02here and if for any reason this is not

27:04valid then just go straight to well

27:06actually do a delay until next tick and

27:11then call this

27:15part just to give time again for the

27:17bind actually we we don't need a bind in

27:20this case oh but we are calling an event

27:22dispatcher so

27:25yeah all right so now that we we have

27:27this we need to wait to call them so I'm

27:29going to comment this and call it

27:31floating pillar uh

27:35ability so now we need a way to use it

27:37from our Behavior tree so we're going to

27:40go over here to our Behavior tree new

27:42task blueprint base put it in our tasks

27:45folder and call it boss start float

27:50we're going to have a start float and a

27:51stop float they're two separate tasks so

27:54event receive execute AI

27:59and this is going to cast to boss and

28:02then call start

28:06float and then assign on float height

28:13reached then we're just going to finish

28:18execute with success

28:23true all right and I'm going to copy and

28:25paste this and call this one

28:28stop

28:29float and let's open the stop float one

28:32and just instead of calling start float

28:34we call stop float that's the only

28:37difference and this is still on float

28:39height reached oh and this is also good

28:42to unbind here as well so here unbind

28:46float

28:48height

28:50reached bloop

28:54bloop and I'm going to copy it as well

28:56to the start

29:08float all

29:12right so back to our Behavior tree I

29:14have so many tabs open back to our

29:16Behavior tree let's take a look at this

29:19uh let's move all of these out of the

29:21way for

29:26now

29:28and let's um just do a start

29:33float wait for 5

29:36seconds and stop

29:40float okay so right now as soon as we

29:43start the boss floats oh he's calling

29:46floats multiple times in a row why are

29:48you doing

29:50that uh bind on height reached finish

29:56execute

29:59you should wait 5 Seconds why aren't

30:01you waiting 5

30:05Seconds let's debug this real

30:11quick if we play it does start

30:16float oh this is a selector

30:20uh my bad this should

30:24be a sequence let's call call it the

30:28float for

30:31now so it kept failing and kept

30:33repeating itself I mean kept succeeding

30:35and repeating

30:36itself okay now float wait 5

30:41seconds and after 5 Seconds you should

30:45stop floating and then

30:52repeat and it's not repeating for some

30:54reason and the stop float

30:57okay let me actually do this to make it

30:59easier to see just wait for one second

31:02and then after you stop floating wait

31:04for another second so now float one

31:08second stop floating he didn't destroy

31:12the

31:13platform so that is interesting let's

31:16see why

31:18not so if it is valid it will call stop

31:22floating and then on float timeline

31:26finished this doesn't seem to have been

31:34called right so let's add a print

31:37somewhere here is this called

31:41float unfat oh it is

31:45called oh I see we just didn't destroy

31:49the

31:50actor so after doing

31:54this actually before doing this

31:58let's

31:59destroy

32:06actor

32:08yep okay so now

32:10float unfat destroy actor okay now what

32:15I'm curious about is why isn't it

32:16repeating it it's stuck in the stop

32:19float oh I think I know because in stop

32:23float we bind to onf float height

32:25reached um uh this is the wrong one

32:29we're supposed to bind

32:32to well let's just do an assign assign

32:36on float ended this is what event we're

32:39interested

32:40in and then here as well we want to

32:43unbind from float

32:49ended I don't think the unbind here is

32:51very necessary but yeah let's just do it

32:53to be safe now it should work work float

32:58wait a second and go back and then

33:03repeat all right so now the attack

AOE trail attack

33:06itself once the boss is on top and has

33:10reached the peak of the float I want

33:12them to do an AO what I call an AOE

33:14Trail so an AOE attack where the

33:17location of the player is so the player

33:19has to move and then spawns another one

33:20so a player has to keep running away

33:22from these AOE attacks let's see what

33:24this is going to look like so this this

33:27is uh this is the animation that we're

33:29going to use so it's called Uh battlecry

33:33and it just looks like

33:35this um so the enemy just sort of does

33:38this uh animation and we have a montage

33:42notify called strike uh every 1 second

33:45so strike strike strike and during these

33:48strikes we're going to land lightning

33:50where the player currently

33:52is so back here in our uh BP enemy boss

33:58R out the custom event call

34:01it um AOE

34:06trail and I don't think yeah in this one

34:08yeah we always need an attack Target

34:10here so attack

34:13Target and my C is in the way

34:18again so uh we're going to call uh first

34:23attack we don't have one of these uh in

34:25the bpc damage systems we're going to

34:27create a new attack so we're going to

34:28call attack from enemy base and then

34:30we're going to play a

34:33montage in our skeletal

34:36mesh come on Chloe stop

34:40it in our skeletal mesh and we're going

34:42to search for

34:45battlecry all

34:46right and then um on so switch on notify

34:54begin and it was called strike

34:57that's the name of the

34:59notify so on strike we're going to spawn

35:02an AOE that we already have in our aoe's

35:05here called lightning strike now if

35:08you're not familiar again with the AOE

35:10that we've been using uh I suggest uh

35:12checking out my um AOE tutorial uh that

35:15will show you how uh we made all of

35:17these uh but for now uh you will see it

35:20in action uh very soon so we're going to

35:25spawn actor class and search

35:29for uh

35:31AOE lightning

35:34strike and this takes uh a few things so

35:37we need a decal uh we already have a few

35:40lightning decals here but I'm going to

35:41use the red one so I have this uh uh

35:44decal let me show it to you in the world

35:48this indicator here that tells the

35:50player something's about to happen move

35:52away from this

35:54location so I'm going to use

35:58the I'm going to use the uh red

36:01lightning

36:05decal and the delay before strike is how

36:08long should the decal be visible before

36:11the actual attack happens so if it's 1

36:13second that means you have 1 second to

36:15run away from this

36:19area um and this uh also has a function

36:23to automatically move it to the floor so

36:25you just give it a location and it will

36:27always display to the floor where that

36:29location is so we're going to split this

36:33we're going to get our attack Target get

36:38actor location and that's going to be

36:40our

36:42location then uh we have here

36:46assign uh an event

36:49called uh AOE overlap actor this is when

36:53the AOE hits an actor here we want to

36:56check that we're not damaging teammates

36:59so we're going to get uh the team number

37:02of this

37:04actor and if the team number is not

37:07equal to our own team

37:14number then they are on a different team

37:17and you feel free to damage them so call

37:22take damage the message

37:25one

37:28all right and the Damage causer

37:30itself the damage info is make it's

37:34going to be let's say it's going to do a

37:36lot of damage this is uh 30

37:4033 it's uh let's say

37:44explosion can't be blocked can't be

37:46parried shouldn't Force interrupts um

37:50and does hit

37:54reaction anything else

37:59oh oncomplete un interrupt call attack

38:06end and pass in the attack

38:12Target all right so we just finally need

38:17one more attack for it here in our enum

38:20call it AOE

38:22Trail then also here in our attacks

38:27call this one oh pull off of Boss ref

38:32call AOE

38:35Trail and pass our attack

38:40Target and now let's build the sequence

38:43so this AOE Trail sequence I'm going to

38:45delete the

38:46float and we're going to do the AOE

38:50Trail sequence so sequence starts like

38:53this first um the boss clears focus and

38:58then uh runs the eqs that generates a um

39:04POI uh a point of

39:06Interest stores it in point of Interest

39:09say gets a random

39:10one and teleports to that location so

39:14boss teleport to point of

39:17Interest then after teleporting we're

39:20going to

39:21float all right then after floating

39:24we're going to do the uh

39:27attack the AOE

39:31Trail select AOE Trail select attack

39:34Target and then once we're done with the

39:36AOE Trail then we do stop

39:41float and that's our attack

39:44sequence let's take a look at it goes

39:48here oh one more thing before well after

39:51or before starting to float let's

39:54focus uh the attack Target

39:58again all right so teleport focuses

40:03and oh I see lightning but it's not

40:06spawning on the floor it's spawning in

40:09my

40:11Center uh why is

40:20that

40:25uh

40:27let's find

40:29out I know what's happening that is my

40:33bad I set a location but I didn't set a

40:37Target I don't need to actually set a

40:38location I just need to set a Target

40:40because this automatically gets the

40:41location of the

40:43Target now it should

40:45work all right and AOE Trail very nice

40:50so now I need to run away from

40:53these excellent and once he's down he's

40:56going to repeat it

41:02again very

41:05nice all

41:08right so now let's combine all of these

Combining all attacks into the final boss fight

41:12attacks into one final boss

41:16fight let's see how we're going to do

41:19that all right so we have our ground

41:22smash we have our random melee combo we

41:25have our throw axe we have our um quick

41:29attack we have our jump attack teleport

41:32and AOE Trail so everything is pretty

41:36much ready now let's uh add some

41:38cooldowns the first thing so AE Trail is

41:41pretty um flashy and um takes away from

41:46the flow of the fight so let's add it as

41:48a break between intensive uh fights so

41:52it's also important to know the flow

41:54that you want for a battle so let's say

41:57this maybe should have a uh um 50c cool

42:03down all right the axe let's bring it

42:06back to four loops and let's say this

42:08one should happen

42:10fairly um uh often so let's say this is

42:14only 20 seconds cool down ground smash

42:17we didn't add a cool down for it uh

42:20let's add a cool down as

42:24well um

42:27and let's say cool down for this one is

42:3130 seconds bit longer than the throw Axe

42:34and then finally the random combo

42:36sequence doesn't have a cool down so

42:37whenever everything else is on cool down

42:39do

42:42this um and the Order of the attacks

42:45will be like this AE Trail gets the

42:49highest

42:50priority Then followed

42:54by so this is if they're all not on cool

42:56down then this order uh will Define

43:01priority then ground

43:06Smash and finally the regular

43:13combo and let's move all of

43:18these right

43:24here all right that's a big

43:26tree let's see what it looks like all

43:29put

43:30together all right now I can dodge this

43:34I can try attacking the boss a bit oh

43:38need to teleport from

43:40that

43:45oh oh he's also blocking that's perfect

43:49everything

43:52is throw the

43:55axe I know that these are going to be

43:57four axe

43:59throws and final one is he going to do a

44:02jump or a quick attack jump

44:05nice oh I need to run away from that and

44:09right on

44:10time and

44:24stagger and AOE Trail is coming so

44:27everything has a very obvious animation

44:31visual CU or sound Q oh followed by

44:36throw

44:38axe oh and by the way the axe is homing

44:41so if I dodge away see the axe doesn't

44:43have time really to chase me but it

44:46tries to spin to chase you see that so

44:48if you make it slower H it will actually

44:51rotate and face

44:52you and I got that one

44:57oh

45:04nice I think his HP is relatively large

45:09compared to

45:12mine and he's pretty

45:15op but that's what makes it challenging

45:18and I only have a handful of attacks to

45:20use but I think it's really cool it does

45:24definitely looks like a challenging boss

45:27and we managed to

45:30uh managed to achieve most of the

45:32pillars uh that we set out to

45:38achieve perfect thank you all for

Outro & updates

45:41watching I hope this was useful and

45:43educational it took me a really long

45:45time to make it so I appreciate that you

45:47stuck around and watched all of it um if

45:50you want to download the full project

45:51files for the entire series uh you can

45:54get it on my patreon where it's free

45:56with a 7-Day trial but I would of course

45:58love it if you um stuck around after the

46:01trial to support my channel also make

46:04sure to check out my new Apprentice tier

46:05on patreon where I offer a one to one

46:08hourong conversation with me uh where

46:11you can ask me anything about uh game

46:13development software engineering or

46:15really anything else so as always thank

46:18you all for watching and I'll see you in

46:20the next

46:21[Music]

46:24one

46:26[Music]

46:35oh

This transcript was generated from the captions YouTube publishes for this video. Get the transcript of any YouTube video atfreeyoutubetranscribe.com: free, unlimited, no sign-up.