 everyone. It is Crypto grounds here. Welcome back to another unity idle game tutorial video this episode 3.3. And today we're gonna be making upgrades that produce other upgrades. If you enjoyed this video and if you learned something new, make sure you leave a like and subscribe to my channel if you're new around here and turn on the bell for future notifications of videos and live streams. Anyways, let's just get on to it. So what I've done so far is add a third button for our generator upgrades. And I also added a horizontal layout group component to our tabs. And I turn on the control child size width. So what that does is that it automatically resizes all the buttons inside of here so they can all fit. So it looks something like that. But I'm not gonna have that many buttons and I would probably add a scroll bar or something like that or maybe an arrow if I wanted to cycle through all of these buttons. But anyways, just know that I have three buttons now. And I added a horizontal layout group. So in our generators button, I want to replace this production string with the generators. So when we click on generators, it's gonna open up the generator scroll. I also want to add the generators upgrade scroll. So I'm just going to copy and paste the production one and create a generator one. I'm gonna rename all of these. Okay, so let's go to our data class because there's some things I want to talk about here. So something important I want to talk about is that in order to make these generator upgrades, they can't be ints. Okay, so I want to produce production upgrade levels. So I'm going to change my int list to a big double list. So I'm going to change this as well to a big double. And we're going to have some other errors, we will fix that in a little bit. So now I'm going to create another list for our generators. So it's gonna be an int list. And this will be our generator upgrade levels. And same thing down here for our constructor. So that's all we need to do in data so we can get out of here. Now in our upgrades manager, let's fix these error real quick. So our update UI is taking in a int list right here. So what we're going to do is we're going to add a generic to this method. So what we're going to do is add angle brackets and put a T inside of it. So T represents a generic. And that basically represents any object we put inside. So instead of taking an int list, we're gonna be taking a generic list. So we can pass in a big double list, an int list, a double list, a float list, whatever we want here for our upgrade levels. So this makes it so we don't have to copy and paste this for every single one we want to do. So we don't have to do, okay, this one's going to be specifically for ints. This one's going to be for big doubles. And it just makes it much easier. And we don't have to worry about actually having to add on in the future. So the next one we need to fix is this by method. So for this one, this one's a little different because we are trying to add one to an int list. And generics represents anything, it could be a string, it could be a character, it could be an object, it could be anything. So the issue here is that when we're adding one to a generic list, it doesn't know what it is, it could be an object, you can't just add one to an object. So while we're just going to have to copy and paste this method, and do big double lists instead. So the issue here is that we cannot use the same by name, even though we have different variable types. So we must move this outside because these are local methods. So I'm going to move this to the outside and do private void, private void, because we want to restrict these methods to this class only. So we also need to add our data. So we grab our data from here. So our var data equals controller dot instance dot data. And we'll do the same thing here. Now we also need to pass in an upgrade ID and a type. So our upgrade ID is an int and our type is a string. So we're going to pass this through as well, string type and int upgrade ID do the same thing for the other by method as well. So now we are capable of doing these for our big double levels and our end levels. So we also still need to pass in our type and upgrade ID arguments. So we have our type and our upgrade ID and do the exact same thing for the other by method. Great. So this is a bit of copying pasting. But we again, we can't use generics like we were trying to earlier. So all of the red is out of the way. Now we can start implementing our generator upgrades. So one thing you may notice is that we are starting to get a lot of copying pasting action here. So how can we solve this? Well, I'm going to create a brand new class just so we can have one object to call for all of this because this is getting a bit repetitive now. And I kind of get tired of copying pasting everything. So I'm going to make that right now. So what I'm going to do is I'm going to create a brand new script. And I'm going to call this the upgrade handler. So this is going to handle all of the UI that we create and all the base costs. So once we open that up, we pretty much want to move all of this into our upgrade handler. So I'm just going to copy this for now because we will delete it later. So I'm going to paste that in. And I need to import everything. So we need to include the unity engine dye UI namespace. And we also need the break infinity one. So next I'm going to clean this up a bit because we only need one instance for everything. So we only need one prefab one list of upgrades. We only need one scroll one panel. We need one upgrade name string. And we need one for cost. So I'm just going to clean this all up and rename everything. So as you can see, we have our upgrades, our upgrade prefab, scroll, panel names, base cost, cost molt, base power, and our unlock. So now when we create a brand new upgrade handler, we will manually assign all of these. So now let's head back to our upgrades manager. And we will again, we'll delete this later. So at the top. So what we're going to create is an upgrade handler array. Alright, so so first we want us to start upgrade manager. So I kind of noticed one thing I forgot to do was to expand this upgrade check for our production upgrades. So let's do that real quick. And we might as well do that for our generator upgrades. So again, this is to make sure that our upgrade levels is a size of four, nothing more. And we do it just like that. Now we can create a new array for our upgrade handlers. And now we can create a new array for our upgrade handler. So upgrade handlers equals new upgrade handler. And that's going to be a size of three, because we have our click, our production and our generator upgrades. So now we need to assign the names to our first upgrade handler. So our upgrade handlers at index zero dot click upgrade names, we renamed it remember, so it's just going to be upgrade names. And then we're going to assign our names here, we're going to do the exact same thing for our production upgrade names. So that index one and dot upgrade names, just like that. So now we need to actually figure what our generator upgrades are going to do. So let's see. I was thinking the first one would produce the first upgrade. The second one would produce the second and just we'll just keep that pattern. So our upgrade handlers at index two, our names are going to be so the general format for our upgrade names is going to be produces plus 0.1 of these upgrades per second. So I put this in parentheses, so be parentheses plus one flash per second upgrades per second. So the name might be a little confusing. But if you were to produce your own names for these upgrades, and then have separate descriptions that describe what they do, then maybe it would make more sense. But I'm just going to do it like this. And I added the dollar sign for string interpolation. And to add quotation marks, I have I you have the backslash before all of these. So I'm going to do the exact same thing for all of them looks just like that. So we have our four upgrades. And next we need to do our cost information. So it's pretty simple is just like that. And now we need to do our generator upgrades. So I'm just going to say they're more expensive than the production upgrades. So here's all of my cost information. And at this point, I'm just doing a bunch of random numbers into here. So later on in the series, I will have a few episodes, I don't know how many except I don't exactly know how many, but I will dedicate some episodes into balancing your game. And that really is a lot of play testing. So you kind of just want to start from the beginning and play your game and see what's too slow, what's too fast or what's good. And you kind of adjust from there. But right now I'm just doing a bunch of numbers just to make it functional. So we will do the balancing later. So I know it may seem a bit silly. But so next we need to do our upgrade button creation process. So we need to rename all of our prefabs. And it looks just like this. But however, I feel like I should just create a method just to do this because we only need to take in one variable and that would be our level. So let's do it. Actually scratch that we need to take two because of the upgrade handler we actually want to manage. So I'm going to create that we're quick. So in our create upgrades method and our local method, we're going to pass through our level. So I'm going to make this a generic because we have big double lists and int list. So again, we need to put in our angle brackets, put in the T for generic, and we're going to pass through a generic list. And we will also pass through our int index. So this will be used for accessing our upgrade handlers. So I'm just going to copy paste all this. All we need to do is replace this quick upgrade levels with our level list and replace the zeros with our index. That is all we need to do. It's very simple. Even that means we can delete this one as well. And delete this for loop. And now we can just call create upgrades and we'll just put in the list that we want to manage. And the index we also want to handle. So that would be zero. And we'll do the same thing for our production upgrades and generators. So instead of having three different for loops and just changing one of the variables, we can just create a method here and call it with three different lines. So it's just very clean. You don't have to if you want to change something in here, it'll change for all of these as well. That's the really cool thing about making methods like this. And now we need to change the variables for our scrolls. And in all honesty, we can throw this into our create upgrades. So I'm gonna do that. So now every time we call this, it's going to change the normalized position of our upgrade scroll inside of our upgrades handler at index index, whatever we pass through. So it's going to do that for all our click production and generator upgrades. And next, we need to update our generator UI. So the same thing in our update method, I feel like we can create a method for this. So if you don't remember from the last episode or if you didn't do it, this is our upgrade unlock system. So basically, your upgrades is going to show up right when you have a certain amount of flash and it will stay unlocked. Now, if you don't have this, you can simply ignore this step. But if you do, I'm going to create a method just like our create upgrades, and we will be able to call three lines instead of having three different for loops. So what I did is that I copy and pasted this for loop in here, and I replaced click upgrades with upgrade handlers at index index dot upgrades. And I did that for all three of these. And then I replaced the data flash with currency and replace the upgrades unlocked with a big double list called unlock. So if you have like a double list instead, and then you also have like a big double list, if you have two different types of lists for our unlocks here, then you will have to do the exact same thing that we did earlier, where you created two methods outside of our updates. So just a heads up. Now I'm going to replace all of these with the upgrade unlock system method. Also, my bad, this is actually a big double array. So here we go. Our upgrade unlock system, we're going to call that and we're going to pass through our flash as our currency, our upgrade handlers at index zero upgrades unlock, and we'll pass in the index zero. And this will be one, this will be two. So just like that, we only have one for loop to change instead of three. So next in our update upgrade UI method, we need to change all of our current variables. And I'm going to get rid of the old stuff because it's going to make it easier to see what I actually need to change. So I'm just going to simply get rid of all of these. You can see we have lots less to look at. So let's fix all the red. So click upgrades accounts. Again, we're going to be accessing our upgrade handler. So this is what it looks like. So I'm going to move that down because you can't see it. But so I replaced all of the previous stuff with our upgrade handler. And we're going to do the same thing for production. So as you can see visually, there's a lot of repetition going on. So I'm actually going to change this update UI with actually all of this. So pretty much we're going to keep all of this here, but we're just going to kind of adjust everything. So I'm going to create a method in here that just specifically controls this because we call update UI twice. So I kind of want to reduce that repetition. So I'm going to rename this update UI to update all UI. And I'm going to create a new method called update UI. And I'm going to move all of this into update UI. And now I'm going to move all of this stuff in here into update all UI. So now let's actually manage all of this here. So now there's a few things we can do in this method. So the first thing is that we can get rid of this in ID. And the reason is because we already have an upgrade ID as a parameter inside of this method, so we don't need to pass through it twice. The second thing is that we actually have upgrade ID and we have I so we only need to pass through an ID through this update UI method. So we got rid of it here and we're going to simply move it to here. So we have our ID in here. And this method is good to go. So we don't need to pass in the upgrades level the upgrade aims, we only need to pass through our ID. So we can simply just get rid of all these. And the reason why we want to get rid of those is because we already pass them through. So we don't need to pass them through our update UI twice. So it'll just be the eye and upgrade ID. Next thing we need to add is actually an index. So we do actually need an int parameter after all. So now this index will go inside our upgrade handlers like that. So now this is very, very short. And it looks very nice. And now we can simply replace update all UI with all of this. Now what we can do is just replace all of this stuff with update all UI. So let's do that. So inside of our update all UI, we need to pass them our upgrades. Well, we already pretty much do that. So just copy and paste all of this. And our index will actually be zero. We can get rid of this and copy and paste this for our production upgrades. So this will be one, one and one. And our level will be production upgrade levels. Boom. See how nice that looks. Now we can do the exact same thing for generators. And if you decide to make more upgrades in the future, all you have to do is simply just copy and paste this, change the numbers of the index and the level variables. And that's it. That's just minimizing all the work we have to do in the future. So we're doing all the hard work now. But in the future, it'll make it a lot easier for us. So I'm going to replace all these ones with twos and replace the level with our generator upgrade level. So we're done with this method. Next, we need to go to our upgrade costs. So here we need to replace our base cost and our cost mode with our upgrade handler stuff. So again, I'm going to create another one of these methods just to make it extra clean. And because it looks nice, so I'm going to create a new local method. So all we're going to pass in is our level in our index. So we have an issue here. Our first levels here is an end list. And then we also have a production level here. So again, we can't just copy and paste this and use int in this one. It doesn't work that way. We have to move it outside of this. So unfortunately, we're going to have to do that. Instead of calling this cost, we're going to give it another name just to make it a little more specific. So these are the names I gave them. And now we can just copy and paste our old stuff into here. Now we're going to replace our zero with our index. And we still need to pass in an upgrade ID because these are no longer local variables. So we'll add that. And we need to access data by changing this to controller dot instance dot data. Silly me. I just realized that these were void methods. We're returning big doubles clearly. So here you go. That's what it looks like. And now we can do the exact same thing for our upgrade cost ints. We also need to add an upgrade ID parameter. So now when we go here, we can simply replace all of this with return upgrade cost big double. And this is our click. So this will be an index zero. And our levels is right here. And we'll be passing in through our click upgrade levels and our upgrade ID as well. This is actually an int oops. So our upgrade costs at index zero. And we'll be passing in through our click upgrade level in our upgrade ID and for production. We'll do the same thing but replace zero with one and we'll pass in through our production upgrade level. And we need to rename this to big double. And now for a generator since they are ints, we're going to be calling the upgrade cost for ints. And we're going to be passing in through our generator upgrade levels. And our upgrade ID will be generator. So there we go. It looks a lot better. And that is all we need to do for the costs. Next is our buy upgrade. I'm not going to make anything special here because we already have a buy here. So so we're going to add a case called generator and we're going to pass in through our generator upgrade level through our buy method. And we already have the type in upgrade ID. And that is all we need to do in our upgrades manager. So next let's go to our controller. So we still have some red here, but we just need to adjust the click power and the flash per second. So instead of accessing upgrades manager instance, click upgrades base power, we're going to be accessing our handler that we created. And we're going to be acting that in X zero because it's click. And this will be the base power. So in our flash per second, we're going to be doing the exact same thing, except we're going to replace the zero with one because one is where all the production stuff goes. So we have all the production here, but we don't have the generation for our upgrades. So let's do that real quick. So things are going to look a little different here. So our first generator upgrade is going to produce the first production upgrade. The second will produce the second and so on. So we're not going to be using any for loops here. And we also need to pass in an integer. So what we're going to be doing in here is we're going to be returning upgrades manager dot instance dot handler. And remember the generator upgrades are index two. So at index two dot upgrades base power. So in this method, we're basically going to grab the base power like we do here. And we're going to be multiplying it by our generator upgrades. So it looks just like this. So we're going to be returning our upgrades manager dot instance dot upgrades handler at index two. And we're going to be accessing the upgrades base hat, the upgrades base power index index, and we're multiplying that by our data dot generator upgrade level at index index. So okay, so that's all we need to do there. So in our update method, I'm going to be adding on to the level. So we're going to be accessing our production upgrade levels. This is so weird to do because you used to just buying the upgrades, but now we're actually going to be producing them. So it's a little weird when you look at it first. And so we're going to be actually doing this in a for loop because we have more than one upgrade. So in a for loop, we're going to run this starting at zero and we're going to be keep going until the count of upgrades. So however many upgrades we have, and we're going to be accessing the upgrade levels at index I, and we're going to be adding it by our upgrades per seconds at index I, and we're multiplying it by our time dot delta time, just so we can get the correct per seconds. So now our upgrades should produce when we have our generator upgrades. So let's see. So that is all we need to do functionally. The last thing we need to do is solve some more errors, which occur in our navigation. So if you remember, we actually have to turn on our scrolls for upgrades. And we use the old click upgrade scroll and production upgrade scroll. So I'm just going to replace it with the new stuff. So here you go. This is what we looked like. And we also need to do the generator. So this is starting to look a little repetitive or copy and pasting stuff. So if we were to add a few more of these, yes, I will convert this into an array. And this will make our lives a lot easier. But three is not going to kill us. So I'm just going to leave it as is. But if you want to challenge yourself, if you want to give that a try, go ahead. Okay, so just to review my changes, I have added the generator upgrade selected and the title text. I have added this one right here for the generator upgrades. And this is for our upgrade scroll. I have automatically turned off the generator upgrade selected and made the title text gray. I have changed all of the upgrade handler scrolls here. And I added stuff for our generator. So it's the same drill, our generator selected title text, and we access the upgrade handlers at index two. So that is all we need to do in here. Now we actually have to reassign everything. Oh, no. So here comes the annoying part. So let's go to our scripts, our upgrade manager. And let's check out our upgrade handlers. And this is the nice thing as well is that this looks very neat. And until we have to actually add everything. So okay, so let's see, we have three upgrade handlers here. Now we actually have to create those. Actually, just remember that I do this, I don't know why I did this but I'm probably because I'm so used to creating new arrays like that. So I was like, okay, it's just going to be cost and stuff only not UI, but I forgot we actually have UI in here that we have to assign. So let's get rid of this line here and head back to unity. Now what we're going to do in here is go to our create empty. And we're going to create an upgrade handler. And this will be for our click upgrades. So now we're going to drag in our upgrade handler into this. And we're going to sign everything in here. So really, this is not much, we just have to sign three things. So as I am assigning all of the UI to all my handlers here, we have to create a generator prefab and we need to modify the upgrade script. So let's do that real quick. So same drill as usual, we have our by click upgrade, and we have a production, we're going to do the exact same thing for our generator. So we have our by generate upgrade. And we're just going to replace the type with generator back to unity, we can now create a new prefab. So I'm just going to drag in a random prefab. It could be click or production, whatever you want. I'm just going to drag that in. I'm going to unpack this prefab completely, rename this to generator upgrade. And then I'm going to head to my button components and replace this by production upgrade on click method with the generator one. And now I can drag this into our prefabs, and it will create a generator upgrade prefab and delete the original. So now I'm going to show you what I've done. And in my click upgrade handler, I have assigned my click upgrade prefab, my click upgrade scroll and my panel. Same thing for productions and for generator, I can now assign my generator upgrade prefab. And then I also did the scroll and the panel. So back to my upgrades manager, we can drag in our upgrade handlers individually. All right. So that is all we need to do for upgrades manager. We still have our navigation to do. So we have our selected and our title text, which we already have, I'm going to assign those. So now we can give this a shot. And hopefully this runs just fine. Okay, so we have our click production and our generators, which doesn't show yet. So let me get some progress and I will catch up with you guys. So first issue I see is that our generators isn't working. So we can access our generators and let's take a look. I see basic mistake. I accidentally put generators instead of generators. So that's just a dumb mistake I made. And one more thing that I did something very silly is that in our upgrade cost for big double ints, I accidentally used click upgrade level instead of our levels that we pass in through. So make sure you pay attention to that stuff. It's little details that kind of screw things. It's a little details that kind of screw things up. And one more forgot to replace us with two for our upgrades. Oh my gosh, I'm missing all these little things. I'm sorry, guys. All right. So now I have unlocked the generator upgrade, which costs 5,000 flats. Let's get there. Let's buy it. Let's see what it does. I have a good guess that we're going to see some weird decimal here when we buy this, I guarantee it. Ready? Ready? Okay. Okay, so it's producing the upgrades. I think I rounded it to zero decimals. I think that's why we don't see we see the production going up. So that's good. So we're producing point one percent, which basically we're increasing our production point one flat per second. So that looks correct. But we need to show our decimals here. So let's go fix that inside our upgrades manager. So in order to show this decimal, we're going to have to do a lot of detours here. So if you remember our update all UI method, we created a generic. We added our generic here so we can just pass in whatever we want. So if we go to our two string and do F2, the problem here is that not every object works this way. Only number variables or number related variables can actually do this. So this issue here is that we actually have to move this to the outside. I know, I know, I know, I know, I know, I know, I know, I know you guys are thinking right now, I must be insane right now. But I trust me, this is how it works. So we're moving this update you all. So we're moving this update all UI method to the outside, we're getting rid of our generic and we're replacing this list with int and big double and okay, if this is going to be a problem for you guys, if you hate having two of these methods, make all of your upgrades the same list type, make them all big double lists, make them all endless whatever you want. I have endless and big double lists. But if you were doing them all the same, it would be more consistent and less efficient because big doubles are bigger than ints. So just a heads up. But we're going to be sticking with the way I'm doing it, which is the the ugly way. So now we need to actually pass in an upgrade ID. So it ends up great ID. And we need to do the same thing for our and now we need to pass in our type. So we have our endless working, we also need to do a big double. So we're going to place our endless with a big double list. And that's it. So again, it's a lot of copy and paste I know. Next and inside each of one of these we need to pass through our upgrade ID and our type. So now we will be able to see two decimals in here. So let's see. Yeah, that looks like an alien. So we're going to have to do some modifying inside of our prefabs for that to look proper. So if you want to test this, just open up any prefab I opened the click upgrade one, go to your level text and just put in a random number like 1.00. So that's what it would look like. But it looks very messy and bad. So to fix that, turn on auto size or just reduce the font size, which I'm going to do this instead because it just could automatically adjust to whatever the level is like that. So that should look right. And back out of it and do the same thing for each of your upgrade prefabs. So I'm just going to turn on just going to go to my level and turn on auto size back out of it's production upgrade. Same thing. Now when we run it, the numbers shouldn't look as bad. Okay, it's it's still not the best, but it's it's we're getting there. It's better. And I'm going to adjust the UI in the future. So I'm not going to mess with that now. And so if you don't like having the decimals for your click upgrade levels, a nice thing about having these two separated is that you can just make the end levels an F zero. So it shows no shows no decimals, but for your production, it will and it might be kind of vital. Okay, so now let's buy this generator upgrade and see how it works. So buy it and you can see. And as you can see, this isn't changing at all, but it'll change when you click on it. So as you can see when we click on it, it's adjusting the costs and your level. So this is another thing that's going to be kind of an issue with this is that we're going to have to create new variables for our levels for whatever we generate. And so it doesn't affect the cost. So so let's fix this updating issue and the cost issue real quick. So for the update upgrade UI, this occurs whenever we buy something down here, and also at the very starts. So what we can do is grab this production upgrade and go to our update method. And so now the check to see if we're in the scroll, we're simply going to be accessing our handlers at index one, because that's where production upgrades are, and we're going to be accessing the scroll. So that upgrade scroll and GameObject.active self. So if this scroll is active, we're going to be updating our UI, which will be our production. So that's all we need to do here. So that fixes that issue. And the next issue is actually with our costs. So we're going to have to go back to our data and create a brand new list. So this will be for our production upgrades generated. So generated, create a brand new array size four, and we're going to convert that into a list. So to start off with, we need to find everywhere we use upgrade level, and we're going to be either adding on the upgrades generated or not. So let's just do control shift F. And we can see that we use it in quite a bit of places. So we'll start with our controller. So our flash per second is going to be based off our level. So now instead of doing just multiplying the base power by a level, we're going to add level to our generated. And it looks just like that. Next, we actually add instead of to the level itself, we're going to be adding to our upgrade generated. Next, let's head to our upgrades manager, because I know we do quite a bit here. So starting with the upgrade checks, we need to check to see if our generated list is also size four. Next in our updated next in our update upgrade UI, things are going to be a little awkward because we have a generated here, but we don't hear and hear as well. So I'm going to make tweaking these just a little bit because one of them is going to have a second level and the other isn't. So how we're going to do this? Well, first of all, let's just see which one we use here. So we do update all UI. And this is a big double list. So so let's head down to our big double version right here. So I'm going to add a second parameter for our upgrade levels. And this will be our upgrade generated. And now so we're going to make this an optional parameter. So what we're going to do is that we're going to set this to null. So basically, it means it's just an empty. It hasn't been created yet. And we need to move this to the very end because it needs to be after all required parameters. So just like that, it is at the very end after a string type. So now when we access our upgrades generated, we're going to be adding these two together. But now it's going to give us a little warning here. What if this is no? If this is no, it's going to mess things up. So how I'm personally going to fix this is going to make a temporary variable called generated. So for our big double generated, we're basically going to check to see if this is null. And if it is, we're just going to say, okay, we have no extra generated upgrades. Otherwise, we're going to say that yes, we do. And that's whatever this is. So we're going to check to see if upgrades generated is null. And if it is, we're going to set generated equal to zero. Otherwise, we're going to set it to upgrades generated at index ID. So now we can replace this upgrades generated with the generated variable I have created. And that should work just fine. So now we can pass through our optional generated variable here. And that will be our data dot production upgrades generated. And we are good to go. So now it should no longer affect our costs or anything else or anything related to our upgrade. So let's give that a try. Alright, so let's buy this generator here. But and as you can see, it's starting to update now. And it's not affecting the cost. So that means it has worked finally. Alright, anyways, guys, I know this was a really long and complex videos. And I really hope it wasn't too confusing. And I wasn't jumping around too much. I know I'm known for doing that quite a bit. And I'm I'm sorry, guys, this was a bit more complex than I was thinking at the top of my head, it would be if it worked out for you guys. And if you enjoy this video and if you learned something new, make sure you leave a like, subscribe to my channel if you're new around here and turn on the bell for future notifications of videos and live stream. If you want to support the channel, join the discord below and click that join button or check out my Patreon in the description below. Anyways, guys, I will see you in episode four and we are going to get our save and load system going. Yes. My least favorite part. No, it's all serious guys, this is actually me a really important video. And I know in my previous series I didn't do a good job explaining and maybe coding it out. So this time I'm going to be doing that I'm going to be explaining everything that goes on in the save and load system for you guys to learn as well and for you guys to follow along and jot down. So yeah, guys, I'll see you guys in the next one. Thank you guys for watching. I hope you guys have a great day or night. Peace. Just a heads up guys. If this video was too complex, if I jumped around too much, I will be more than welcome to redo this video. So if this video was a pain in the ass for you, let me know in the comments below. And if enough people were requested, I will gladly redo this video. So just let me know. And I will be sure to look for you guys comments. Thanks guys.