 Hello there! So, I think that it's been two weeks since I started organizing some assets on my drive and I decided that I had so many Kanae's assets that was not implemented on Godot yet, so I always had to pass through the process of implementing them. So I decided to make a project that would implement a lot of Kanae's assets in Godot. In this video I actually just want to report this process because I learned a lot during the process of making this implementation and organizing some assets. So let's start with that. The first stuff that I implemented was the audio that were, I think, the 370 plus file stream implement there. So I decided that I wouldn't make this manually, so I created a script that would automate the process of taking some source files, so it would take some OGG files, and it would automatically create some stream player nodes, so if we go to, let's say, the RPG sound effects, it will automate the process of creating all these nodes here, and it will also automate the process of creating some audio stream random pitch, so if we go to the RPG sound effects, all of these are basically just audio stream random pitch resources. So if I want to create another sound effect, I can basically just go into an audio stream player and drag and drop this there, and there we have it. So if I play this, I will get the sound effect. But what I wanted to do was to create this audio sound effect library, and I also created this node here, which basically just take a sound effect, let's say, if you want to play the chop effect here, this one. I can call this from another node, so I can basically just do this and play chop, and what it will do is that it will take the sound effect and play it. So it will get the node and play this. So if I test this scene, yeah, we got this. But if I don't pass anything here, if I just call the play method, it will randomly pick a child here and play it. So it's good for, let's say we want to make a library of sound effects for footsteps, so footsteps, and I can merge this from this RPG scene, so here we have the footsteps, and I will convert them to, yeah, audio stream player to D, and I just need to drag and drop this sound effect library into this node. It will automatically play one of these sounds, every time I call this play function, and since they also are audio stream random pitch, they will always play with random pitches, so good. So this is good for creating some libraries, let's say we want to group some sound effects together, and we want to play any of the sounds that we have here. It's kind of like the audio library we had in 2.1, because we don't have it anymore, so it's kind of sad. So to the next process, I created the tilesets, and I also automate them because Kenny has a lot of tilesets, so I created this tool that helped me assign the proper textures to each tileset. So if I go to the grass scene, I created a basic, kind of like a template, a template scene with the collision shapes already set, and all that this tool does, it takes a directory which is contained in this tile set library, so I just have to drag and drop this to the scene and set a directory here, so I can set, let's say, Sets, Candy, and TilesBrown, so it will take all these textures and assign them to all the children of this node, so kind of handle it for me, because there was a lot of tiles to do, and what I also did was to create, I think that I automated the process of creating this Therese files, it basically run through all these scenes, so this scene will go to this scene, this scene, and every scene that is inside these folders, and create the Therese, so the tilesets, and if I want to make a prototype of a label now, I just need to basically just drag and drop whatever I want to use as a team of the level, so let's say I want to make a cave, so I can basically just drag and drop this here, and let's say I want to create a desert, and let's say I want to create a nice level, or just a grass, and I also implemented some mushroom tilesets from Candy, so pretty cool, right? I also implemented some characters, and this one was actually a little bit trickier, because I had to took all the textures and rename them to fit a folder, so since I use Nautilus, which is my distro default file explorer, I can basically just select as many textures as I want, and rename them, so it's kind of a batch rename for files, so I can basically just set bath, and choose a suffix for this, so I choose a prefix and a suffix, and after that I just needed to run this tool that I made here, what is it? Oh, okay, so 45, it will take all the textures that are in a given folder, so in this case the enemies folder, and it will create folder for them using the prefix that I use, so the batch in this case, and then it will create these folders and move every file with this prefix to this folder, and then update the file system, it will create the directory, move the files, and then update the file system, and then the interesting part is this scene file tool that I created, it runs through all the folders, creating some sprite frames and some scenes as well, so it will assign these sprite frames to a scene packet and save it to a given path, so all of these, apart from the actual rename and the textures that I imported, all of the process of organizing and creating the sprite frames, so the animations was created procedurally as well, all of this was created with this tool, so the process was kind of cool to make, so now I just, if I want to prototype an enemy, so I just want, I just need to drag and drop it, let's see a play, yeah, so I can drag and drop it B here, make it play as well, and let's say I made this, but I want to make a cave level, right, so I can delete this, this node, go here to the tile set, and now I want to make a cave, just to see how this goes, so I will delete this, because it doesn't fit, doesn't quite fit, and now in the characters I want to add the path, so a path scene here, which will be here, so let's add some paths here, you just have to drag and drop stuff, talking about the characters I also add the players, so if I want to drag and drop a player here, and let's add, well as you can see there are a lot of animations, so I can basically just, I don't, let's say, we want to tell the programmers that whenever the the bat reach this character it will be hurt, or we just want to make this walk here, start from here, so play animation, and all of this was automated as well, so using these tools that I created, and let's see, oh and the interface, so let's see, I think that I will add this, I also automated the interface, and this one was the most time-consuming one, I thought it would be pretty easy to do, but it wasn't, because UI is kind of hard to automate because it needs a lot of tweaks and this kind of stuff, so I created a tool that will take a given theme, one of these, I also create a gd script that extends the theme resource, so every of these themes has a script attached to it, which will allow me to set a main color and a font color, so I use this main color to make the style boxes, so I created this style box facture script here, which will take a theme and use its main color and font color to create some style boxes, it creates a lot of style boxes as you can see here, even some, where is it, even some empty style boxes, and using of course this extension of the theme class, so every theme here has a main color and a font color as you can see, and after creating these style boxes, I created this script and this one was very very very tricky to do because it needs a lot of ad hoc solutions, as you can see here, a lot of exceptions, and it's very specific to my project structure currently, so what it does is that it takes some, it run through all these classes here, so box container, button checkbox, it run through all of these searching for style boxes, so it searches for style boxes here, and it will take a style box and set it to this class, so all of these was also automated in this script, but I don't know, it took a lot of time to do, so I don't know if the cost of doing this actually paid off this automation, so the checkbox I think that the check button also has these tiles, so as you can see the check button is, every style of it is just empty style boxes, so I had to create this exception here, and the label as well, so it uses the empty style box, as you can see it's a lot of exceptions here, but at least I learned a lot with that, so now we just need to drag and drop themes into some stuff, so we have the theme here, and let's say I want the green theme, and oh, as you can see some cool stuff that I did here with the theme phi is that when it takes the, I think that is the set color, in the shadow it, I learned that we can use some methods with the color class that invert the color, so I don't know if you can see on the screen, but it has this shadow with the inverted main color of the theme, so this theme is green, and the shadow is purple I guess, so we have the blue and the orange shadow, which is kind of cool in my opinion, and we also have this, so let me show this, we can drag and drop this here as well, and everything will be tinned as needed, so this was the last thing that I did, and this was the last implementation, and it will be available in the Godot asset library soon, I also made an asset page on HIO for this, so it is on the pay what you want model, so you can get it for free, or you can add some tip, so you can help support this project, I will put the link in the description, and also all of this with the phyzex, with the AI, with everything that will handle the actual game logic, will be available in my platform template as well, so I made a huge update implementing all of this with the phyzex and some platform mechanics, if you want to buy my platform template, the link will be in the description as well, go there and support this work, because it took a lot of time to do, and of course that all of this was made possible thanks to the awesome patronage of my patrons, which by the way lets welcome Luis Balesques and Rebecca Araujo, my newest patrons, thank you so much for your support, if you want to support my work in general, just go to Patreon and support me there, there are a lot of cool perks and rewards you can get there, so that's it for now, thank you so much for watching, keep developing and until the next time!