WEBVTT

00:06.780 --> 00:07.950
Welcome back.

00:07.980 --> 00:15.990
So we've created some damage effect params and we're using that now with our aura ability system library

00:16.140 --> 00:23.460
and our ability system library when we call apply damage effect assigns some set by color magnitudes

00:23.460 --> 00:24.090
for us.

00:24.120 --> 00:30.150
And now we would like to use some of these that we're not using like our debuff parameters.

00:30.780 --> 00:35.220
Now there's a place where we're determining combat phenomena.

00:35.250 --> 00:40.920
That is an exact calc damage here In exact calc damage, we're determining all kinds of things.

00:40.920 --> 00:47.310
We're seeing if there's a block, we're seeing if there's a critical hit, we're taking all these other

00:47.310 --> 00:48.960
parameters into account.

00:48.990 --> 00:53.100
Well, we can check here to see if we got a debuff as well.

00:53.430 --> 00:58.680
In fact, we could do that before we even determine how much damage we're causing.

00:58.950 --> 00:59.460
Right.

00:59.460 --> 01:06.510
Because if we're getting a debuff, that just involves some calculations based on our debuff parameters,

01:06.510 --> 01:08.970
we don't really care about damage.

01:09.300 --> 01:15.990
So I'm going to do some calculations before we get into damage, and that's going to be to determine

01:15.990 --> 01:17.970
whether there was a debuff.

01:18.120 --> 01:24.090
So I'm just going to have a comment here that says debuff and we'll see what we can do here.

01:24.210 --> 01:32.740
Now there are different debuff types and we know how many debuff types there are if we check out our

01:32.740 --> 01:33.910
gameplay tags.

01:34.460 --> 01:41.200
In our gameplay tags, we have damage types to debuffs, so we know the debuff types that there are

01:41.210 --> 01:48.890
and our aura ability system library is setting our debuff chance damage, duration and frequency.

01:48.890 --> 01:55.310
And we also know the damage type and we know that damage types are associated with debuffs thanks to

01:55.310 --> 01:57.830
this map, damage types to debuffs.

01:57.830 --> 02:03.470
So if we loop over this map, we know both the damage type and the debuff.

02:03.470 --> 02:06.320
And that's what I'd like to do in exec calc damage.

02:06.320 --> 02:08.090
So I'm going to make a for loop.

02:08.090 --> 02:11.630
I'm going to loop over a T tuple.

02:13.050 --> 02:17.970
That maps gameplay tags to gameplay tags.

02:19.590 --> 02:27.660
I'm going to call this pair and I'm looping over gameplay tags and it doesn't look like I created a

02:27.660 --> 02:32.340
gameplay tags const variable, so I'm going to say const ora.

02:34.090 --> 02:35.680
Gameplay tags.

02:36.280 --> 02:37.900
That's a const ref.

02:39.460 --> 02:41.200
We'll call it gameplay tags.

02:43.730 --> 02:48.950
And we'll call for gameplay tags get now that we have that singleton.

02:49.980 --> 02:51.510
I can loop over that map.

02:51.510 --> 02:53.460
Damage types to debuffs.

02:54.960 --> 03:00.120
Now for each damage type slash debuff, what are we going to do?

03:00.450 --> 03:07.020
Well, if we have the gameplay effects spec and we do it's called spec right here, we can always get

03:07.020 --> 03:08.910
set by caller magnitudes.

03:09.300 --> 03:17.580
So if I took my spec and I called get set by caller magnitude passing in a damage type, we would get

03:17.580 --> 03:25.170
a magnitude because our ability system library is setting the damage type and it's setting a base damage

03:25.170 --> 03:27.330
associated with that damage type.

03:27.990 --> 03:34.860
So if the set by color magnitude has been set for this particular damage, type in the pair in our for

03:34.860 --> 03:35.370
loop.

03:35.400 --> 03:39.240
We know that this is the damage type we're dealing with.

03:39.800 --> 03:44.030
Now, how do we know which damage type was which?

03:44.060 --> 03:50.960
Well, remember, get set by caller magnitude has a default if not found parameter.

03:50.990 --> 03:55.640
So if we don't find a given damage tag.

03:56.250 --> 04:02.550
As a set by color magnitude, we could default to something, say negative one, because we'll never

04:02.580 --> 04:04.670
be assigning negative damage.

04:04.680 --> 04:09.300
At least that's a convention that I'd like is never to assign negative damage.

04:09.300 --> 04:10.860
It doesn't make sense if we're going to.

04:10.860 --> 04:15.180
He'll go about it a different way, but don't assign negative damage.

04:15.180 --> 04:20.820
So what we can do here is get a set by color magnitude for the damage.

04:20.820 --> 04:28.920
Gameplay tag and damage types to debuffs has damage types as its keys so we can take a key.

04:29.880 --> 04:30.390
Now.

04:30.390 --> 04:37.980
I don't want to warn if not found, because there will be one damage type we do find and other tags

04:37.980 --> 04:39.000
we don't find.

04:39.000 --> 04:43.890
So I'm going to pass false in so we can suppress that warning.

04:43.890 --> 04:49.980
That way we don't have to go and do like we did in blueprint and set set by color magnitudes for all

04:49.980 --> 04:52.230
of them and just have zero.

04:52.230 --> 04:52.940
Right?

04:52.950 --> 04:58.560
But also, though, there's another reason to not set set by color magnitudes for the tags we're not

04:58.560 --> 05:02.310
using because I'd like to use this default if not found.

05:02.340 --> 05:06.840
If not found, I'd like this to be a negative one dot f.

05:07.020 --> 05:14.010
In other words, get set by color magnitude, which returns a float is going to return negative one.

05:14.010 --> 05:18.840
If we don't find the damage type as a set by color magnitude.

05:18.840 --> 05:26.460
So what I can say is float, we'll call it type damage and this could be a const float and this float

05:26.460 --> 05:33.850
will be negative one for any damage types that don't exist as a set by color magnitude and our spec.

05:34.160 --> 05:40.100
So we can use that to prevent doing anything else we can say if type damage.

05:41.650 --> 05:44.470
Is greater than negative one.

05:44.810 --> 05:45.370
F.

05:46.010 --> 05:46.460
Right.

05:46.460 --> 05:54.440
So even if we do set our damage, even if damage is zero, we'll get a negative one here, in which

05:54.440 --> 05:55.970
case we should do nothing.

05:56.090 --> 06:02.780
Now, if we make it past this, then we know that our pair key is the damage type that we're interested

06:02.780 --> 06:02.980
in.

06:02.990 --> 06:08.870
In fact, we could just say const f gameplay tag reference damage type here.

06:08.870 --> 06:12.410
So we know that pair key is the damage type.

06:14.590 --> 06:17.200
And we can make a const gameplay tag.

06:18.200 --> 06:23.720
Reference called debuff type and that'll be the parent value.

06:23.720 --> 06:26.390
So this makes it clear which one is which.

06:26.720 --> 06:32.330
And that way we know right here we're getting the set by color magnitude for damage type.

06:32.330 --> 06:33.440
This is more clear.

06:33.440 --> 06:34.520
I like this better.

06:34.760 --> 06:39.380
Now, if you're worried about floating point in precision, perhaps get set by color.

06:39.380 --> 06:43.490
Magnitude doesn't find it and it returns a negative one.

06:43.490 --> 06:47.000
But we know that it's not going to be exactly negative one.

06:47.000 --> 06:50.000
It could be plus or minus some amount.

06:50.030 --> 06:55.250
Well, you could just be safe and make this -0.5 or something like that.

06:55.280 --> 06:57.170
Now, if you did this, it looks weird.

06:57.170 --> 07:04.940
So you have to say 0.5 padding for floating point M precision.

07:06.270 --> 07:12.000
And as long as you don't go using a negative value between 0 and -5, you're fine.

07:12.090 --> 07:14.760
But negative one should be fine.

07:14.760 --> 07:19.500
So anyway, now we know the damage type and we know the debuff type.

07:19.500 --> 07:22.830
More importantly, this is what we're really interested in.

07:22.830 --> 07:30.180
And if we know the debuff type, then when we calculate our debuff chance we know what kind of debuff

07:30.180 --> 07:31.890
we should be applying.

07:31.920 --> 07:38.820
So here we're going to determine if there was a successful debuff.

07:40.050 --> 07:41.670
How are we going to do that?

07:41.700 --> 07:47.760
We're going to get our debuff chance, our debuff damage, our debuff duration and so on.

07:47.910 --> 07:52.230
So let's make a const float source debuff chance.

07:54.410 --> 07:56.630
As this is on the source, after all.

07:56.750 --> 07:58.670
And that's going to be gotten from the spec.

07:58.670 --> 08:04.970
We're going to get set by color magnitude and we need the debuff chance gameplay tag.

08:04.970 --> 08:09.710
So we're going to use gameplay tags dot debuff chance.

08:10.460 --> 08:17.570
We don't want to warn if not found and we'll use negative one dot f if not found.

08:17.870 --> 08:20.510
Now we need to determine if there was a debuff.

08:20.510 --> 08:21.050
Right.

08:21.060 --> 08:29.270
Well what if we'd like to see if there's some kind of resistance calculation if we scroll up, notice

08:29.270 --> 08:31.430
that we do have these resistances.

08:31.960 --> 08:39.480
And we even have a tags to capture deaths to map that we could search for any resistance tags.

08:39.490 --> 08:43.120
We know that matches tag checking against attributes.

08:43.300 --> 08:49.600
Resistance would get us any of those tags so we can check against resistances here.

08:49.840 --> 08:57.370
So if we know our damage type, we know the resistance tag thanks to F or a gameplay tags.

08:57.520 --> 09:03.640
And if we know the resistance tag, we know the capture def thanks to our tags to capture def map.

09:05.110 --> 09:10.460
So let's say we'd like to capture the resistance corresponding to this damage type.

09:10.480 --> 09:12.010
How would we do that?

09:12.070 --> 09:22.780
Well, we make a non const float called target debuff resistance and set it equal to zero.

09:23.290 --> 09:30.280
And then just like when we captured our other attributes, we take our execution params and call attempt

09:30.280 --> 09:33.250
calculate captured attribute magnitude.

09:33.730 --> 09:38.680
This requires an gameplay effect attribute capture definition.

09:38.710 --> 09:41.200
So we're going to get that from damage statics.

09:42.470 --> 09:47.900
We're going to get tags to capture deaths and we're going to index the resistance.

09:48.230 --> 09:50.150
We need to know the resistance.

09:50.480 --> 09:55.220
Why don't we go ahead and just make a gameplay tag local variable for the resistance tag?

09:55.220 --> 10:02.750
We're going to say resistance tag and that's going to be something we get from gameplay tags the singleton

10:02.750 --> 10:08.330
because we have damage types to resistances and we can index the damage type.

10:10.010 --> 10:17.480
And if we have a resistance tag, we can use that in tags to capture deaths and this will return a capture

10:17.480 --> 10:18.050
def.

10:19.360 --> 10:27.610
Once we've done that, we have to pass in evaluation parameters and we have to pass in the float target

10:27.610 --> 10:29.080
debuff resistance.

10:29.800 --> 10:35.410
So now we know the resistance to the damage type for this particular debuff.

10:35.470 --> 10:37.390
So they're all connected, right?

10:37.420 --> 10:41.110
Debuff type damage type resistance.

10:41.140 --> 10:43.060
These are all corresponding.

10:43.060 --> 10:46.510
There's a debuff type and a resistance to fire.

10:46.540 --> 10:49.460
Its debuff type is burn and so on.

10:49.480 --> 10:57.640
So now that we have the target debuff resistance, if we want we can make sure it's not a negative value.

10:57.670 --> 11:07.990
We can say target debuff resistance equals f math max float, target debuff resistance and zero.

11:08.470 --> 11:14.030
And then once we've done that we can calculate our effective debuff chance.

11:14.050 --> 11:18.830
So we need to see what is our effective chance.

11:18.830 --> 11:22.730
What do we need to hit in a die roll on 100 sided die?

11:22.760 --> 11:26.780
Well, we're going to make a const float called Effective debuff Chance.

11:31.020 --> 11:34.270
And we can decide on a math formula.

11:34.290 --> 11:37.800
Well, we know that we have the source debuff chance.

11:38.100 --> 11:42.600
We can multiply this by a factor and we can do what we've done before.

11:42.600 --> 11:48.930
We can take 100 minus target debuff resistance and divide this by 100.

11:49.800 --> 11:57.630
Now this means that each point in our resistance takes off literally 1% of the debuff chance.

11:57.660 --> 12:04.440
If you want to scale that by a factor and even drive that by data such as a curve table, you know how.

12:04.470 --> 12:11.910
But I'm okay with each point of resistance reducing our chance to get a debuff by 1%.

12:12.700 --> 12:19.330
Now we need to know if we got a debuff, so we're going to make a const bool called B debuff and we

12:19.330 --> 12:20.710
roll the 100 sided die.

12:20.740 --> 12:23.740
We say F math randrange.

12:26.330 --> 12:28.370
Between 1 and 100.

12:28.400 --> 12:33.320
We see if that's less than our effective debuff chance.

12:35.670 --> 12:40.260
Now we know if we got a debuff we can check if b debuff.

12:41.990 --> 12:44.240
Now, the real question, right?

12:44.270 --> 12:46.040
What do we do in this case?

12:46.070 --> 12:47.960
If we know we should have a debuff.

12:47.990 --> 12:50.600
What exactly do we do about it?

12:50.840 --> 12:53.000
That we're going to handle next?

12:53.000 --> 13:00.350
But before we wrap up, we just added a whole bunch of lines to an already big function, and I don't

13:00.350 --> 13:05.900
really like the function being that big, so this could be abstracted away into a function.

13:05.900 --> 13:07.490
We can refactor this.

13:07.490 --> 13:12.950
So if I extract it, then we see that this has to take in three parameters.

13:12.950 --> 13:19.340
It has to take in execution params, it's automatically going to be a const reference, which is perfect.

13:19.370 --> 13:25.430
We need the gameplay effect spec, which can be a const reference which is perfect and we need F aggregator

13:25.460 --> 13:30.170
evaluate parameters and also f or a gameplay tags.

13:30.170 --> 13:33.230
You know what we don't need to pass in gameplay tags do we?

13:33.230 --> 13:38.810
So I'm going to cancel this and just subsume that line to.

13:39.720 --> 13:47.850
And go back and refactor extract method and now we only have three input parameters.

13:47.850 --> 13:49.010
That's all we need.

13:49.020 --> 13:52.290
We'll see that it does all of these lines of code here.

13:52.290 --> 13:59.940
So I'm going to go ahead and give this a name and it's going to be determine debuff.

14:01.350 --> 14:02.720
We'll click next.

14:02.730 --> 14:07.770
And now we have this nice function determined debuff that determines the debuff.

14:07.770 --> 14:12.090
Now the question though is still what does determine debuff do?

14:12.120 --> 14:12.660
Where is it?

14:12.660 --> 14:13.530
It's up here.

14:14.410 --> 14:15.430
Right here.

14:15.460 --> 14:17.530
Let's put a big fat to do.

14:17.920 --> 14:20.920
We'll say, What do we do?

14:21.490 --> 14:22.900
Isn't that a good to do?

14:22.930 --> 14:23.500
To do.

14:23.530 --> 14:24.480
What do we do?

14:24.490 --> 14:29.650
Well, it's like to be continued because we'll be figuring that out in the next lecture.

14:29.650 --> 14:36.640
For now, it's enough to know by the time we've gotten to the exit calc whether or not we have a debuff

14:36.640 --> 14:38.770
based on the debuff chance.

14:39.510 --> 14:44.750
And we know that our firebolt has a, I think 20% debuff chance.

14:44.760 --> 14:51.630
So what we could do is we can run in debug mode with a breakpoint right here and see what that debuff

14:51.630 --> 14:52.410
chance is.

14:52.440 --> 14:54.570
In fact we can see if we got a debuff.

14:56.460 --> 14:57.000
All right.

14:57.000 --> 14:57.950
So I'm going to press play.

14:57.960 --> 14:59.700
I'm going to launch a fireball.

15:00.780 --> 15:02.880
And let's see what we get down here.

15:03.720 --> 15:05.280
Now, this is interesting.

15:05.280 --> 15:08.880
Before we hit our break point, we actually hit an exception.

15:09.810 --> 15:11.790
And I'm seeing the problem now.

15:12.090 --> 15:14.370
It's something that I missed earlier on.

15:15.450 --> 15:21.570
You see tags to capture deaths is a member variable on the aura damage statics class.

15:21.570 --> 15:27.180
But as we can see, there's only one element in this map at this point in time, so it's too early for

15:27.180 --> 15:29.040
us to access anything from it.

15:29.040 --> 15:30.510
And that's a problem.

15:30.930 --> 15:38.280
To make this easier for us, I'd like to just make a local team map in the execute implementation function

15:38.280 --> 15:40.560
and just fill it in there and use it there.

15:41.920 --> 15:43.750
So here's what I'll do.

15:44.050 --> 15:49.400
I'm going to make a T map locally and execute implementation.

15:49.420 --> 15:51.070
I'll do it first thing.

15:51.250 --> 15:59.440
It's going to be a T map mapping F gameplay tags to F attribute capture definitions.

15:59.440 --> 16:03.790
They're actually F gameplay effect attribute capture definitions.

16:03.790 --> 16:07.270
And this is going to be tags to capture deaths.

16:09.340 --> 16:11.500
And I'm going to fill this in here.

16:11.920 --> 16:18.490
So what I did up here in the constructor for Aura Damage Statics, I'm going to do that down there.

16:18.490 --> 16:25.090
I'm going to go ahead and cut this out and I'm going to remove tags to capture deaths from aura damage

16:25.090 --> 16:26.560
statics altogether.

16:26.560 --> 16:30.880
We plan on just having a static object of this type.

16:31.430 --> 16:35.960
And down here in execute implementation, I'm going to paste those lines.

16:35.960 --> 16:43.580
But instead of passing in armor def, I need to use damage statics dot capture def.

16:44.330 --> 16:51.640
So we'll get that from the static or a damage statics and we'll go ahead and do that for all of them.

16:51.650 --> 16:56.270
And that way we're just making a local team map just for our usage here.

16:56.360 --> 17:01.040
And then I don't have to go and call the Aura Damage Statics constructor.

17:01.040 --> 17:04.460
We should only be going through the damage statics static function.

17:05.660 --> 17:12.140
So everywhere where calling aura damage statics, I'm going to replace that with damage statics.

17:12.140 --> 17:19.160
Except here it no longer has tags to capture defs, so I'm just using my local tags to capture defs

17:19.160 --> 17:19.760
here.

17:20.530 --> 17:22.120
And the same thing here.

17:22.120 --> 17:24.370
I don't need to get it through or a damage statics.

17:24.370 --> 17:26.380
I'm just going to use the local variable.

17:27.190 --> 17:29.500
So let's see where else we're using that constructor.

17:29.500 --> 17:31.270
I think that was the only place.

17:32.680 --> 17:40.240
So now that we have our team map local to execute implementation, I'm just going to pass that in to

17:40.240 --> 17:41.710
determine debuff.

17:41.890 --> 17:46.150
I'm going to pass in a team map with this signature.

17:47.390 --> 17:51.640
So back in exec calc damage for determine debuff.

17:51.650 --> 17:56.450
I'm going to add one last parameter, but it's going to be a const reference.

17:56.750 --> 18:06.890
That way we don't go making copies of this thing and it's going to be tags to defs and we'll make it

18:06.920 --> 18:08.630
in tags to defs.

18:09.050 --> 18:11.530
And that's the tags to capture defs.

18:11.540 --> 18:18.110
We'll go ahead and add that here and we'll add it in the CPP file for this function.

18:20.430 --> 18:25.860
And I'll go ahead and stop debugging while I'm at it as I'm making changes here.

18:29.300 --> 18:33.710
So now determine debuff takes in tags to defs.

18:33.740 --> 18:36.110
We can use this instead.

18:37.560 --> 18:43.710
So right here, instead of getting it from damaged statics, we're just going to use in tags to deaths.

18:43.860 --> 18:50.870
Now, in addition to that, when we call determine debuff, we need to pass in tags to capture deaths.

18:52.110 --> 18:54.630
So now we can go ahead and test this out.

18:54.630 --> 18:58.320
And I don't expect to see an exception get hit this time.

19:00.380 --> 19:02.120
So now we can do some damage.

19:02.120 --> 19:09.800
But one other thing that I just remembered is that our enemy's secondary attributes, gameplay effect

19:10.040 --> 19:12.170
doesn't really have any resistances.

19:12.170 --> 19:19.300
So I'm going to add a resistance modifier for fire resistance just for testing purposes in GE.

19:19.460 --> 19:21.470
Secondary attributes enemy.

19:21.860 --> 19:28.190
So I'm going to go ahead and collapse all these modifiers and add one more.

19:28.190 --> 19:31.880
And this last one is going to use fire resistance.

19:31.880 --> 19:37.850
I'm going to override fire resistance and set it to a value of, let's say, 20.

19:39.730 --> 19:41.770
And now I'm going to fire a firebolt.

19:42.510 --> 19:44.810
And now we don't hit that exception.

19:44.820 --> 19:47.880
We hit our break point, which is what we always want to see.

19:47.910 --> 19:48.450
Right.

19:49.030 --> 19:57.040
Now our resistances tag is fire and we're checking in tags to deaths, which has ten captured attribute

19:57.040 --> 20:00.860
deaths inside of it, including our resistances.

20:00.880 --> 20:06.970
So we're getting our attribute magnitude, which we expect to be 20.

20:07.000 --> 20:11.050
We're putting that into target debuff resistance and here we see it's 20.

20:11.640 --> 20:14.340
So we got that target debuff resistance.

20:14.340 --> 20:21.150
We're calculating an effective debuff chance where the debuff resistance is 20 and the source debuff

20:21.150 --> 20:22.830
chance is also 20.

20:22.860 --> 20:27.960
We're multiplying that by 100 -80 over 100, which is 80% of that.

20:27.960 --> 20:29.730
That gives us 16.

20:29.730 --> 20:32.970
So rolling the 100 sided die.

20:33.150 --> 20:34.760
Do we get less than 16?

20:34.770 --> 20:35.310
No, we don't.

20:35.310 --> 20:38.880
But at least we see that effective debuff chance is correct.

20:38.880 --> 20:41.550
So now we have something that works.

20:41.580 --> 20:47.070
We're not doing anything that we don't realize we're doing and things are looking good.

20:47.340 --> 20:50.100
So with that we can go ahead and wrap up.

20:50.100 --> 20:56.100
I'm going to resume, but before we head on out, I'm just going to make sure our secondary attributes

20:56.100 --> 21:04.020
has our resistances and I can take a look at how Aughra's resistances are set if we go to effects secondary

21:04.020 --> 21:06.750
attributes, these are the ones aura uses.

21:06.780 --> 21:11.380
Aura should have her resistances so we can collapse all the modifiers.

21:11.380 --> 21:15.040
Notice there are much more of them for more to be exact.

21:15.040 --> 21:16.780
And let's see how they're set.

21:16.780 --> 21:24.310
It says there override modifier magnitude is attribute based and we have a coefficient of 0.5 a post

21:24.310 --> 21:31.900
multiply additive value of three and let's just see if our life will be easy if they're all the same.

21:31.900 --> 21:33.520
Yeah, it looks like they're all the same.

21:33.520 --> 21:37.090
So we can just add these modifiers over to secondary attributes.

21:37.090 --> 21:37.810
Enemy.

21:38.700 --> 21:44.010
So the fire resistance, one can be override, but we can set it to attribute based.

21:44.010 --> 21:48.140
And what is the backing attribute for fire resistance?

21:48.150 --> 21:50.670
It looks like it is.

21:51.820 --> 21:52.990
Resilience.

21:52.990 --> 21:56.860
And I think they're all resilience except for perhaps physical.

21:56.890 --> 22:00.010
Physical resistance is backed by.

22:02.450 --> 22:03.590
Resilience as well.

22:03.590 --> 22:05.300
They're all backed by resilience.

22:05.300 --> 22:06.770
That makes it easy.

22:07.370 --> 22:12.650
So let's go ahead and just add those to our enemies secondary attributes.

22:12.650 --> 22:17.430
And that way we can test the other resistances when we get to those.

22:17.450 --> 22:27.170
So attribute based are attribute based magnitude is going to have a coefficient of 0.5, a post multiply

22:27.170 --> 22:33.110
of three, and the backing attribute will be resilience on the target.

22:33.110 --> 22:34.760
And we're not snapshotting.

22:34.940 --> 22:38.600
So I'm going to time lapse adding the other resistances now.

23:02.800 --> 23:10.420
Okay, so now our enemies have secondary attributes and we could add that to their test gameplay ability

23:10.420 --> 23:11.040
as well.

23:11.050 --> 23:12.520
But that's fine.

23:12.520 --> 23:14.500
We'll do that when we need to do that.

23:14.500 --> 23:18.490
For now, we know that they have resistances and we can test them.

23:18.610 --> 23:24.550
The only thing left to do is to decide what happens if we get a debuff right.

23:24.550 --> 23:27.610
So in determine debuff we have this boolean.

23:27.610 --> 23:30.130
I'm going to remove that breakpoint, but we have a to do.

23:30.160 --> 23:32.850
What do we do when we get a debuff?

23:32.860 --> 23:36.730
That's what we're going to handle next and we'll see what that involves.

23:37.000 --> 23:40.000
So great job and I'll see you in the next video.
