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