Finally a tutorial that covers the "why" and not just the "what". Well paced, clearly explained and properly sized to make it digestible. Thoroughly enjoyed making this Vampire Survivor. GDQuest is my go-to place for all things Godot!!
@@Gdquest I second that! The explanations you gave for everything that we typed were awesome. It helps so much when you explain the syntax and the logic behind the programming!
@@mikk.t.7824 Might be more accurate to say science is about "How" since "Why" usually involves moral or motivational questions which can't be answered from a purely Empiracle approach. Q: How did my house burn down? Science: "Because of a chemical reaction in genetically engineered fruit reached a temperature high enough to ignite the wood paneling of your house which provided ample fuel which combined with the airflow of the house provided oxygen allowing for combustion" Why did my house burn down? Reason: "Because you told Cave Johnson that sometimes life gives you lemons and he got angry and decided to use ridiculous methods to get back at you" Science is one of the disciplines and has limitations.
For anyone else that encounters mobs sticking to the player when they collide from above, be sure to disable all moving platform layers of the `CharacterBody2D` nodes. In the Inspector panel of the `CharacterBody2D` nodes for both the player and mob, expand `CharacterBody2D` > `Moving Platform` and disable all layers in `Floor Layers`.
What triggered this behavior is that by default, Godot 4 has calculations to detect moving platforms, for side-scrolling games. So if a character is on top of a moving platform, it'll move the character with the platform. In this case, when the slime walks above the Player Character, Godot thinks that the Player is a platform and the Slime is on top of it so it moves the Slime with the Player Character. Ideally, in Godot, the "Moving Platform" should not be on by default because it doesn't make much sense outside of platformers. Thanks @seanolson6958 for sharing the fix with everyone. I'll try to add a caption for it in the video.
Truly one of the best tutorials I've ever followed. I usually give up after 30 minutes due to bad or confusing directions and getting stuck, but I had no problem following along with this one all the way through. And I'm really happy with the results that's given me a good foundation to build upon!
I have seen a lot of comments regarding the fact that they are taking constant damage/losing health no matter what is happening, so I'm commenting here to help future people. Basically you have to change your player hurtbox collision mask to that of the collision layer of your slimes(a lot of people seem to have missed this part of the video 1:44:00). The reason why you were taking constant damage was probably because your player collision layer was set to 1 while your hurtbox collision mask was set to 1 by default, so your hurtbox will constantly detect the player and hence constantly damage you. Hope this was helpful
This is huge, I picked up Godot a few days ago and watched a bit of a different tutorial but never actually made any progress because of how overwhelmed I felt. Today I decided to give it another chance and you guys upload this. Thanks!
I'm only 30 minutes in, and I have to say this tutorial is excellent. The second you bring up something where I'd like more context or something explained a bit more in-depth, the very next breath is you doing exactly that. Bravo, sir. You have taken the teacher role seriously and passed with flying colors.
The use of path2d to spawn mobs was very smart! Great tutorial. I've been using Godot for 3 years and have even finished a game, and yet I've learned a lot of new techniques from this video.
That's really very nice to read. It's exactly the balance I was hoping for the tutorial between being accessibile to beginners but still useful to experienced devs. Thanks a lot.
This was one of the best videos on the channel. Here are some questions about how we could improve the game, like Brotato style, I mean how we could start these: 1 - How to add a wave system? 2 - How to add upgrade items? 3 - How to make enemies drop coins to buy items? 4 - How to make trees breakable and drop items? 5 - How to make a home screen, with settings and character selection? 6 - Create character properties and update as items are picked up?
This was a tutorial, these are good follow on questions that I'm looking forward to learning more about as well. I'd add: 1 - How to add multiple enemy types and randomly spawn them 2 - How to add multiple items/weapons and randomly spawn them 3 - How to add item tiers, e.g., normal, rare, legendary
I went from launching Godot for the first time to completing this tutorial in just a few hours! This is really exciting, and so much more accessible than my attempts with Unity. I also found all the easter eggs, what a clever way to earn discounts. I applied them all, and have preordered the courses for next year. :) It's clear you're all very passionate about how to teach in the most effective ways. I'm really impressed, and looking forward to the rest of this journey. Thank you!
@@Gdquest I can assure you that folks like myself will watch it twice simply because we missed the coupons. I didn't realize until over halfway through the video that the whistling was supposed to be a cue to look for the code. I thought it was my roommate trying to distract me or an ad on one of my other windows.
This was such a great start in game development. I was looking for an updated tutorial and a Vampire Survivor style project was an amazing idea. Thanks!
Just want to confirm this is a great tutorial and worth the time. It is split up into sensible chunks, so you don't need to watch the whole thing in one go and can easily go back and review. The author is obviously experienced at teaching and I felt there was has high empathy toward the student (compared to some other tutorials out there). It can be daunting learning a new complex UI with a plethora of options, but GDQuest does a really great job of making sure you understand what he is doing and why. So all in all... Great tutorial! I agree with the others, definitely something fun you can do on a lazy Sunday afternoon! Super fun! Thanks GDQuest! Great job... PS: I also had to do two runs of the vids! I missed the 'Easter Eggs' on the first run because they pop up real fast and I was poking around in Godot! So pay close attention! There is a little 'whistle' when they pop, so if you hear one of those - make sure you are looking at the tutorial, not you Godot editor!
@@aydnsafi2054 - -It was, however I think they no longer apply. I believe they have expired and are no longer valid.- Edit: Looks like I was wrong! See below. Maybe is the best option is to just collect 'em and have a go! Still worth looking at the tutorial though! It is a corker.
This is really great. As a programmer that's used Unity casually in the past, I've taken a few half-hearted stabs at Godot in the past and never really understood the "scenes and nodes" paradigm. A hands-on project format like this really helped. Now I feel like I have a pretty solid foundation of Godot and can continue on from here. Thanks for this.
For anyone with as terrible hearing as me: at 29:40 he's saying Ctrl+D A second note on that, it doesn't select all instances of the text, you might have to press it multiple times.
I just subscribed yesterday after going through your Godot 2021 series for a few days and successfully making the Dodge the Creeps game, and this is the first new video I see on my feed. Best surprise ever! Thank you for making Godot so accessible to aspiring game devs!
I want to thank you and the team for all the time and effort you put into these videos and content, it feels so goo to create the first project on the journey of Game Development! Rivers of Gratitude
You did a great job making this really engaging, I didn't intend to get through so much since I go back to work tomorrow after a 2 week break. I started and the time went so fast I didn't realise I was close to done already. Thank you.
16:59 In order to close the Current Scene window, the key command is F8 (for those wondering how he was able to close the window without clicking anything). 1:04:55 The quick switch to the Rotate tool is done by pressing E. Hovering over the icons in the top of the View window will display their shortcut keys.
A few notes, _generally pertaining to optimizing this project,_ based on my personal preference: *-* References to existing objects, such as _"HappyBoo"_ for the player character, can instead be done via an _@export_ variable to allow for greater versatility; if the node changes location in the scene tree, for instance _(even without a unique name),_ Godot will automatically update corresponding _@export_ variable entries. *(@export var happy_boo: Node2D)* This also makes changing the referenced object easy, and not require an update to the script. *-* Function calls pertaining to animation, such as the player character's, can be done from _func _process()_ rather than _func _physics_process()_ for efficiency, as the latter tends to be run more often, so purely visual effects would generally be better handled within _func _process()._ *-* It may be desirable to use a static variable for the enemy's reference to the player character, though I rather use a normal variable I named "target_node" _(instead of "player"),_ which I could change on a per-enemy basis to define arbitrary locations for each enemy to travel towards, which I can use to give enemies more interesting behavior. Enemies could, for instance, randomly decide to travel to nearby trees, or other nearby enemies, or could additionally have behavior for moving away from the target, and thus randomly travel away from a nearby enemy or tree instead. *-* _@export_ variables may be good to have for packed scenes as well, such as the gun's bullet scene. *(@export var bullet: PackedScene)* Godot will handle updating the scene reference when the file path is changed from within the Godot editor. *-* Instead of setting both the _global_position_ and _global_rotation_ of a newly spawned bullet individually, the _global_transform_ value (which includes rotation and position) can be copied from the gun to set _position_ and _rotation_ at the same time. *-* An excuse to introduce the functionality of _Path2D_ and _PathFollow2D_ is nice, but I prefer to use a bit of math and get a proper circular border to spawn enemies on. What I did was create a new "CreepSpawner" scene inheriting from _Node2D,_ and with a single _Timer_ child node to handle spawn timing. The _CreepSpawner_ has an export variable for what kind of enemy it spawns _(multiple enemy types could hypothetically just be done with multiple spawners),_ and another export variable for its desired spawn radius. When its timer elapses, it chooses a random angle with _randf_range(0.0, TAU),_ then turns that angle _(spawn_angle)_ into a position based on radius _(spawn_radius)_ with _Vector2(spawn_radius, 0.0).rotated(spawn_angle)._ I can then just have the _CreepSpawner_ be a child of the player character; a new enemy has its _global_position_ set to the spawner's _global_position_ plus the randomly chosen position. It might sound like a lot, but it's basically just two extra lines of code in the enemy spawning function, rather than dealing with any _Path2D_ node. Using a wide, rectangular path as shown in the video produces uneven spawns, as most of the path is angularly concentrated toward the top and bottom and corners; a square would be less bad, a regular hexagon less still, but a circle is perfect. Side-note: My function to choose an angle does happen to be minutely biased to the angle of 0, as TAU radians is equal to 0 radians, but it's impossible to observe in practice. *-* The "Motion Mode" of player character and enemies should be set to "Floating".
Very helpful, thanks! Although func _physics_process is synced to the "physics ticks per second" you set in project settings (default 60), and func _process is run as fast as possible on every rendered frame.
As a totally newcomer explorer to all things Godot, this post is amazing as it answers many questions I had. I was feeling very uneasy with too many ‘preload’ and ‘nodes’ string based lookups… as it seems that any change: the hierarchy or renaming the nodes would create problems right away. There was still that ‘has_method’ one though, will see about that later.r Don’t get me wrong, this tutorial has been great, I even like the Path2D idea as it gives artistic freedom to any designer to create crazy spawn paths if need be; but there are definitely so many things I would like to know more about… GDScript seems to work perfectly with the existing built-in functionality but will have to dive deeper into more custom tailor made things. Is it easy to make a pool that reuses bullets? Do we have to or in Godot is fine without them (as it’s reference counted)? Using a full IDE like Rider? Etc
@@alejmc For a bullet pool, the bullet-firing weapon could be provided with its "pool" of bullets _(as child nodes)_ on startup, with each of these bullets able to be "active" or "inactive". Instead of instantiating a new bullet each time one is to be fired, the weapon would need to find one of its inactive bullets to activate and shoot, with each bullet merely deactivating itself instead of freeing itself from memory upon hit or age-death. Maybe the weapon could simply have an integer variable for which index value (of its child array) to be looking for an inactive bullet at, and increment this value by 1 whenever it sucessfully fires a bullet or notices the corresponding bullet at the index is already active. *Alternatively **_(likely a lot better),_* the fired bullets could send signals to their corresponding weapon when they deactivate, and the weapon could have an internal array of unfired bullets. _The signal sent would include a reference to the bullet node itself._ In this case, the gun would fire the last element of this array _(removing from and adding to end or arrays is most optimal),_ thus activating the bullet and removing it from the array, and any bullet which sends its deactivation signal to the weapon gets added back to the end of the array. The weapon can thus only fire if the size of this "inventory" (or "bullet clip/magazine") array is nonzero. This system minimizes the instantiation and deletion of objects, which could be quite nice for performance, but it _of course_ introduces stricter limitations on how many bullets can be active at once. I think such limitations could be an elegant aspect of design, especially if incorporated diagetically, such as, _in this case,_ with a gun which isn't resupplied from external sources, but rather has limited ammunition which (magically?) travels back to the gun after having been fired, or perhaps instead a magic staff which must continuously provide energy to all active projectiles, and thus has a limit to the quantity of them which are simultaneously active. Otherwise, Godot seems to have nice garbage management systems. Anything inheriting from _RefCounted_ is automatically cleaned up when no longer referenced, and the _queue_free()_ function is generally a good option for nodes and such. *The online documentation with extra information and tutorials can be found at docs.godotengine.org* Bonus idea: Enemies with enemy spawners as children. Maybe enemies can create _(temporary)_ paths as they walk, which additional enemies may spawn from.
@@BinaryBolias that’s quite a complete take on pools! Thanks! Could call for a generic pool management, maybe even Godot internal for all things pooling. In a full production environment I think I would go for enemies, bullets, VFX, etc to be as such.
I hope you stick around. Some of the choices made in the tutorial were deliberately aimed at simplifying the cognitive load but many of your observations lend themselves to an excellent second iteration. Thanks for posting them.
Awesome! I hope you have a lot of fun with making your own projects. You're welcome to join our Discord server and share whatever you make. Some people are extremely helpful with feedback and sharing what they learn. You can find the invite in the description.
This is one of the best tutorials for development I've ever seen. Thank you so much for all your content & the app to get started with GDScript. Also, explaining all these shortcuts when you need them is a blessing on it's own. It feels so intuitive to use the Godot engine :D
I started learning Godot this week and a vampire survivor like was first little project I wanted to do, I searched for a tutorial literally the day before yesterday, thank you guys
Was able to follow this tutorial really easily. Even added in tree-spawning directionally (so they spawn randomly but only in the direction I am currently moving). I plan to customize it too, to show spawn counts and kill counts as well as have the gun follow the mouse rather than getting the nearest mob. I think doing simple customizations like this will really help understand the logic. The only area I got tripped up with was collision layers/masks. I missed the step to set the hitbox collision layer and it took me a while to figure that one out.
Thanks for highlighting exactly where you had an issue! This allowed me to go back and watch the editing there and think about the recording and how to improve it.
@@Gdquestfor sure! I think a little demo showing what happens if you have the wrong layers set. In my issue, my PLAYER was set to the wrong layer and it caused damage to itself. When I had damage set to 500 I would insta-die on load.
This tutorial is the most friendly to follow I have attempted. I was able to follow along without issues as far as instructions. I paused it a few times to input the codes and I did not finish in one sitting, but was able to pick up without issues. I have seen videos that jump around too quick or move there mouse too sudden. Thankyou
Thank you for this. I completed your free starter coding program and now this tutorial. I feel like most of the lessons I find make me feel a sense of hopelessness and frustration. Your lessons are thorough enough that I generally find success and learn something with every action, even if I don't remember 50%. Maybe someday I will look back on this comment from a position of a successful developer and smile. IDK. Thank you
Thank you for writing this. Please keep going and don't give up. Most roadblocks to understanding are a matter of finding the right explanation for you. I think of it as a long term treasure hunt or quest 😉 where you keep track of the areas that are still fuzzy for you and you flag them as subjects for which you're still looking for an explanation that works for you.
This is such a great tutorial. Thank you so much! As someone that does programming full time this hits the sweet spot between explaining enough learn godot but not spending too much time explaining the basics. I have really enjoyed following along and looking forward to expanding the project using my own sprites!
I just installed Godot (came from unity) and I followed this tutorial and learned so much. There's a few requests I have: -Spawn trees as you move around, but not on places where you've already been. -Shoot on click and on the mouse angle. -Display score. -Pick up bonuses to improve the bullet power. Some of them I know how to implement some I don't.
Yeah I'm trying to figure out a good way to implement random object spawns as well as bonuses both seem tricky. I think having a guide on how to build modular systems can be a great video as well!
Hands down the best Godot tutorial I watched... I started this week making a bullet hell vampire survivor game but felt a bit stuck. This helped a ton and I have tons of ideas on how to build on it. Thanks
For anyone who has a problem with the layer and mask setup for the gun not detecting slimes, I had to delete and re-add the Gun node to the Player node for it to work right. For whatever reason it would only work if I had the mask and layers set on BOTH the Gun node itself AND the Gun node that was a child to the Player node, but after removing it from the Player node and re-adding it, it worked as the tutorial showed. I've read of similar problems in other projects, I don't know if there's a way to update/reload/purge cache/whatever besides deleting and re-adding that would fix this.
Thanks a lot for writing this. I hope you showcase your project in the Discord server. It's always nice to see where gamdevs start and what they end up making over time.
There are many godot tutorials on youtube and how-tos but none so finely detailed and as clear as yours, you got a new subscriber. Very high quality video
Such a good job you guys are doing ! It's been almost a year since I started thanks to the similar video you released in Godot 3.5 that really helped me make things click ! I reached a level now where I think I should be the one doing tutorials on some advanced code structures !
what i love about this is that you are a great teacher. you have a great grasp on what someone who doesn't know any coding would know and work from there. you don't assume external knowledge. you work step by step but include dead ends so we can backtrack and understand why we do certain things. when i see a 10 minute tutorial, i know i'm going to spend twice that time with the video paused trying to understand the code i just copied. You do a great job of demonstrating why you take every step. subscribed.
I had no idea that the access as unique name was a thing. that's killer for onready variables so I don't have to worry about re assigning the node path every time I reorganize my node tree.
You can also export statically typed node variables to likewise get a node regardless of path. Pro: it works in any scene. Con: you have to assign the path in the Inspector ahead of time. Example: `@export var my_sprite: Sprite2D`.
I just wanted to say , that , I've completed very short (just adding trees in the scene and before) and the tutorial is so well explained , it carries developer tips to quickly improve , and makes coding easy too , I had never found any tutorial that good , If you want to learn godot , It is highly recommended
1:31:44 Hi, I noticed a small tweak that might help. Try swapping these two lines of code: %ShootingPoint.add_child(new_bullet) new_bullet.global_position = %ShootingPoint.global_position This should give us the effect we’re looking for. Keep up the great work!
Really impressed with this course, while simple and understandable, it goes through all important parts and why-s of how things done and for what reasons there are X and Y features, and how to use them. For a fairly experienced dev without any gamedev experience this was quite informative as a godot intro and overview of baseline features needed in likely every game possible.
This is an amazing tutorial! I learnt a lot of ways to do things simply via existing Godot systems that I just didn't know were there. Thank you so much for taking the time to create this 😁
For y_sort_enabled, the shadows appear in front of the player when the player walks above the tree. But the shadows should always be behind the player. How do you do it such that y_sort_neabled doesnt affect certain child nodes of tree, like its shadow? Edit: I figured it out. Basically the z index is the ultimate in figuring out which gets drawn in front of what. Higher z index means will be drawn first. Ysorting only applies if something is on the same z index as another. So what I did was to change the z index of the shadow of the tree to be -1. This makes it such that the shadow will always be rendered behind the player, trees and the white background. Since I want the shadow to be in front of the white background, but behind the player and trees, I changed the z index of the background to -2. So the z index for background =-2, shadow of tree and shadow of player =-1, tree and player = 0.
Thanks for that! I scrolled down the comments a bunch ctrl+f'ing for "shadow" until I found this. I thought I couldn't be the only one it bothered haha.
I literally had no prior experience when it comes to game development. I mainly work on robotics/computer vision with python/c++ etc. so I have decent coding experience but never touched any game engine. Just wanted to do something fun and this video helped me grasp the fundemantal concepts really well. Thanks for uploading this video!
What crazy timing, I just picked up Godot a few days ago and have been building a VS like game and was running into some issues and then this video gets released today! Looking forward to going through this, thanks!
Hi guys, i got a problem at 1:14:21. The problem is that I specified all the parameters as in the video, but my gun does not change its position at all, can anyone help?
Honestly this tutorial sparked my interest in making games, and it was really fun making it in godot, I tried many tutorials in the past for various engines but this is the one that clicked with me! Thank you so much for making it! Are you planning on making a part 2 for it? With more in depth mechanics like, stats, waves, perhaps even maps and most importantly levels and items. I think it is essential for these kinds of games and having a guide on how to do that would provide so much knowledge for creating so many things and not just the ones for the purpose of this project!
This is a great tutorial and absolutely on a proffessional level compared to other amateur efforts. I finally understand what does what and why. And it manages to do the harder thing: not over explaining.
Thank you for this great tutorial. However, I need some help with this problem I am facing. At 1:45:25 you start adding health to the player. When I type var overlapping_mobs = %HurtBox.get_overlapping_bodies(), the selection for a popup with get_overlapping_bodies() never appears, so when I run the entire game later when we finish it, it never works. I assumed that I set the area2d node or collision shape incorrectly, but after checking the scripts and redoing the code, it still would not run correctly. I would include the error message, but there wasn't any. Is there anything that I could be doing wrong?
It's about learning from zero. We provide learn gdscript from zero, for people who have never coded before, Godot tour 101 to introduce the editor, and then they can jump on to this, effectively allowing them to start learning from zero.
Whenever I do tutorials, I say "make it my own", it's the best way to learn from them; At the end of the video he states "copy, customize, create". I love that he stated this and that has gotten an instant subscribe from me (also the tutorial itself was excellent and the best beginner tutorial for godot out there).
@@Gdquest The fact that you are also responding to comments on a 7 month old video astounds me even more! If I ever know someone learning godot, I will give them a shove in this direction too!
Ok, I've been looking into your courses, and I honestly think that I will buy the big bundle. It looks amazing, I very much enjoyed this tutorial, the Kickstarter looked also very promising, and you were incredibly kind to me and all of your commenters. Keep doing what you're doing! And also, are you really a single person?
The only thing he really did is animations and some basic character code, which you can probably learn somewhere else, this video was more about writing the code, and making the actual layout of the game from premade assets
It kind of bothers me that you said "You should know at least a little bit of coding" then go on to explain what a zip file is and how to unpack it. Those two things are diametrically opposed. If you added in a corollary that this part is for beginners, or a timestamp to skip this part, I'd have less of a gripe.
We provide a free course to learn code from zero in the video. We just don't want to slow down the video by having to introduce every code concept. Overall it's designed to be very accessible.
Perfect tutorial for beginners who just read introduction of docs. Important functions are well explained with straightforward game example, helping audiences to establish clear understanding of how the game engine is used.
Gotta say this is an *excellent* tutorial, I've been looking for more after finishing the Brackeys ones but kept running into "beginner" ones that failed to explain the "why" of things enough to really build an understanding of what's going on. After watching this though a lot of things started making a ton of sense! I managed to make a basic lil addition to the script that flips the gun sprite so it's not upside down when it goes to the left of the character! It might be a simple change but it adds some polish and it's the first new "feature" I've figured out how to code by myself! Gonna see if I can figure out how to implement more new stuff tomorrow... maybe a wave system? Should be fairly easy to check if all the mobs are dead and then set a timer until a new wave begins, and then increase the mob spawn rate each wave.
wow, thank youuu so much! finally, my FIRST finished "game" by watching Godot tutorial (I've seen severals before, but always lost in the last few chapters). Thank you! I'm really a noob in game dev, just started like month ago with different engine. You guys really a big help! :) Thanks!
Rougelites are one of my favourite game genres and I'm happy to be able to actually create one! I've had a lot of trouble dropping projects halfway because of complexity and being overwhelmed, so thank you lots for the simple and easy-to-follow tutorial! Can't wait to learn more ^^
This video is definitely worth watching twice. Once to take notes on the technical stuff and again to code along. Thanks for sharing the best basics tutorial!
took me another, 3 hours? after the tutorial finished to implement a kill counter(getting signal linked from the slime instances was trouble), add the score to the game over screen, make the slimes increase speed the longer theyre alive, AND add a restart button to the game over screen(which now also deletes the player when he dies, and causes the slimes to stand still). the fact that this one got my problem solving juices going is awesome. love it
This was intuitive and easy to follow, I'm very impressed with the quality of the tutorial! Thank you for putting this together, this has inspired me to give Godot a shot!
Great tutorial - really insightful. My top troubleshooting tips for anyone that's struggling are: - Check your spelling! And, - When Ctrl-dragging and dropping, check your paths match those on the tutorial! (I lost an hour looking for info on preloading when it was simply that the path hadn't copied in full)
I was accumulating all of this info over days through forums and small tutorials and here everything is compact in one video. Guess i still learned some more but this would have been great 😅 Thanks for the great vid!
Exceptionally explained and easy to follow! Already thinking about some simple features I could try to implement from another tutorial. All in all, feel like I learned a lot in a very short period of time.
excellently done, Nathan! quite the upgrade from the oldie Dodge the Creeps tut :) this should go into the official docs and replace the previous one on the Getting Started section there.
Thank you! I'm glad you liked it. We'd have to take GDQuest's name out if it were to go into the Godot Docs. That would prevent us from making a living and continuing to push content out.
I'm going back to Godot development (started with Godot 3) and this is such an great Godot 4 tutorial. Even though I'm using C# in following this tutorial, the great explanation/tips in this tutorial and improved Godot 4 C# docs really helped me in my journey back to game development using Godot. Thanks!
Very helpful. I want to learn Godot, and am planning to watch one of this kind of code-along video while doing it, then make something original using what I learned, and repeat. Seams to be an effective way to learn so far.
If you get to _physics_process(delta): in the video, as of 12/6/24 on Ubuntu 24, if Godot autocompletes to "func _physics_process(delta: float) -> void:" that's fine. just leave it as is and continue programming as normal.
This was a genuinely amazing tutorial, i am basically a head empty baby when it comes to game dev, but thanks to you kind sir, i now know a great bit more than i did before. I tip my hat to you.
Hi, thanks for this tutorial and course, this was very clear! The very first that I listened to and watched first, then tried to apply it and copy. I'm heading to the next step for me: try and make a new mob or something like that to see if I understood correctly! Thanks for this ! :D
Finally a tutorial that covers the "why" and not just the "what". Well paced, clearly explained and properly sized to make it digestible. Thoroughly enjoyed making this Vampire Survivor. GDQuest is my go-to place for all things Godot!!
So rewarding to read that. Thank you.
@@Gdquest I second that! The explanations you gave for everything that we typed were awesome. It helps so much when you explain the syntax and the logic behind the programming!
"Science isnt about what, its about why." Quote i made inspired by Cave Johnson
@@mikk.t.7824
Might be more accurate to say science is about "How"
since "Why" usually involves moral or motivational questions which can't be answered from a purely Empiracle approach.
Q: How did my house burn down?
Science: "Because of a chemical reaction in genetically engineered fruit reached a temperature high enough to ignite the wood paneling of your house which provided ample fuel which combined with the airflow of the house provided oxygen allowing for combustion"
Why did my house burn down?
Reason: "Because you told Cave Johnson that sometimes life gives you lemons and he got angry and decided to use ridiculous methods to get back at you"
Science is one of the disciplines and has limitations.
i wish i could buy the paid ones (i don't have a job though)
For anyone else that encounters mobs sticking to the player when they collide from above, be sure to disable all moving platform layers of the `CharacterBody2D` nodes. In the Inspector panel of the `CharacterBody2D` nodes for both the player and mob, expand `CharacterBody2D` > `Moving Platform` and disable all layers in `Floor Layers`.
Thanks for this fix.
@seanolson6958 Thanks for contributing and being around.
This worked, thanks! What's the explanation for why this worked, though?
What triggered this behavior is that by default, Godot 4 has calculations to detect moving platforms, for side-scrolling games.
So if a character is on top of a moving platform, it'll move the character with the platform.
In this case, when the slime walks above the Player Character, Godot thinks that the Player is a platform and the Slime is on top of it so it moves the Slime with the Player Character.
Ideally, in Godot, the "Moving Platform" should not be on by default because it doesn't make much sense outside of platformers.
Thanks @seanolson6958 for sharing the fix with everyone. I'll try to add a caption for it in the video.
@@Gdquest This makes perfect sense, thank you for the explanation!
Truly one of the best tutorials I've ever followed. I usually give up after 30 minutes due to bad or confusing directions and getting stuck, but I had no problem following along with this one all the way through. And I'm really happy with the results that's given me a good foundation to build upon!
totally! Great tutorial
Fr though, I have the exact same experience
I have seen a lot of comments regarding the fact that they are taking constant damage/losing health no matter what is happening, so I'm commenting here to help future people.
Basically you have to change your player hurtbox collision mask to that of the collision layer of your slimes(a lot of people seem to have missed this part of the video 1:44:00). The reason why you were taking constant damage was probably because your player collision layer was set to 1 while your hurtbox collision mask was set to 1 by default, so your hurtbox will constantly detect the player and hence constantly damage you.
Hope this was helpful
I had changed the visibility mask and not the collision :x (I lost 30 minutes)
Thank you so much. upon rewatching this part, i remember seeing these settings being made but somehow forgot to set them myself.
@@SamSevenUp lol i did the same thing
YOoowww Thankyou so much i was researching for about 30min on why this happens.
This is huge, I picked up Godot a few days ago and watched a bit of a different tutorial but never actually made any progress because of how overwhelmed I felt. Today I decided to give it another chance and you guys upload this. Thanks!
I'm only 30 minutes in, and I have to say this tutorial is excellent. The second you bring up something where I'd like more context or something explained a bit more in-depth, the very next breath is you doing exactly that. Bravo, sir. You have taken the teacher role seriously and passed with flying colors.
The use of path2d to spawn mobs was very smart! Great tutorial. I've been using Godot for 3 years and have even finished a game, and yet I've learned a lot of new techniques from this video.
That's really very nice to read. It's exactly the balance I was hoping for the tutorial between being accessibile to beginners but still useful to experienced devs. Thanks a lot.
This was one of the best videos on the channel. Here are some questions about how we could improve the game, like Brotato style, I mean how we could start these:
1 - How to add a wave system?
2 - How to add upgrade items?
3 - How to make enemies drop coins to buy items?
4 - How to make trees breakable and drop items?
5 - How to make a home screen, with settings and character selection?
6 - Create character properties and update as items are picked up?
This was a tutorial, these are good follow on questions that I'm looking forward to learning more about as well. I'd add:
1 - How to add multiple enemy types and randomly spawn them
2 - How to add multiple items/weapons and randomly spawn them
3 - How to add item tiers, e.g., normal, rare, legendary
Will you cover these at some point?
@@real_rob251 nah bro go ahead and find them on your own itll be more fun
yeah please do these things it will help a lot of people including me GDQuest!!
yeah please do these things it will help a lot of people including me GDQuest!!
I really like the Godot Engine. This tutorial really helps for a lot of begginers. You're making a good job!
So glad it works well :)
@@Gdquest i have a problem when i fully swap up the vertical bar in 1:52:46 my color gone to fully white . It doesnt make my color colorful help me
I went from launching Godot for the first time to completing this tutorial in just a few hours! This is really exciting, and so much more accessible than my attempts with Unity. I also found all the easter eggs, what a clever way to earn discounts. I applied them all, and have preordered the courses for next year. :)
It's clear you're all very passionate about how to teach in the most effective ways. I'm really impressed, and looking forward to the rest of this journey. Thank you!
Thanks a lot for taking the time to write this. It's a refreshing coffee break in the middle of burning the midnight oil.
whats the easter eggs if u dont mind sharing xD, im trying to purchase the course as a gift for my friend who will be studying game dev next year
@@CaptainDouchie he asked not to share it + to watch the video if you want it
Thank you for respecting that :) The intention is not to prevent anyone from getting the coupons. It's to encourage everyone to compete the tutorial.
@@Gdquest I can assure you that folks like myself will watch it twice simply because we missed the coupons.
I didn't realize until over halfway through the video that the whistling was supposed to be a cue to look for the code. I thought it was my roommate trying to distract me or an ad on one of my other windows.
This was such a great start in game development. I was looking for an updated tutorial and a Vampire Survivor style project was an amazing idea. Thanks!
Just want to confirm this is a great tutorial and worth the time. It is split up into sensible chunks, so you don't need to watch the whole thing in one go and can easily go back and review.
The author is obviously experienced at teaching and I felt there was has high empathy toward the student (compared to some other tutorials out there). It can be daunting learning a new complex UI with a plethora of options, but GDQuest does a really great job of making sure you understand what he is doing and why.
So all in all... Great tutorial! I agree with the others, definitely something fun you can do on a lazy Sunday afternoon! Super fun!
Thanks GDQuest! Great job...
PS: I also had to do two runs of the vids! I missed the 'Easter Eggs' on the first run because they pop up real fast and I was poking around in Godot! So pay close attention! There is a little 'whistle' when they pop, so if you hear one of those - make sure you are looking at the tutorial, not you Godot editor!
I'm glad I'm not the only one this has happened to! I've counted 3 coupons, is that right?
@@stevenrivera6464 - I had to go look at my notes... but it looks like there are 4. At least that appears the case when I did it.
@@Temple_Cloud - ah, thanks for that!
what are those coupons? for discount?
@@aydnsafi2054 - -It was, however I think they no longer apply. I believe they have expired and are no longer valid.-
Edit: Looks like I was wrong! See below. Maybe is the best option is to just collect 'em and have a go!
Still worth looking at the tutorial though! It is a corker.
This is really great. As a programmer that's used Unity casually in the past, I've taken a few half-hearted stabs at Godot in the past and never really understood the "scenes and nodes" paradigm. A hands-on project format like this really helped. Now I feel like I have a pretty solid foundation of Godot and can continue on from here. Thanks for this.
For anyone with as terrible hearing as me: at 29:40 he's saying Ctrl+D
A second note on that, it doesn't select all instances of the text, you might have to press it multiple times.
I just subscribed yesterday after going through your Godot 2021 series for a few days and successfully making the Dodge the Creeps game, and this is the first new video I see on my feed. Best surprise ever! Thank you for making Godot so accessible to aspiring game devs!
I want to thank you and the team for all the time and effort you put into these videos and content, it feels so goo to create the first project on the journey of Game Development! Rivers of Gratitude
Thank you for writing. It feels nicer to work knowing people enjoy what we make.
You did a great job making this really engaging, I didn't intend to get through so much since I go back to work tomorrow after a 2 week break. I started and the time went so fast I didn't realise I was close to done already. Thank you.
16:59 In order to close the Current Scene window, the key command is F8 (for those wondering how he was able to close the window without clicking anything).
1:04:55 The quick switch to the Rotate tool is done by pressing E. Hovering over the icons in the top of the View window will display their shortcut keys.
A few notes, _generally pertaining to optimizing this project,_ based on my personal preference:
*-* References to existing objects, such as _"HappyBoo"_ for the player character, can instead be done via an _@export_ variable to allow for greater versatility; if the node changes location in the scene tree, for instance _(even without a unique name),_ Godot will automatically update corresponding _@export_ variable entries. *(@export var happy_boo: Node2D)* This also makes changing the referenced object easy, and not require an update to the script.
*-* Function calls pertaining to animation, such as the player character's, can be done from _func _process()_ rather than _func _physics_process()_ for efficiency, as the latter tends to be run more often, so purely visual effects would generally be better handled within _func _process()._
*-* It may be desirable to use a static variable for the enemy's reference to the player character, though I rather use a normal variable I named "target_node" _(instead of "player"),_ which I could change on a per-enemy basis to define arbitrary locations for each enemy to travel towards, which I can use to give enemies more interesting behavior. Enemies could, for instance, randomly decide to travel to nearby trees, or other nearby enemies, or could additionally have behavior for moving away from the target, and thus randomly travel away from a nearby enemy or tree instead.
*-* _@export_ variables may be good to have for packed scenes as well, such as the gun's bullet scene. *(@export var bullet: PackedScene)* Godot will handle updating the scene reference when the file path is changed from within the Godot editor.
*-* Instead of setting both the _global_position_ and _global_rotation_ of a newly spawned bullet individually, the _global_transform_ value (which includes rotation and position) can be copied from the gun to set _position_ and _rotation_ at the same time.
*-* An excuse to introduce the functionality of _Path2D_ and _PathFollow2D_ is nice, but I prefer to use a bit of math and get a proper circular border to spawn enemies on. What I did was create a new "CreepSpawner" scene inheriting from _Node2D,_ and with a single _Timer_ child node to handle spawn timing. The _CreepSpawner_ has an export variable for what kind of enemy it spawns _(multiple enemy types could hypothetically just be done with multiple spawners),_ and another export variable for its desired spawn radius. When its timer elapses, it chooses a random angle with _randf_range(0.0, TAU),_ then turns that angle _(spawn_angle)_ into a position based on radius _(spawn_radius)_ with _Vector2(spawn_radius, 0.0).rotated(spawn_angle)._ I can then just have the _CreepSpawner_ be a child of the player character; a new enemy has its _global_position_ set to the spawner's _global_position_ plus the randomly chosen position. It might sound like a lot, but it's basically just two extra lines of code in the enemy spawning function, rather than dealing with any _Path2D_ node. Using a wide, rectangular path as shown in the video produces uneven spawns, as most of the path is angularly concentrated toward the top and bottom and corners; a square would be less bad, a regular hexagon less still, but a circle is perfect. Side-note: My function to choose an angle does happen to be minutely biased to the angle of 0, as TAU radians is equal to 0 radians, but it's impossible to observe in practice.
*-* The "Motion Mode" of player character and enemies should be set to "Floating".
Very helpful, thanks!
Although func _physics_process is synced to the "physics ticks per second" you set in project settings (default 60), and func _process is run as fast as possible on every rendered frame.
As a totally newcomer explorer to all things Godot, this post is amazing as it answers many questions I had.
I was feeling very uneasy with too many ‘preload’ and ‘nodes’ string based lookups… as it seems that any change: the hierarchy or renaming the nodes would create problems right away.
There was still that ‘has_method’ one though, will see about that later.r
Don’t get me wrong, this tutorial has been great, I even like the Path2D idea as it gives artistic freedom to any designer to create crazy spawn paths if need be; but there are definitely so many things I would like to know more about… GDScript seems to work perfectly with the existing built-in functionality but will have to dive deeper into more custom tailor made things.
Is it easy to make a pool that reuses bullets? Do we have to or in Godot is fine without them (as it’s reference counted)? Using a full IDE like Rider? Etc
@@alejmc For a bullet pool, the bullet-firing weapon could be provided with its "pool" of bullets _(as child nodes)_ on startup, with each of these bullets able to be "active" or "inactive".
Instead of instantiating a new bullet each time one is to be fired, the weapon would need to find one of its inactive bullets to activate and shoot, with each bullet merely deactivating itself instead of freeing itself from memory upon hit or age-death.
Maybe the weapon could simply have an integer variable for which index value (of its child array) to be looking for an inactive bullet at, and increment this value by 1 whenever it sucessfully fires a bullet or notices the corresponding bullet at the index is already active.
*Alternatively **_(likely a lot better),_* the fired bullets could send signals to their corresponding weapon when they deactivate, and the weapon could have an internal array of unfired bullets. _The signal sent would include a reference to the bullet node itself._ In this case, the gun would fire the last element of this array _(removing from and adding to end or arrays is most optimal),_ thus activating the bullet and removing it from the array, and any bullet which sends its deactivation signal to the weapon gets added back to the end of the array. The weapon can thus only fire if the size of this "inventory" (or "bullet clip/magazine") array is nonzero.
This system minimizes the instantiation and deletion of objects, which could be quite nice for performance, but it _of course_ introduces stricter limitations on how many bullets can be active at once.
I think such limitations could be an elegant aspect of design, especially if incorporated diagetically, such as, _in this case,_ with a gun which isn't resupplied from external sources, but rather has limited ammunition which (magically?) travels back to the gun after having been fired, or perhaps instead a magic staff which must continuously provide energy to all active projectiles, and thus has a limit to the quantity of them which are simultaneously active.
Otherwise, Godot seems to have nice garbage management systems. Anything inheriting from _RefCounted_ is automatically cleaned up when no longer referenced, and the _queue_free()_ function is generally a good option for nodes and such.
*The online documentation with extra information and tutorials can be found at docs.godotengine.org*
Bonus idea: Enemies with enemy spawners as children. Maybe enemies can create _(temporary)_ paths as they walk, which additional enemies may spawn from.
@@BinaryBolias that’s quite a complete take on pools! Thanks!
Could call for a generic pool management, maybe even Godot internal for all things pooling.
In a full production environment I think I would go for enemies, bullets, VFX, etc to be as such.
I hope you stick around. Some of the choices made in the tutorial were deliberately aimed at simplifying the cognitive load but many of your observations lend themselves to an excellent second iteration. Thanks for posting them.
Thy for the Video. I'm 50 plus and just started to learn this kind of stuff. Great tutorial for beginners. Looking forward fore more.
Awesome! I hope you have a lot of fun with making your own projects. You're welcome to join our Discord server and share whatever you make. Some people are extremely helpful with feedback and sharing what they learn. You can find the invite in the description.
Thank you so much for this amazing video. Was waiting for a Godot 4.0 tutorial for so long. Great job by you guys and Nathan especially.
This is one of the best tutorials for development I've ever seen.
Thank you so much for all your content & the app to get started with GDScript.
Also, explaining all these shortcuts when you need them is a blessing on it's own.
It feels so intuitive to use the Godot engine :D
I started learning Godot this week and a vampire survivor like was first little project I wanted to do, I searched for a tutorial literally the day before yesterday, thank you guys
The more time passes, the more I love Godot. My first little game! Really great, thanks again and keep it up, your channel is awesome !!!!
Was able to follow this tutorial really easily. Even added in tree-spawning directionally (so they spawn randomly but only in the direction I am currently moving).
I plan to customize it too, to show spawn counts and kill counts as well as have the gun follow the mouse rather than getting the nearest mob. I think doing simple customizations like this will really help understand the logic.
The only area I got tripped up with was collision layers/masks. I missed the step to set the hitbox collision layer and it took me a while to figure that one out.
Thanks for highlighting exactly where you had an issue! This allowed me to go back and watch the editing there and think about the recording and how to improve it.
@@Gdquestfor sure! I think a little demo showing what happens if you have the wrong layers set. In my issue, my PLAYER was set to the wrong layer and it caused damage to itself. When I had damage set to 500 I would insta-die on load.
That's really great info! Thanks a bunch.
what a well presented tutorial. i feel so confident after watching this.
This is the best tutorial that i've seen so far. even moderate devs can learn much on this one ! this is GOLD. i'll share with every dev i see
This tutorial is the most friendly to follow I have attempted. I was able to follow along without issues as far as instructions. I paused it a few times to input the codes and I did not finish in one sitting, but was able to pick up without issues. I have seen videos that jump around too quick or move there mouse too sudden. Thankyou
Thank you for this. I completed your free starter coding program and now this tutorial. I feel like most of the lessons I find make me feel a sense of hopelessness and frustration. Your lessons are thorough enough that I generally find success and learn something with every action, even if I don't remember 50%.
Maybe someday I will look back on this comment from a position of a successful developer and smile. IDK. Thank you
Thank you for writing this. Please keep going and don't give up. Most roadblocks to understanding are a matter of finding the right explanation for you. I think of it as a long term treasure hunt or quest 😉 where you keep track of the areas that are still fuzzy for you and you flag them as subjects for which you're still looking for an explanation that works for you.
This is such a great tutorial. Thank you so much! As someone that does programming full time this hits the sweet spot between explaining enough learn godot but not spending too much time explaining the basics. I have really enjoyed following along and looking forward to expanding the project using my own sprites!
I just installed Godot (came from unity) and I followed this tutorial and learned so much.
There's a few requests I have:
-Spawn trees as you move around, but not on places where you've already been.
-Shoot on click and on the mouse angle.
-Display score.
-Pick up bonuses to improve the bullet power.
Some of them I know how to implement some I don't.
Thanks for the suggestions
Yeah I'm trying to figure out a good way to implement random object spawns as well as bonuses both seem tricky. I think having a guide on how to build modular systems can be a great video as well!
Hands down the best Godot tutorial I watched... I started this week making a bullet hell vampire survivor game but felt a bit stuck. This helped a ton and I have tons of ideas on how to build on it. Thanks
For anyone who has a problem with the layer and mask setup for the gun not detecting slimes, I had to delete and re-add the Gun node to the Player node for it to work right. For whatever reason it would only work if I had the mask and layers set on BOTH the Gun node itself AND the Gun node that was a child to the Player node, but after removing it from the Player node and re-adding it, it worked as the tutorial showed.
I've read of similar problems in other projects, I don't know if there's a way to update/reload/purge cache/whatever besides deleting and re-adding that would fix this.
can you calrify i dount understand?
Thanks for adding sound effects when discount code is on screen
If anyone had a problem with the character dying for no apparent reason, the reason is that the mask was not removed from the HurtBox (mask 2 for mob)
thank you. I knew it had to be something with the mask but couldn't figure it out.
This is the best godot tutorial I’ve seen! I like that it shows what to do and why to do it and sadly lots of other tutorials don’t do this
Wow, this was super fun and really empowering! I can't wait to apply this to a solo project! Thanks GDQuest! ❤
Thanks a lot for writing this. I hope you showcase your project in the Discord server. It's always nice to see where gamdevs start and what they end up making over time.
There are many godot tutorials on youtube and how-tos but none so finely detailed and as clear as yours, you got a new subscriber. Very high quality video
Such a good job you guys are doing ! It's been almost a year since I started thanks to the similar video you released in Godot 3.5 that really helped me make things click ! I reached a level now where I think I should be the one doing tutorials on some advanced code structures !
So heartwarming to read that!
what i love about this is that you are a great teacher. you have a great grasp on what someone who doesn't know any coding would know and work from there. you don't assume external knowledge. you work step by step but include dead ends so we can backtrack and understand why we do certain things. when i see a 10 minute tutorial, i know i'm going to spend twice that time with the video paused trying to understand the code i just copied. You do a great job of demonstrating why you take every step. subscribed.
Thank you for having taken the time to write to tell me this. I really appreciate it!
Please continue uploading tutorials like this, also board games like billiards and chess and implement multiplayer in the games, thank you very much ❤
Thanks for the suggestions :)
Keep up this way of teaching , you are very easy to follow and have a nice vibe. Keep up the awesome work! Cheers!
I had no idea that the access as unique name was a thing. that's killer for onready variables so I don't have to worry about re assigning the node path every time I reorganize my node tree.
You can also export statically typed node variables to likewise get a node regardless of path. Pro: it works in any scene. Con: you have to assign the path in the Inspector ahead of time. Example: `@export var my_sprite: Sprite2D`.
I just wanted to say , that , I've completed very short (just adding trees in the scene and before) and the tutorial is so well explained , it carries developer tips to quickly improve , and makes coding easy too , I had never found any tutorial that good , If you want to learn godot , It is highly recommended
1:31:44 Hi, I noticed a small tweak that might help. Try swapping these two lines of code:
%ShootingPoint.add_child(new_bullet)
new_bullet.global_position = %ShootingPoint.global_position
This should give us the effect we’re looking for. Keep up the great work!
I had an error here ... Found out my mistake was that I wrote "$ShootingPoint" instead of "%ShootingPoint"... silly me...
Thanks man this was driving me crazy! I was wondering why my bullets kept spawning away from the gun.
@@kristianlovealot Found out my mistake was that I wrote "%shootingPoint" instead of "%shootingPoint"... silly me...
@@GameFolklore Thats the same thing though. If you were talking about his reply in the first one a "$" is used instead of a "%"
I had no idea why the bullets werent working. Thanks!
Really impressed with this course, while simple and understandable, it goes through all important parts and why-s of how things done and for what reasons there are X and Y features, and how to use them. For a fairly experienced dev without any gamedev experience this was quite informative as a godot intro and overview of baseline features needed in likely every game possible.
Great job as always! I will be learning this during the holidays!
This is an amazing tutorial! I learnt a lot of ways to do things simply via existing Godot systems that I just didn't know were there.
Thank you so much for taking the time to create this 😁
I use POP os too and I only know one youtuber that uses linux for game development - GDquest!
i can't tell how usefull it was I was stuck on my second project searched answer every where but I got my answer here love your video
Really glad to know it was helpful to you :)
For y_sort_enabled, the shadows appear in front of the player when the player walks above the tree. But the shadows should always be behind the player. How do you do it such that y_sort_neabled doesnt affect certain child nodes of tree, like its shadow?
Edit: I figured it out. Basically the z index is the ultimate in figuring out which gets drawn in front of what. Higher z index means will be drawn first. Ysorting only applies if something is on the same z index as another.
So what I did was to change the z index of the shadow of the tree to be -1. This makes it such that the shadow will always be rendered behind the player, trees and the white background. Since I want the shadow to be in front of the white background, but behind the player and trees, I changed the z index of the background to -2.
So the z index for background =-2, shadow of tree and shadow of player =-1, tree and player = 0.
Thanks for that! I scrolled down the comments a bunch ctrl+f'ing for "shadow" until I found this. I thought I couldn't be the only one it bothered haha.
Thx, you saved me from my 1 hour suffering of why y sort dosent work
Great tutorial. Well explained. I could follow easily without any godot knowledge 👍
I literally had no prior experience when it comes to game development. I mainly work on robotics/computer vision with python/c++ etc. so I have decent coding experience but never touched any game engine. Just wanted to do something fun and this video helped me grasp the fundemantal concepts really well. Thanks for uploading this video!
Thank you for taking the time to write and especially for sharing the bit about your background. It's very helpful to know who we're making this for.
What crazy timing, I just picked up Godot a few days ago and have been building a VS like game and was running into some issues and then this video gets released today! Looking forward to going through this, thanks!
Hi guys, i got a problem at 1:14:21. The problem is that I specified all the parameters as in the video, but my gun does not change its position at all, can anyone help?
Honestly this tutorial sparked my interest in making games, and it was really fun making it in godot, I tried many tutorials in the past for various engines but this is the one that clicked with me! Thank you so much for making it!
Are you planning on making a part 2 for it? With more in depth mechanics like, stats, waves, perhaps even maps and most importantly levels and items. I think it is essential for these kinds of games and having a guide on how to do that would provide so much knowledge for creating so many things and not just the ones for the purpose of this project!
My toxic trait is thinking I can actually do this
U got this man
You can do it!
Believe in yourself >:D
This is a great tutorial and absolutely on a proffessional level compared to other amateur efforts. I finally understand what does what and why. And it manages to do the harder thing: not over explaining.
Thank you for this great tutorial. However, I need some help with this problem I am facing. At 1:45:25 you start adding health to the player. When I type var overlapping_mobs = %HurtBox.get_overlapping_bodies(), the selection for a popup with get_overlapping_bodies() never appears, so when I run the entire game later when we finish it, it never works. I assumed that I set the area2d node or collision shape incorrectly, but after checking the scripts and redoing the code, it still would not run correctly. I would include the error message, but there wasn't any. Is there anything that I could be doing wrong?
This was the most fun I've had in a long time, and I've been having a lot of fun! Thanks for the video.
This is nice, but how is this "From Zero" if you have pre-build tscn-files to import? ;)
True though. Might be an unpopular opinion but I hate when people do that in tutorials.
It's about learning from zero. We provide learn gdscript from zero, for people who have never coded before, Godot tour 101 to introduce the editor, and then they can jump on to this, effectively allowing them to start learning from zero.
Whenever I do tutorials, I say "make it my own", it's the best way to learn from them; At the end of the video he states "copy, customize, create". I love that he stated this and that has gotten an instant subscribe from me (also the tutorial itself was excellent and the best beginner tutorial for godot out there).
Thank you for taking the time to write this! :)
@@Gdquest The fact that you are also responding to comments on a 7 month old video astounds me even more! If I ever know someone learning godot, I will give them a shove in this direction too!
Ok, I've been looking into your courses, and I honestly think that I will buy the big bundle. It looks amazing, I very much enjoyed this tutorial, the Kickstarter looked also very promising, and you were incredibly kind to me and all of your commenters. Keep doing what you're doing! And also, are you really a single person?
Oh wow! You have even more incredible free tutorials on your website!
>make a game from zero
step 1; use our already created player
that was really awesome, showed me a whole lot of features and i understood everything, i'm excited to go try making a game by myself now
"From zero"
"Here is a ready made project"
Come on.
The only thing he really did is animations and some basic character code, which you can probably learn somewhere else, this video was more about writing the code, and making the actual layout of the game from premade assets
Best tutorial I've seen, I followed along and structured the code to my own liking and had everything working. Thanks so much!
It kind of bothers me that you said "You should know at least a little bit of coding" then go on to explain what a zip file is and how to unpack it. Those two things are diametrically opposed.
If you added in a corollary that this part is for beginners, or a timestamp to skip this part, I'd have less of a gripe.
We provide a free course to learn code from zero in the video. We just don't want to slow down the video by having to introduce every code concept. Overall it's designed to be very accessible.
Perfect tutorial for beginners who just read introduction of docs. Important functions are well explained with straightforward game example, helping audiences to establish clear understanding of how the game engine is used.
Finally got around to working through this tutorial and it was great and easy to understand. I look forward to more in the future!
Gotta say this is an *excellent* tutorial, I've been looking for more after finishing the Brackeys ones but kept running into "beginner" ones that failed to explain the "why" of things enough to really build an understanding of what's going on. After watching this though a lot of things started making a ton of sense!
I managed to make a basic lil addition to the script that flips the gun sprite so it's not upside down when it goes to the left of the character! It might be a simple change but it adds some polish and it's the first new "feature" I've figured out how to code by myself! Gonna see if I can figure out how to implement more new stuff tomorrow... maybe a wave system? Should be fairly easy to check if all the mobs are dead and then set a timer until a new wave begins, and then increase the mob spawn rate each wave.
wow, thank youuu so much! finally, my FIRST finished "game" by watching Godot tutorial (I've seen severals before, but always lost in the last few chapters). Thank you! I'm really a noob in game dev, just started like month ago with different engine. You guys really a big help! :) Thanks!
Very glad it got you started on a good foot. Happy trails on your learning journey!
Fantastic experience getting through this, learned a LOT!
one of the best tutorials I have ever seen in YT. thank you.
For a long time i've been wanting to learn godot and it seemed so daunting but this was a lot of fun! Thank you so much
I watched full tutorial and everything worked for me, thanks for tutorial!
Mission accomplished!
Looking forward to advance now, thank you!
Rougelites are one of my favourite game genres and I'm happy to be able to actually create one! I've had a lot of trouble dropping projects halfway because of complexity and being overwhelmed, so thank you lots for the simple and easy-to-follow tutorial! Can't wait to learn more ^^
Very glad to read that! I hope you keep going. :)
@@Gdquest does this code work in godot 4.2?
This video is definitely worth watching twice. Once to take notes on the technical stuff and again to code along. Thanks for sharing the best basics tutorial!
Thank you for the kind words. It makes the late nights worth it. 3D tutorial coming up!
Amazing tutorial, really enjoyed it and was very easy to follow along !
MY son and I are taking the week to learn this course. thank you so much for making this. We will let you know how it turns out
took me another, 3 hours? after the tutorial finished to implement a kill counter(getting signal linked from the slime instances was trouble), add the score to the game over screen, make the slimes increase speed the longer theyre alive, AND add a restart button to the game over screen(which now also deletes the player when he dies, and causes the slimes to stand still). the fact that this one got my problem solving juices going is awesome. love it
Absoutely incredible tutorial. I was getting super frustrated with Godot, but this has really helped me out!!
This is an amazing tutorial. The code is really simple to understand and everything is straight to the point. Great content! Keep it up please.
This was intuitive and easy to follow, I'm very impressed with the quality of the tutorial! Thank you for putting this together, this has inspired me to give Godot a shot!
Very happy to hear that! Thank you for your feedback :)
Great tutorial - really insightful.
My top troubleshooting tips for anyone that's struggling are:
- Check your spelling! And,
- When Ctrl-dragging and dropping, check your paths match those on the tutorial! (I lost an hour looking for info on preloading when it was simply that the path hadn't copied in full)
Thanks for the tutorial. Total beginner and I found it really clear and helpful. Brilliant.
I was accumulating all of this info over days through forums and small tutorials and here everything is compact in one video. Guess i still learned some more but this would have been great 😅
Thanks for the great vid!
Exceptionally explained and easy to follow! Already thinking about some simple features I could try to implement from another tutorial. All in all, feel like I learned a lot in a very short period of time.
Thanks a lot for the feedback :)
Man, this tutorial is incredible, thank you so much
excellently done, Nathan! quite the upgrade from the oldie Dodge the Creeps tut :) this should go into the official docs and replace the previous one on the Getting Started section there.
Thank you! I'm glad you liked it.
We'd have to take GDQuest's name out if it were to go into the Godot Docs. That would prevent us from making a living and continuing to push content out.
Thank you so much for the free tutorials on the website. You are amazing. You earned a new sub
Completed this Tutorial. ❤
Thankyou
I'm going back to Godot development (started with Godot 3) and this is such an great Godot 4 tutorial. Even though I'm using C# in following this tutorial, the great explanation/tips in this tutorial and improved Godot 4 C# docs really helped me in my journey back to game development using Godot. Thanks!
Very helpful. I want to learn Godot, and am planning to watch one of this kind of code-along video while doing it, then make something original using what I learned, and repeat. Seams to be an effective way to learn so far.
You guys are the real heros
Very good tutorial, thank you!
Keep up the high quality content.
If you get to _physics_process(delta): in the video, as of 12/6/24 on Ubuntu 24, if Godot autocompletes to "func _physics_process(delta: float) -> void:" that's fine. just leave it as is and continue programming as normal.
This was a genuinely amazing tutorial, i am basically a head empty baby when it comes to game dev, but thanks to you kind sir, i now know a great bit more than i did before. I tip my hat to you.
Thanks a lot for letting me know. I'm really glad it helped. I hope it motivates you to keep going.
Awesome stuff man! Great vid as always! Looking forward to the course :)
Thanks a lot for the kind comment :) :)
Hi, thanks for this tutorial and course, this was very clear! The very first that I listened to and watched first, then tried to apply it and copy. I'm heading to the next step for me: try and make a new mob or something like that to see if I understood correctly!
Thanks for this ! :D