Using Godot for the first time to make a game in 48 hours! Miz Game Jam Devlog!

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
the mrs is is is is is game jam [Music] so i made a game if you're not familiar with game jams i don't know how you ended up on this video but if you're not familiar with the concept essentially you have a small period of time to make a game and i did just that and as the title suggests this was also the first game that i made using the godot game engine a little context on me i'm a full-time developer at 343 industries working on halo infinite i've worked with the slip space engine obviously but also i've worked with unity and a little bit with game maker before but i've never touched good oh i've watched several miz's videos i like the content so when i saw he was doing a game jam i was like yeah i want to be a part of that the format of the game jam is he sends us in our kit and then we use that art kit to make the game in this case the first thing i thought when i saw the art kit was that i wanted to make a game that was kind of like a magic shop there's these cute little dudes in the art assets um and i could just immediately picture them like running around causing nonsense and then i saw a bunch of different weapons and potions and such and then i saw a bunch of different villagers that you would see in like a fantasy rpg and the idea just built immediately in my head of have these little idiots running a shop and the core fun of the game is the frustration of them not doing the right thing and then the success you feel when they do complete your orders and when um it's a little bit of a big scope especially considering i've never used the engine before so it does seem like a little bit of a bad idea but i'm gonna go for it anyway i don't know cut to voice over all right so obviously installing goodo is not very difficult didn't take much effort to get that working and i immediately looked up the best tutorials and watched a couple of those getting the assets imported and working correctly and good was a little bit more of a hassle than i expected working with the the tiling system and the sprites wasn't as intuitive as i expected it to be coming from unity but i managed to get it working get a few animations set up for the basic googler actions and movement and then i got ready to take on the next big step which is to make the googlers actually able to move around so the first thing i did was i applied some of the physics stuff that i learned from heartbeast tutorials which a big shout out to heartbeast for helping me through a lot of this and if you're looking to get started with godot would recommend his stuff and so i just got the dude running around it looks pretty good and i was pretty pleased with it so here's an example of what's going on let me just launch this here real fast and you can see he moves awesome great job dude it looks pretty much exactly like i want it i tried toying around with the settings a little bit and he became a big old grandpa please move a little faster and then this one looks fine i mean he just stood there for a long time but whatever it looks okay i did a little bit more tweaking tested it and then i wanted to add some animation so i had to make sure he's facing the right direction he's doing the right thing but uh now you can see that when he moves he does his little walk cycle um and dude where you going turn around stop or something show off the rest of the animations okay he's uh he's on an adventure i guess but whatever the animations work and so now we need to create the actual shop map for the googlers to work in and to move around and explore so the asset pack came with an example of an indoor like tavern area almost that i was looking at for reference i also googled magic store but that didn't give me the fantasy interior design resource that i was looking for so i ended up designing the interior of the magic store based on what i thought i need for the game which i mean duh obviously but i ended up adding a garden out where maybe you could collect alchemical plants that kind of stuff for brewing potions i added tables along which the potions would go i added a piping system out to some water that maybe you could use to fill the potions use somehow in brewing i had a tables in the back for enchanting as well as a warehouse where you could go and get armor of swords and other things that the customers might order i mean i thought maybe the enchanting could tie into the warehouse i had a kitchen for the googlers to go and relax or maybe just goof off in and a lot of the stuff ends up getting cut because obviously the scope is huge and i don't know how i completely overlooked how way out of scope i was going when i was designing this magic shop but i'm still happy with it because it makes it feel very full and full of life and makes it feel more like a real shop even though some of the stuff isn't used because at least the google are still path there in the end i'm getting a little ahead of myself and i'm spoiling it and i'm going to spoil something else for you too the next part of the video where i add the collision and i add the pathfinding the first part of this the stuff that i add gets completely removed or is completely useless by the end of the project but i wanted to leave it in just in case someone here is new to godot and wants to see the kind of things i did and the approaches i took so they know what dumb not to do because i did a lot of dumb but anyway rambling too long let's cut back to the voice over so as you can see i'm painstakingly overlaying the the collision mesh onto the different obstacles so that you wouldn't be able to path around the walls or the tables or anything like that the issue with this is well it works right now because i'm using move and slide and using physics to move the googlers but as time goes on i use positional updates to move the googlers rather than physics because i was having problems trying to update them using physics and the collision doesn't work if i'm just updating the position it won't stop them from moving and here you can see since i'm just running an example they can't pass through the walls they can't pass through the tables and everything's working out just fine even though we will literally never use this collision since everything changes to positional updating by the end of the project but now we can move on to pathfinding and who boy was pathfinding a nightmare so i initially tried to set it up using pathfinder 2d nodes um and i just couldn't get them to work i tried a million different things not only was i using invisible nodes one passable and one impassible for the obstacles which has a million different bugs that could be introduced but also i just couldn't get it to generate the path correctly i even added like a little line and then plotted the line from the googler to where they wanted to go and at first that was wrong but even once i got that to line up with a path that should make sense it still didn't work so i completely abandoned pathfinder 2d nodes once i realized that they were going to be a huge time sync and i was wasting a valuable time that i needed to do other stuff and i came up with my own solution my own solution is pathfinding nodes where each node is basically just a positional store and you can see the little crosses on the map those are all the different pathfinding nodes and they have a list of all their neighbors so from any node it knows how to get to any node next to it and because of this if you have a node and you have its neighbors you can just simply search through the list basically it's a graph at this point you can search through to find the node you're trying to get to and i originally had perfect pathfinding where it would find the shortest possible path you know the shortest nodes that you had to travel through but as i play tested with doing a depth first with random node lookup it actually felt a lot better because it was giving me some of that like googler messing around behavior um and so here you can see here's an example of he starts out in the middle and i tell him to go down into the warehouse at one of those nodes and he finds a path and you'll notice it's not perfect because he's doing random lookup into the graph right where he's not guaranteed to get the shortest path but he is guaranteed to get there and this also gives us a great opportunity to give the different googlers a different intelligence where some of them generate more paths before picking the best one which essentially gives the effect of them being able to pathfind better than the other googlers in the shop and i really like that and that stuck all the way to the end and i still 100 think it's hilarious um even though a lot of people complained about the dumb pathwinding i'm i stand by it i regret nothing i will say that it was time consuming and error prone to have to manually go and add all the neighbors to all the nodes like that but i'm way past pathfinder and we've been looking at a time lapse of me adding the ui for a while now there isn't too much to say about it i basically just added the googler screen with all the options they can take and then a panel on the side for viewing the customers viewing what items they want ordered a picture of them their name and their frustration level those are just it's just all the information you need i also added little pictures with the names of the different googlers i'll expand on this ui later but i just wanted something in place that i could interact and speaking of interaction we will now get into adding the interactables in the shop and being able to deliver those orders to the customers so basically the first thing i do here is set up some mock customers i fill their information into the bar on the right well some of it the stuff that's hooked up and then make it so that we have a definition of what a customer is and then i create them manually on ready rather than having them generate through some kind of means that actually will be used later to create the customer i do this so that i can make sure the interacts are working and i can set the customers to want something specifically so what i do is i have a topaz and later i add the ruby and the sapphire for testing and then i set the customers to want those items and then i create a menu for the topaz the sapphire and the ruby and hook those up so that they have the pathfinding node they need to go to and when you click on that option it tells the googler to go and run the action of creating that and then deliver order just looks through the list of customers which right now is completely mocked to figure out who it needs to deliver to and it just goes in order and then this all worked you could easily interact with the objects and go and deliver the orders which meant the next thing i needed to do was set up the customer spawner and this was definitely the most difficult part of the project because the custom responder logic got a little bit complicated now the main reason this customer order manager code that i'm writing got so complicated is because my architecture for it is just the dumbest i've ever made i have no idea what came over me i maybe i was confused by the control nodes or maybe i was tired or maybe i'm just kind of stupid but for some reason i accidentally merged the customer manager logic and the customer ui logic into the same script which shouldn't do there definitely should be a ui handler script that the customer manager calls into for the ui updates and honestly there probably even should have been a sprite manager for handling the positions at the desk because those were all three separate things that got handled in the same logic there was an array i had of the customers currently waiting at the desk and then a dusk desk assignment array and then there was the ui assignment for each of the customers and those were all mapped based on the customer id that got generated anyway it was really stupid uh but it worked and essentially what's going on here is we have a customer manager and it has a list of all the customers and when they come in they get assigned to the first available spot if there's not an available spot they get assigned to one of the waiting spots and if there aren't any waiting spots they just immediately leave and that works out just fine and here you can see an example of it playing out so the customers get generated there's just a timer and the timer has the constants defined at the top so they can be edited and whenever that timer fires it generates a new customer it gives that customer three one to three random items that it once ordered gives the customer a name and then they pass into the shop and they get assigned a node to wait at based on whether they should be waiting at the desk or if they should be waiting off to the side and then once you talk to them it reveals their name and their order and that all works great the architecture for this is really bad and if you take a look at the source code that's available you'll be able to look at the customer ui script and be like what the hell was he thinking and i couldn't tell you i mean if you look at this was like 5 p.m so i don't even have the the tired excuse i thought i had but in any case now that the customer manager is all hooked up and ready to go instead of using the mocked customers that i was using before now we just have the customers that get spawned here are actually the list that was getting interacted with so we have the core gameplay loop finished customer spawn come in with an order and you can actually fulfill that order by managing your googlers right now there's just the one googler so i don't have the switching and there's only three interactables but that means all that comes next is i need to add more interactables and so that's what we're about to get into one final note before we get to the rest of the interactables is that if i were to continue working on this project i think the very first thing i would do would be to completely refactor this current customer manager system because it's totally untenable the fact that it's not just a hotbed of bugs is a miracle in and of itself but anyway one of the core facets of this game jam is creative use of art assets it's one of the things you'll be graded on of of three and so right now nothing is super creative about what i'm doing so for the interactables i wanted to do something creative so you can see i took some of the sprites from the sprite sheet and touched them up i added like for example the elixir of wisdom i took the campfire turned it purple and put it around the edges to give it almost like this like glowy effect and i took the plus sign and added it onto one of the potion bottles to make the healing potion those kind of little details to try to make it a little bit more creative and on top of that i also needed to add more googlers because there are only three that come in the sprite sheet and so i wanted to do some creativity there too so i took the googlers each of the three and then i modified them with a new color and then i took the plants and used those plants to create the ears so for example the same plant that i use as the dragon's bane is what makes insanio's uh horns or her not her horns it makes in san diego's ears but not only did i need to make some new googlers i also needed to implement the ability to switch between which googler you were controlling this was relatively trivial the way it was working right now was the googler that was getting the instructions from the ui was in the googlermanager the ui sends a signal up to the googlermanager and says hey run this and it was just using an arbitrary goobler so then i just added simply if you press the number key it switches the current googler to that googler and then it runs all of the commands against that one so pretty straightforward another small thing to touch on is adding reputation as the lost condition i just added a bar along the top that tracks how what your shop's current reputation is and if it's zero it triggers the game over screen to lose points you need to lose patience so i also needed to add customer patience and along the way i cleaned up the customer ui a little bit to show the sprite and the name and show the stuff and just look look nice and clean and so it got all hooked in to where if the customer loses their patience you lose reputation if your reputation goes to zero game over and now we need to add a few other cleanup things um basically just a bunch of polish adding music adding different customers and also adding googler info which is the item they're holding as well as what they're currently doing now when i was adding this i made it so that okay if you're currently on your way to do something it says that and if you're in the middle of a task it says that as well say so it'll say like oh i'm brewing an elixir of wisdom and i needed to put in some placeholder text and i just arbitrarily wrote thinking about tacos and it was very funny to me that when they finished their work or finished delivering or whatever it said they were thinking about tacos so i built an entire random thought generator for the goopers so that whenever they're not working or whenever they're goofing off it gives them some kind of random thought and it really just brought them to life it really gave those googlers a lot of personality and i think i would really expand on that personality if i were to continue you know maybe give a different random thought generator to each of the googlers so that they have their own independent personality but anyway it's my favorite feature i really love it and right about here is where i feel i start to really feel like i'm running out of time so i continue my polish work because i want the ui to look a lot better because right now it looks super ugly so i clean up the ui to where i'm happy with it i'm not the best ui ux person but i'm reasonably happy with the end result although i forgot to update the topaz bright so it's yellow on yellow and totally invisible but the colors i pulled from some color palette picker and i grabbed some fonts and i cleaned up the main menu and the game over screen so that everything looks really nice and everything looks really presentable for going up on the jam page as my submission and then in what is the case of me not prioritizing correctly i added a sprite bouncer on the customer so that as they entered the shop they bounce and this was not what i should have been doing i should not have spent 40 minutes making this when i was already running out of time but look look at the preview of this look at those little guys bouncing look at them bouncing right this was completely worth it i i would not change a single thing i'm so glad i did this their bounce is so cute and i love it but now i need to actually focus on what's important to make a tutorial because this game is super inaccessible if the tutorial doesn't look really good and i wasn't sure how to approach it but what i ended up with works pretty well because everything is handled mostly in the googler manager so basically i just added an override where instead of the googler manager actually reacting to things the way they're supposed to the tutorial just completely overrides it and says hey i'm in control now and the tutorial prompts that pop up each have their own button that you can press to go to the next one and they have actions that you need to trigger to tell the tutorial to go to the next stage and then i wrote up all the different texts for the different tutorials and made sure that it wasn't too long but it gave you all the information you needed and it wasn't overwhelming and i also decided at this point that you'd start with three googlers and the other three would slowly come as you continued playing and so this was basically all the features i wanted other than the fact that the difficulty was absurd right from the start and i also didn't want it to be easy so i needed to add ramping difficulty and ramping difficulty wasn't tough to add it only took me like you know 15-20 minutes um testing it took a little bit longer but it was a pretty fast feature and it just essentially there are there are several categories of difficulty and those can randomly increase which is the customer spawn rate the reputation loss rate the patience loss rate and so every couple i think it's every 30 to 45 seconds uh one of those difficulties will randomly increase and then all that was left to do was for me to clean up the ui and then i had a little bit of time left over and i realized there wasn't any super strong justification for continuing to play there wasn't any sense of reward so eventually it got really stale so i just added the ability to see the gold you earned where completing orders earns you gold and so that displays in the top left so that's that that's the end of the project the game came together really nicely i think i'm really happy with the way it turned out um and i've been seeing some of the feedback a lot of people really like the game some people really hate the odd pathfinding and it sucks that that was what i ended up needing to do to get the kind of goofing off mechanics that i wanted rather than having dedicated uh goofing off mechanics but i'm still really happy with the overall feedback and the positive tone it does suck that the game's resolution is like way smaller than i thought it was going to be i kind of like messed that up which makes it really inaccessible since it's so small and i don't have a way to increase the size of it so that is one huge mistake where the rest of the game works perfectly but that one thing makes it way worse but that's just a problem with me not being familiar with the project settings in godot and speaking of godot overall i really love the game engine um i think it's probably better than even unity um and i was a really big fan of unity when i heard other people switching from unity to godot i just kind of like scoffed and rolled my eyes but i'm glad i gave it a chance because it's really good it's really powerful it almost forces you to have good code architecture it's like i had a node for the customer manager and a control node for the ui so it basically was forcing me to set up my scripts correctly i didn't listen and mess it up because i was a little confused at the time i guess but it really forces good architecture it's really powerful gd script is nice and easy to use it's very forgiving and yeah overall i really like it i hate control nodes as i use them more i got more familiar with them but from the outset the control nodes are really hard to use and i did never get the pathfinder 2d nodes to work correctly but i think those were more my inexperience with godot and i think the more i use the control nodes and the more i use the pathfinding the better it'll be um so i have nothing but praise for godot and also really huge shout out to heartbeast because his tutorials were absolutely critical for my success in this project lost and also a huge shout out to insanio for playing it on stream and for her whole community for playing testing the game and helping me find bugs i know insanio found a few bugs mk found some bugs rave helped a lot with editing this video as well so big shout out to my peeps over in the in san diego community um yeah this is my first indie devlog that i've ever posted so if you watch it to the end thanks so much i really appreciate it and i'm hoping to be able to release more content like this and i'm gonna try to continue improving releasing better stuff maybe not make you know 15 minute long monologues where i very dryly discuss all the details of my game but hey we'll see how it goes uh yeah so like comment and subscribe i really appreciate it and also go play the game if you haven't played it yet it's amazing it's the best game you've ever seen pause right now and go play the game i'll have the just the link in the description and let me know what you think of it it's the greatest game ever made no doubt uh i truly believe that and i'm not being sarcastic at all um yeah i'm kind of just rambling at the end of this video because i want to make sure i'm not forgetting anything but honestly i should probably just like stop talking maybe just like an abrupt
Info
Channel: Inbound Shovel
Views: 11,881
Rating: undefined out of 5
Keywords: Godot, Game Engine, Godot Game Engine, Unity, Unity3D, Unity2D, Godot2D, Which game engine is better, which engine is best, best game engine, game jam, miziziziz, miziziz, miz, miz game jam, miziziziziziz, itch, itch.io, first, first game, new, goobler, game dev, devlog, indie, independent, indie game, danny, arin, brian, david, gilbert, insandio, goobler's magic store
Id: _AX1PzUfxRg
Channel Id: undefined
Length: 20min 57sec (1257 seconds)
Published: Mon Aug 31 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.