WEBVTT

00:07.230 --> 00:08.430
Welcome back.

00:08.550 --> 00:15.720
Now we have a working projectile working in a sense that it's behaving visually how it should.

00:15.810 --> 00:20.900
But when it explodes on an enemy, well, nothing else really happens.

00:20.910 --> 00:26.910
And we know that we're going to apply changes to attributes by gameplay effect.

00:26.910 --> 00:33.990
So our Firebolt really our C plus plus class or a projectile should have a gameplay effect that it's

00:33.990 --> 00:35.910
capable of applying.

00:35.940 --> 00:42.120
So in this video we're going to add a gameplay effect that our fireball can carry along with it and

00:42.120 --> 00:44.090
apply to whatever it hits.

00:44.100 --> 00:46.170
So that's what we're going to start with.

00:46.200 --> 00:49.290
We're going to create a damage gameplay effect.

00:49.950 --> 00:57.090
Now, the way that we're implementing damage with this damage gameplay effect is really just getting

00:57.090 --> 00:57.870
things working.

00:57.870 --> 01:01.250
It's not exactly how we're going to end up applying damage.

01:01.260 --> 01:04.650
You see, we have all these attributes, right?

01:04.650 --> 01:11.220
We can see them in our attribute menu and these should all affect some aspect of the game, most of

01:11.220 --> 01:14.960
them affecting combat and how damage is applied.

01:14.970 --> 01:22.590
So for now, we're going to create a basic gameplay effect that will make a change to the target's health.

01:22.710 --> 01:26.520
But it's really kind of a placeholder gameplay effect.

01:26.550 --> 01:32.400
The way that we're going to apply damage is actually going to be a little bit more comprehensive, more

01:32.400 --> 01:34.860
all inclusive of our attributes.

01:34.860 --> 01:40.260
So until we get to that, we're just going to make a basic damage gameplay effect.

01:40.260 --> 01:46.950
So we're going to go to blueprints, ability system gameplay effects, and we'll go ahead and make a

01:47.100 --> 01:48.840
damage gameplay effect.

01:48.840 --> 01:52.720
So make a new blueprint based on gameplay effect.

01:54.860 --> 01:59.150
And we're going to call this GE underscore damage.

01:59.960 --> 02:06.560
And we can open this and it's going to be an instant gameplay effect that will simply subtract from

02:06.560 --> 02:07.220
health.

02:07.520 --> 02:11.440
This is how our placeholder gameplay effect will work for now.

02:11.450 --> 02:13.490
So we'll add one modifier.

02:13.520 --> 02:22.250
The modifier will affect the health attribute, it's going to add to it and it's going to add a negative

02:22.250 --> 02:22.850
value.

02:22.880 --> 02:27.200
We'll just say minus ten for now and compile and save that.

02:27.200 --> 02:29.330
And now we have a gameplay effect.

02:29.540 --> 02:33.620
So how are we going to actually apply this gameplay effect?

02:33.710 --> 02:39.560
Well, we know that our firebolt needs to carry the gameplay effect along with it, but I'd like the

02:39.560 --> 02:43.730
projectile to carry a sort of lightweight version of it.

02:43.910 --> 02:48.770
I'd like to carry a gameplay effect spec handle, so let's close the editor.

02:48.770 --> 02:53.540
I'm going to save all and go into our aura projectile header file.

02:53.600 --> 02:56.280
So this will be in actor.

02:56.300 --> 02:58.480
Here's my CPP file.

02:58.490 --> 03:01.200
I'll go ahead and close all other tabs.

03:01.810 --> 03:03.460
And open the header file.

03:03.790 --> 03:10.690
So I'd like this class to have a game play effect spec handle that can be set whenever spawning one

03:10.690 --> 03:16.420
of these projectiles and this will be a public variable so we can easily set it from outside the class.

03:16.420 --> 03:26.620
So this will be an f game play effect spec handle and we're going to call this damage effect spec handle.

03:27.520 --> 03:29.680
Now I'm going to give it a new property.

03:31.430 --> 03:32.810
With blueprint.

03:32.810 --> 03:33.350
Read.

03:33.350 --> 03:34.140
Write.

03:34.160 --> 03:40.250
In case we'd like to set this from Blueprint, and in the case where perhaps we'd like to spawn one

03:40.250 --> 03:48.320
of these projectiles using a Spawn actor node in blueprint, we can actually expose this to that spawn

03:48.320 --> 03:58.220
actor node by using meta equals, and in parentheses we can have expose on spawn and set that equal

03:58.220 --> 03:58.940
to true.

03:59.300 --> 04:02.630
That's how you can expose a pen on spawn.

04:02.660 --> 04:07.580
Now this is an incomplete type and gameplay effects spec handle.

04:07.580 --> 04:14.210
If we right click and go to declaration or usages, it's in gameplay effect types dot h.

04:14.360 --> 04:18.560
So what we can do is we can include gameplay effect types.

04:19.130 --> 04:21.440
So I'm going to go ahead and include that.

04:23.190 --> 04:27.120
Include gameplay effect types.

04:27.450 --> 04:31.950
H And now we have our damage effect spec handle.

04:31.980 --> 04:39.690
Now we need to set this when we spawn one of these and we're spawning them in our aura projectile spell.

04:39.840 --> 04:45.660
I'm going to go ahead and close gameplay effect types and open abilities and open aura Projectile spell

04:45.930 --> 04:46.500
CP.

04:47.620 --> 04:53.830
Now here we're spawning a projectile, but we're using spawn actor deferred.

04:53.830 --> 04:57.370
And then after that we're calling finish spawning.

04:57.370 --> 05:03.490
But right here in between before we finish spawning, this is where we can set that damage effect spec

05:03.490 --> 05:04.100
handle.

05:04.120 --> 05:11.410
Now, in order to have a spec handle, we have to use our ability system component to call make outgoing

05:11.440 --> 05:12.190
spec.

05:12.190 --> 05:19.660
And if our projectile spell is going to create a gameplay effect spec, it needs to know what gameplay

05:19.660 --> 05:22.350
effect class to use for damage.

05:22.360 --> 05:27.110
So we're going to need a variable on or a projectile spell dot H.

05:27.220 --> 05:33.400
So I'm going to make a variable here on this class for the damage effect.

05:33.400 --> 05:35.650
So this can be a subclass of.

05:38.450 --> 05:42.230
And its type can be you gameplay effect.

05:44.280 --> 05:51.120
And we'll call this damage effect class and we'll set this from the blueprint.

05:51.120 --> 05:55.680
So we'll give it a new property with edit anywhere.

05:55.710 --> 05:57.600
Actually edit defaults only.

06:00.830 --> 06:07.550
Because we'll only have our default blueprint to set this on and we'll also make it blueprint read only

06:07.550 --> 06:08.210
as well.

06:09.060 --> 06:14.880
Now you gameplay effect can be forward declared, so we'll forward declare it up here.

06:15.000 --> 06:17.580
So now we have a damage effect class.

06:17.790 --> 06:23.940
So here in aura projectile spell let's replace the to do with the thing we're supposed to do.

06:23.970 --> 06:31.800
We're going to first of all make an effect spec handle and that means we need the ability system component

06:31.800 --> 06:33.510
that owns this ability.

06:34.060 --> 06:36.190
Now we can get that in a number of ways.

06:36.190 --> 06:42.160
For one, we can always get the Avatar actor from actor info and we know how to get an ability system

06:42.160 --> 06:43.630
component for an actor.

06:43.630 --> 06:52.420
We use you ability system blueprint library and call the function get ability system component passing

06:52.420 --> 06:57.940
in the actor and we can use get avatar actor from actor info.

06:58.660 --> 07:06.130
So that's going to get our ability system component so we can store that in a you ability system component.

07:07.770 --> 07:18.510
And we can call this source ASC and our source ASC is going to need to make an effect spec handle and

07:18.510 --> 07:20.850
we can use make outgoing spec for that.

07:20.850 --> 07:29.090
So we'll say source ASC make outgoing spec and of course this function requires a gameplay effect class.

07:29.100 --> 07:31.920
We have our damage effect class.

07:32.550 --> 07:40.010
We need a level and for now we can either hardcode a level or we can pass in the level of our ability.

07:40.020 --> 07:41.700
Abilities have levels too.

07:41.730 --> 07:44.280
We can get those with get ability level.

07:45.120 --> 07:47.910
So we can just pass in the ability level for this.

07:47.910 --> 07:55.350
But we also have a gameplay effect context handle that we need to make and we can make one using our

07:55.350 --> 08:02.250
source ASC by calling source ASC make effect context.

08:03.060 --> 08:07.080
So this function returns an F gameplay effect spec handle.

08:07.080 --> 08:15.730
We can store that in a local variable of F gameplay effect spec handle type called spec handle.

08:16.780 --> 08:23.140
And if we set this on the ability, then this will be valid and we can set the spec handle on or a projectile

08:23.170 --> 08:27.730
because we have a damage effect spec handle variable.

08:27.910 --> 08:31.060
So let's take that projectile we just spawned.

08:31.090 --> 08:39.010
It's called projectile and we can get its damage effect spec handle and set that to spec handle.

08:40.070 --> 08:44.630
So when we finish spawning the projectile will have its damage effect.

08:44.630 --> 08:49.820
Spec handle set to the spec handle we created from the source ability system component.

08:49.850 --> 08:57.740
Now source ASC can be a const pointer and in fact spec handle can be a const spec handle.

08:58.100 --> 09:04.340
So now we've finished our to do by setting our damage gameplay effect on the projectile.

09:04.340 --> 09:10.130
It's actually going to carry the spec handle along with it and it's up to the projectile to apply that

09:10.130 --> 09:13.380
effect to the thing that it overlaps with.

09:13.400 --> 09:20.630
So that's the next step is to go into Aura Projectile and on overlap, we're going to actually apply

09:20.630 --> 09:21.620
that effect.

09:21.740 --> 09:27.290
Now this is something we should do on the server only as we don't need to do this on clients.

09:27.410 --> 09:32.990
The effect is going to change an attribute and the attribute itself is replicated.

09:32.990 --> 09:39.780
So the end result, the changing of the attribute that will be replicated.

09:39.810 --> 09:41.190
Now we can do this.

09:41.190 --> 09:47.180
If we have authority on overlap, we want to do it before destroying the projectile itself.

09:47.190 --> 09:54.300
And what we need to do is we need the ability system component of the other actor, the actor that we've

09:54.300 --> 09:58.560
overlapped with so we can get that with you.

09:58.560 --> 10:07.470
Ability system, blueprint library, get ability system component passing in the other actor.

10:10.210 --> 10:11.760
And if that's valid.

10:11.770 --> 10:14.260
So we'll wrap that in an if statement.

10:16.160 --> 10:19.610
Then we can go ahead and apply that gameplay effect.

10:19.640 --> 10:27.650
Now we have our damage effect spec handle, so we need to apply that to the other ability system component.

10:27.650 --> 10:31.460
So this ability system component, we should store in a local variable here.

10:31.460 --> 10:34.730
So we'll say you ability system component.

10:35.930 --> 10:45.050
We'll call this target ASC and if that's valid, we can take target, ASC and call apply.

10:45.080 --> 10:48.710
Gameplay effect spec to self.

10:49.040 --> 10:56.090
An alternative is we could get the source of this projectile or the source of the effect and we could

10:56.090 --> 10:58.820
call apply gameplay effect spec to target.

10:58.820 --> 11:00.620
So that's an alternative.

11:00.650 --> 11:07.160
I'm just going to call apply to self here and we're going to use our damage effect spec handle, but

11:07.160 --> 11:12.020
apply effect spec to self requires a gameplay effect spec.

11:12.050 --> 11:15.000
This is an effect spec handle.

11:15.020 --> 11:23.150
Now remember the handle itself has an internal data and data itself is a wrapper we have to call get

11:23.150 --> 11:28.300
and all of this returns a pointer which we have to dereference with the star.

11:28.310 --> 11:32.080
So that is how we're going to apply the spec.

11:32.090 --> 11:39.570
So after all that, we should be applying the gameplay effect using the spec handle and we're applying

11:39.570 --> 11:45.150
it to the ability system component of the other actor provided that that other actor does have the ability

11:45.150 --> 11:46.320
system component.

11:46.320 --> 11:50.910
So the end result is that we're applying this damage gameplay effect.

11:50.910 --> 11:56.790
So to test this we have to set that gameplay effect class on our projectile spell.

11:56.820 --> 11:59.040
Now how do we know if it's working though?

11:59.070 --> 12:03.150
We need some way to know that we've changed the health well.

12:03.150 --> 12:06.000
We know if health has changed in the attribute set.

12:06.000 --> 12:12.450
So until we can see the enemy's health changing with a health bar widget, for example, for now we

12:12.450 --> 12:16.410
can print an output log from our attribute set class.

12:16.410 --> 12:23.340
So if the health changes, we'll just use post gameplay effect, execute when the health changes here.

12:23.340 --> 12:29.880
So after doing our clamp for the health, we'll go ahead and print out some information here.

12:29.880 --> 12:31.740
So we'll say UI log.

12:33.170 --> 12:35.450
We'll do a log temp warning.

12:35.810 --> 12:43.790
The text will say changed health on and we'll say the name of the affected actor.

12:44.690 --> 12:48.560
And then we'll say health and we'll print the value of the health.

12:48.560 --> 12:50.780
So we're going to get the target actor.

12:50.810 --> 12:53.390
We can get that from Props Dot.

12:54.090 --> 12:56.610
And we can just use Target character.

12:56.610 --> 13:00.630
We can use Target, Avatar, actor, either one.

13:00.630 --> 13:07.950
And we're going to call get name and use the asterisk to print the name there.

13:07.950 --> 13:11.910
And then we can also print the value of health with get health.

13:12.210 --> 13:17.610
So if we change the health of something, we'll print that to the log so we can see that at least until

13:17.610 --> 13:20.770
we get some widgets working for our enemy's health.

13:20.790 --> 13:23.370
Now we're talking about enemy health, right?

13:23.370 --> 13:26.460
Which means we're talking about our enemy's attributes.

13:26.490 --> 13:29.820
Now our enemy's attributes aren't really being set.

13:29.850 --> 13:34.890
We're initializing Ora's attributes, but we're not really initializing them for the enemy.

13:35.040 --> 13:37.770
Now, where are we Initializing Ora's attributes.

13:37.770 --> 13:44.270
Well, if we go to Ora character in an ability actor info we're calling initialize default attributes.

13:44.280 --> 13:51.870
We define that in Ora character base where we're calling apply effect to self three times with default

13:51.870 --> 13:55.990
primary attributes, secondary attributes and vital attributes.

13:56.020 --> 13:59.760
Now we're doing no such thing for the enemy, but we could.

13:59.770 --> 14:06.310
And just like the way we're implementing a placeholder effect for damage, we're going to implement

14:06.310 --> 14:13.840
a placeholder solution for our enemy stats because really I'd like a more data driven approach.

14:13.840 --> 14:20.290
I'd like to have different types of enemies and initialize their stats differently based on their level.

14:20.320 --> 14:26.800
But for now, we're just going to give our enemy some default stats just to get things working.

14:26.800 --> 14:31.360
So we're going to call initialize default attributes on our enemy class.

14:31.720 --> 14:38.410
So let's open ora enemy and we can do this after all of our important things are set.

14:38.440 --> 14:42.730
We're setting things here in init ability actor info.

14:42.760 --> 14:48.790
We're essentially just initializing the ability system component and calling ability actor info set.

14:48.790 --> 14:55.510
After this we'll go ahead and call initialize default attributes, but we need to make sure to set the

14:55.510 --> 14:57.730
enemy's attributes in the blueprint.

14:57.730 --> 14:59.130
So we'll do that too.

14:59.140 --> 15:01.150
So a couple things to do to test this.

15:01.150 --> 15:09.640
First, our Ora projectile spell needs its gameplay effect set in the blueprint and then our enemies

15:09.670 --> 15:13.090
need their default attributes set in the blueprint.

15:13.120 --> 15:18.730
So let's go ahead and compile and launch and test out the damage mechanic.

15:20.840 --> 15:22.210
So back in the editor.

15:22.220 --> 15:25.100
Let's see what assets we had open before.

15:25.100 --> 15:26.870
We had quite a few.

15:26.960 --> 15:29.720
I don't want my mana potion.

15:29.720 --> 15:34.580
I don't need my attack montage or these Niagara systems.

15:34.880 --> 15:42.390
But I do want my enemy base because my enemy needs to have its default attribute gameplay effects set.

15:42.410 --> 15:47.760
I'm going to search for attribute and we have default primary, secondary and vital.

15:47.780 --> 15:51.440
Now we only have gameplay effects for these for aura.

15:51.650 --> 15:57.140
So as a placeholder solution, we're just going to share these between aura and the enemies.

15:57.140 --> 16:03.140
So for default primary attributes, we're going to use aura, primary attributes for default secondary,

16:03.140 --> 16:05.300
we're going to use aura, secondary attributes.

16:05.300 --> 16:09.290
And for default vital, we're going to use aura vital attributes.

16:09.290 --> 16:12.320
So we're sharing these with the enemy as well.

16:12.320 --> 16:14.510
Now this is the enemy base.

16:14.510 --> 16:22.260
So if I compile and save this and then I open blueprints character and Goblin Spear, for example,

16:22.260 --> 16:27.690
and open that blueprint and search for attribute, then I'll see that they're set here because we set

16:27.690 --> 16:29.070
them on the parent class.

16:29.070 --> 16:32.060
So we're covered for all of our enemies so far.

16:32.070 --> 16:34.320
They're going to have default attributes.

16:34.500 --> 16:38.970
Now we also need to go to our gameplay ability.

16:38.970 --> 16:47.220
So ability system, gameplay abilities, fire firebolt and open Firebolt because we have a damage effect

16:47.220 --> 16:51.090
class now we created damage so we can set that here.

16:51.120 --> 16:55.470
G damage and compile and save.

16:55.500 --> 17:03.750
Now what we're doing is we're spawning the actor right with spawn projectile and then when the projectile

17:03.750 --> 17:10.470
overlaps with something in its on sphere overlap on the server, it's going to get the ability system

17:10.470 --> 17:17.970
component of the other actor and call apply gameplay effect spec to self with its effect spec handle

17:17.970 --> 17:24.390
and that's being set from aura projectile when spawning, we're going to have our projectile damage

17:24.390 --> 17:28.160
effect spec handle set to the spec handle we're creating here.

17:28.170 --> 17:35.640
So we expect that to work now that our firebolt has its damage gameplay effect class set here in its

17:35.640 --> 17:38.070
class defaults, it's set to g damage.

17:38.070 --> 17:42.900
So what we should see in our output log if we dock that in the layout.

17:44.020 --> 17:52.090
Is we should see our enemy taking damage and we should see some messages on the screen when we hit the

17:52.090 --> 17:52.750
enemy.

17:53.740 --> 17:54.670
And there we go.

17:54.670 --> 17:57.520
We see the enemy's health has changed.

17:57.520 --> 18:00.400
It's now down to 102.5.

18:01.000 --> 18:07.840
And I've noticed something on the client after I hit the fire effect and leave.

18:07.870 --> 18:09.850
I'm not getting that effect removed.

18:09.850 --> 18:13.480
Let's see if that happens on server as well.

18:13.810 --> 18:15.880
Yes, it's happening on the server as well.

18:15.880 --> 18:21.970
So when we end overlap with the fire effect actor, we're not getting that effect removed, so we'll

18:21.970 --> 18:23.080
have to see about that.

18:23.080 --> 18:30.190
But other than that, we are applying a gameplay effect to the enemy when we hit it with a fireball.

18:30.920 --> 18:34.010
So in that regard, mission has been accomplished.

18:34.040 --> 18:39.230
Now I'd like to see how this works multiple times and make sure that health keeps going down.

18:39.230 --> 18:47.030
So after we spawn the projectile, I'm just going to put a little bit of a delay, perhaps 0.5 seconds

18:47.030 --> 18:48.890
and then end the ability.

18:48.890 --> 18:56.570
So end ability just so we can spawn more projectiles and see if we're changing that health and if it

18:56.570 --> 18:57.860
keeps going down.

18:57.860 --> 19:00.740
So from the server, I'm going to shoot a fireball.

19:01.580 --> 19:04.010
We see 102.5.

19:05.190 --> 19:07.710
Now we see 92.5.

19:07.920 --> 19:10.290
82.5 and so on.

19:10.290 --> 19:11.130
So that's working.

19:11.130 --> 19:13.230
Let's try it on a client.

19:14.800 --> 19:16.570
And we see 72.5.

19:16.570 --> 19:22.690
So this damage gameplay effect is being applied and it's working great.

19:23.680 --> 19:29.230
Okay, so before wrapping up, I'd like to address that little side effect, that little bug we noticed.

19:29.530 --> 19:34.390
I'm going to go ahead and switch to one player and step in the fire.

19:34.510 --> 19:38.710
And it looks like if I show that output log.

19:39.950 --> 19:46.010
That I'm losing ten health every second, and if I leave, it looks like I'm only losing five now every

19:46.010 --> 19:46.600
second.

19:46.610 --> 19:52.220
So the effect is being applied one too many times it's being applied twice.

19:52.220 --> 19:54.420
So I'd like to find out why.

19:54.440 --> 20:02.480
Now, whenever I have an overlap volume triggering twice with any given character, it's usually in

20:02.480 --> 20:08.000
my experience because we're overlapping with two different components on that character.

20:08.150 --> 20:15.410
So if I go to Blueprints, Character, Aura and Open Aura, Character Blueprint, notice we have two

20:15.410 --> 20:17.390
components that can overlap.

20:17.390 --> 20:23.780
We have, well, potentially three, but we know the weapon has no collision, but our mesh is set to

20:23.780 --> 20:24.650
collide with things.

20:24.650 --> 20:29.900
It has a physics asset and our capsule is set to collide with things as well.

20:30.020 --> 20:36.380
Now our mesh, if we check its collision object type, we can see what that is.

20:36.380 --> 20:45.660
That has the pawn collision object type and if we check our capsule, the capsule itself has the pawn

20:45.660 --> 20:47.550
collision object type as well.

20:47.550 --> 20:54.000
And the capsule is set to block lots of things except visibility and camera and projectile.

20:54.000 --> 20:55.860
And the mesh is set.

20:55.860 --> 20:56.850
Let's see.

20:57.480 --> 20:58.740
It's kind of mixed.

20:58.740 --> 21:06.150
It's set to overlap the projectile and block some other things, such as destructible physics, body,

21:06.150 --> 21:08.660
world static, world dynamic.

21:08.670 --> 21:13.350
Well, our fire area, I believe, is either world static or world dynamic.

21:13.350 --> 21:14.820
Let's check it out.

21:14.850 --> 21:21.360
I see that it's world dynamic, so we need to make sure that our collision is appropriate.

21:21.390 --> 21:27.180
Our fire area doesn't really want to overlap with two things on the character.

21:27.180 --> 21:28.830
It should only overlap with one.

21:28.830 --> 21:33.420
Now, whether that's the capsule or the character, it doesn't really matter.

21:33.450 --> 21:41.280
The character itself is set to overlap with projectiles and our capsule is set to block things because

21:41.280 --> 21:43.950
we don't want to pass through walls and things like that.

21:44.100 --> 21:48.930
But really we only need one of these to generate overlap events.

21:48.930 --> 21:55.950
So if I take my capsule component, I can actually uncheck, generate overlap events and that should

21:55.950 --> 21:57.250
fix the problem.

21:57.250 --> 22:03.820
If I run into the fire, I should see that I'm only taking five damage and if I run out of the fire,

22:03.850 --> 22:05.920
I'm no longer taking damage.

22:05.920 --> 22:12.700
So that right there should fix the problem and then we can designate our mesh for overlap events.

22:12.700 --> 22:19.180
So if we want generate overlap events set to false for our capsule, we should have that set in the

22:19.210 --> 22:20.950
C plus plus file as well.

22:20.950 --> 22:30.430
So I'm going to go into my private character and or a character, and this might even be something we

22:30.430 --> 22:35.830
can set on a character base and we can just designate overlap events to be on the mesh.

22:35.830 --> 22:37.150
I think that's fine.

22:37.150 --> 22:43.120
Let's go into Aura Character base and we're going to take our capsule component.

22:43.120 --> 22:48.970
So get capsule component and we're going to say set, generate overlap events.

22:48.970 --> 22:50.560
We're going to set that to false.

22:50.560 --> 22:54.340
And we already have our mesh set to true.

22:54.340 --> 23:00.880
So that will be compatible with all of our characters and next time we close the editor down and compile,

23:00.880 --> 23:02.890
that change will be compiled.

23:03.550 --> 23:05.410
Okay, so things are looking good.

23:05.410 --> 23:14.530
We took care of that side effect and we now have fireballs applying effects when they hit things and

23:14.530 --> 23:16.750
that effect is g damage.

23:16.750 --> 23:22.510
And all it does is subtract from the health, it subtracts ten from the health.

23:22.510 --> 23:25.300
So very rudimentary implementation.

23:25.300 --> 23:28.720
As I mentioned, we're going to make this more sophisticated.

23:28.720 --> 23:33.010
In fact, we're not going to affect health directly with gameplay effects.

23:33.010 --> 23:37.450
We're going to use something called meta attributes, which we'll learn about more in the future.

23:37.660 --> 23:40.210
So for now, we got things working.

23:40.210 --> 23:42.790
Great job and I'll see you in the next video.
