How to Make a Roguelike Card Game on Godot

Тәжірибелік нұсқаулар және стиль

Become a member and gain extra perks to support me! - / @ezthedev
Buy me a coffee @ ko-fi : ko-fi.com/ezthedev
This is a tutorial unlike anything! Raw and authentic.
Join me and build a rogue-like card game with me!
Part2: • Enemy AI, Card Actions...
git repo for this tutorial project:
github.com/real-ezTheDev/rogu...
00:00:00 Intro
00:01:00 Tutorial Begins
00:05:56 Card Scene
00:13:02 Card Code
00:25:16 Create Card Code
00:37:22 Create Card RESULT
00:37:39 Create Types of Cards
00:45:29 Done????
00:46:13 Tool Tag
00:49:12 Tool Tag RESULT
00:49:42 Create a Hand
00:50:42 What is Hand?
00:59:37 Math for Hand
01:11:43 Math for Hand RESULT
01:13:40 Add a Card to Hand
01:29:52 Add Card RESULT
01:30:24 Select and Click the Card
02:05:19 Select and Click RESULT
02:05:30 MEMORY LEAK?!

Пікірлер: 186

  • @ezthedev
    @ezthedevАй бұрын

    This was so fun to create! Let me know if you have any questions or suggestions!

  • @hamsu7453

    @hamsu7453

    Ай бұрын

    Keep it coming this is awesome!

  • @ezthedev

    @ezthedev

    Ай бұрын

    @@hamsu7453 thank you!!

  • @vincent88pl

    @vincent88pl

    6 күн бұрын

    More videos like this :)

  • @skibbl_dev
    @skibbl_devАй бұрын

    This is super cool! I reccomend using canvas_items instead of viewport for scaling. it wont be pixel perfect, but it will keep things the right scale, and if you rotate things they wont look wonky. text is also way easier to deal with.

  • @ezthedev

    @ezthedev

    Ай бұрын

    oh my goodness! this is exactly what i was hoping for in the comments haha thanks for watching and letting me know of that!

  • @TheGenuineNoiser
    @TheGenuineNoiserАй бұрын

    Doing a (almost) unclipped video of Godot game creation is a great idea. Also seeing how Godot is on the rise of popularity right now it really is in the right time of things. Though you do have some competition looking at many other creators, especially now that Brackeys is back and on the Godot train as well. But your quality of editing is really high, and the content really valuable for anyone learning and seeing the reality of game dev. So keep it up and I am certain you channel will grow. Great work so far and looking forward to seeing more videos from you.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thank you so much for a thoughtful comment and a realistic and encouraging words! And thanks for watching!

  • @catnapsandramen9435
    @catnapsandramen943526 күн бұрын

    Your authentic and humbling attitude makes this such a great experience to watch. I've been doing professional development for nearly 15 years now and have only met one other developer in my time who has been as honest and open as you. Everyone tends to have their shields up on full blast to either protect their perceived intelligence or their ego, but you sir, are setting standards that I wish the industry would follow. Keep being you brotha, thank you!

  • @ezthedev

    @ezthedev

    26 күн бұрын

    thank you so much for the support and your comment! I'm happy to hear that my intention of wanting to be authentic and helpful is coming through. Honestly, this is such a high praise and it encourages me to continue on! Thanks again for your kind words and support! :D

  • @patrickzhao7258

    @patrickzhao7258

    12 күн бұрын

    Seconded!

  • @danielwertz8724
    @danielwertz8724Ай бұрын

    Another wholesome developer channel. alright dev group hug everyone. bring it in 🤗

  • @ezthedev

    @ezthedev

    Ай бұрын

    Hahaha group huggg 🤗

  • @fernandoiraira6926
    @fernandoiraira6926Ай бұрын

    This tutorial is a godsend. In the past, I've faced many issues and difficult situations that I managed to solve on my own, but I was often unsure if the solutions were optimal. This video has helped me a lot. Please keep this series going!

  • @ezthedev

    @ezthedev

    Ай бұрын

    that's so awesome to hear! you have no idea how much this means to me! Thanks for the encouragement and watching the video! i'll keep the series going!

  • @sloppyglizzy8313

    @sloppyglizzy8313

    28 күн бұрын

    Word of advice for coding if it works for your project - and you don’t mind it - then it works for you. Optimization is a hole you don’t want to fall down unless you know it’s something you need to be doing. I’m not saying throw optimization to the wind, but rather if it’s not noticeably impacting your experience to not worry too much about it. As someone who’s been coding for about four years and just about eight months in game development there’s a million ways to do the same thing, and most of the time there’s no difference in efficiency. The biggest difference is the depth at which each person understands it. Of course you want to limit the amount you have to do, but there’s only so much you can learn as one person. Just keep coding, and you’ll inevitably keep learning and getting better.

  • @anderslarsson4252
    @anderslarsson4252Ай бұрын

    This was really nice. I love the approach with a long form video that includes errors and reasoning. More fun to watch than a standard tutorial and long term it gives me a more profound understanding of things. Hope to see more of this!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching, and glad it was fun to watch! Will continue posting this type of videos

  • @SableSpiritStudio
    @SableSpiritStudioАй бұрын

    I do not feel like you're explaining too much. It's always nice to have the full thought process to be able to better understand each decisions fully. Ultimately it is crucial to be able to make good decisions on your own when you're out of the boundaries of the video / tutorial / guide

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for the affirmation and a thoughtful comment! I'm glad there are people out here wanting to see the full process!

  • @jamesrivettcarnac

    @jamesrivettcarnac

    Ай бұрын

    Yeah, as a principle engineer who does lots of mentorship: never feel bad for this. We learn so much from how others process things, no matter what your or the other person's level.

  • @Ookami31
    @Ookami315 күн бұрын

    I like step-by-step tutorials that are easy to follow, but I also love seeing things go wrong and how to fix them. Shows you how the minds of programmers work. :)

  • @ezthedev

    @ezthedev

    5 күн бұрын

    Thanks for watching! I love sharing this experience and the response from everyone has been really fun to see! I'm going to continue making more!

  • @muxecoid
    @muxecoid17 күн бұрын

    Unlike many youtube tutorials that compress 10 hours of work into a 30 minutes video this one maintains a somewhat realistic pace.👍

  • @ezthedev

    @ezthedev

    17 күн бұрын

    Haha yea I try to be as real as I can! But I know that also comes with following a mistaken implementation just to fix it later.. hopefully that's okay!

  • @davidwusoftdev
    @davidwusoftdevАй бұрын

    Wow, I was so immersed I didn't notice 2 hours had passed. Great tutorial! I like how you explain your thought process and figure things out on the fly (with some smart editing). The only thing that irked me a bit was not using inheritance for the cards, but it seems you figured that out halfway through the video. Nice!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha thanks for watching and I'm glad it was entertaining for you! And yea... inheritance is definitely something I should look into using, but at the time I was hoping I could get away with just "making it work and fix later." Haha. Ep4 is probably polish and clean up!

  • @AllMindControl
    @AllMindControlАй бұрын

    when choosing the display size in project settings you can have godot do the math for you. For example, if you put "1920/3" (without the quotes) in the viewport width section it will make it 640 for you.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Omg this is some top tip! Haha thanks

  • @dryerflyer
    @dryerflyerАй бұрын

    I enjoyed the video. I recommend everyone look into nandeck as another option. Instead of building the cards (even dynamically) in Godot, nandeck allows a very fluid way to generate cards. There are reasons for creating cards in Godot though, so every dev has to analyze what they need.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching! And wow! Never heard of nanDeck but at a glance seems like it does a lot! I definitely need to have a video where I explore it to inform others on this! Thanks for that info!

  • @ryanclark9686
    @ryanclark9686Ай бұрын

    I’m a web dev, dipping my toes in after 9 years. This has helped me way more then other resources I’ve been looking at

  • @ezthedev

    @ezthedev

    Ай бұрын

    I'm so glad to hear that this was helpful to someone! Thanks for watching, and I hope to continuously provide useful content!

  • @Edward-Not-Elric
    @Edward-Not-ElricАй бұрын

    That intro got an instant subscribe from me. I'm not interested in copy-paste videos. I need to actually understand the process so i can learn and impliment that knowledge into my general development.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching and subbing! Hope it's useful if not entertaining, and always feel free to suggest/comment so I can cater the content to you all better!

  • @Edward-Not-Elric

    @Edward-Not-Elric

    Ай бұрын

    ​@@ezthedev Well, I have to say, I'm very impressed with the quality given the length of the video. Your voice is clear an pleasant, mic quality is good, edits are very useful. I found out recently that I can use C# with Godot, and I think this video inspired me to finally play around with it and make my next game in Godot once my current project is finished or when I participate in another Game Jam.

  • @ezthedev

    @ezthedev

    Ай бұрын

    @@Edward-Not-Elric thank you for the nice feedback on the video! I hope you have fun in your godot journey! Game jams are awesome! I'm personally planning join this year's GMTK jam again!

  • @sloppyglizzy8313
    @sloppyglizzy831328 күн бұрын

    This is single handedly the greatest type of coding video I have ever seen. I adore that you’re including the mistakes because too often people post their work without a hitch. Leaving anyone watching at a loss for the ten errors they fixed in the background that leaves the tutorial project incomplete or worse - abandoned. I seriously appreciate the information. As someone with relatively minor experience in game dev (but a good bit in coding) this is the type of tutorial I’ve been searching for. Subscribed immediately. If you have a patreon I’d pay for access to your code, or to pick your thoughts on some issues I’ve encountered through the patreon Q&A. (Or discord). Thanks a million.

  • @ezthedev

    @ezthedev

    27 күн бұрын

    I'm so happy to hear this! thanks for watching and I'm glad the video has been helpful/useful for you! I'm encouraged to continue making this series and other contents like it! I'll be setting up my patreon once I feel that I have enough code/content to be worth a subscription! but tentatively, I have one setup. I appreciate the support always! Untill then you can pick my brain and ask any questions on my discord without the need for patreon subscription for now! discord.gg/TdFtsKDb

  • @Ookami31

    @Ookami31

    5 күн бұрын

    @@ezthedev the link is expired - can you post a new one?

  • @ezthedev

    @ezthedev

    5 күн бұрын

    @@Ookami31 here you go! discord.com/invite/mEJbabTJ

  • @party-logan4110
    @party-logan4110Ай бұрын

    Custom resources are good for when you have set values for something but a reusable base. So they'd fit nicely for the cards, allow you to have a single card scene that you just change the card resource on and when the card is made it loads the name, description, images etc from its resource variable.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Definitely! I'd lovebto explore using custom resources more as data /information base! I'll have to look into it more!

  • @gualdim
    @gualdimАй бұрын

    this is a REAL tutorial!!! I love to watch how you think, decompose concepts and solve issues. Thank you!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching!! I'm glad this format of "tutorial" is serving you nicely! I'll keep it up! Thanks for the encouraging comments!

  • @albert69Einstein
    @albert69EinsteinАй бұрын

    Thanks!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thank you so much for the support!

  • @Burnrate
    @Burnrate12 күн бұрын

    The static typing you mentioned at 17:30 is massively faster at run time and all allows autocomplete. You can also static type function return types and inputs

  • @amitkrishna4645
    @amitkrishna4645Ай бұрын

    This is wonderful, thank you very much for making this an unclipped video. I was very recently looking into making a card game but all the tutorials I could find were direct solutions which wouldn't help me learn how to actually do it myself. Really love this format and hoping to see more game dev videos, especially on Godot.

  • @ezthedev

    @ezthedev

    Ай бұрын

    You are welcome! I'm glad this is a good resource for you! I hope to continue creating enjoyable and usable contents!

  • @ArktikusYoutube
    @ArktikusYoutubeАй бұрын

    Thank you for the video! Actually I was doing a game really similar to this a few months ago. I struggled so hard with the arranging those cards in my hand and also had some issues when deleting/clicking a card. So yeah, really nice of you uploading a tutorial :D

  • @ezthedev

    @ezthedev

    Ай бұрын

    Great! I'm glad this is relevant to your need! Thanks for watching!

  • @SableSpiritStudio
    @SableSpiritStudioАй бұрын

    I will definitely have a look on that. I'll be watching around for more content in this series. I like that you approach tutorials the same way I do 😄

  • @jamesrivettcarnac
    @jamesrivettcarnacАй бұрын

    42:44 this is the never ending architecture, software engineering, code quality, and product management tension. experience reduces the f-ups you make by over or under engineering.

  • @ezthedev

    @ezthedev

    Ай бұрын

    This right here is the truth!

  • @guirosan
    @guirosanАй бұрын

    Great video Ezra, I like how you approached the problem solving by drawing assumptions and solutions. It looked very similar to a coding interview. It was very self aware and brave of your part showing the process and what you were thinking on each step. Hired :D

  • @ezthedev

    @ezthedev

    Ай бұрын

    Hahaha exactly! Problem solving unknown is pretty much coding interview! Haha thanks for the "hire"! Lol

  • @CaiooliveiraRAWR
    @CaiooliveiraRAWRАй бұрын

    amazing content dude, thank you for sharing it with us!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching!

  • @lv99redchocobo37
    @lv99redchocobo37Ай бұрын

    looking forward to your next vid :D what a journey

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching!

  • @computersciencestudentriverbat
    @computersciencestudentriverbatАй бұрын

    Glad to see the beginning of the Ezra's Teacher Arc. I'm all for it. I think you videos have a great level of authenticity and I think that in combination with your skill/talent will create an audience that orbits around you! Very excited to see where this goes.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks a lot for your encouragement always!

  • @JojoMcMuffin
    @JojoMcMuffinАй бұрын

    Nice vid, looking forward to the future updates.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks!

  • @ksrrompe
    @ksrrompeАй бұрын

    Thanks bro, this is awesome!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks you for watching!

  • @BrunoJuncklaus
    @BrunoJuncklausАй бұрын

    Thank you so much, this was super helpful for someone who just started gamedev

  • @ezthedev

    @ezthedev

    Ай бұрын

    you are welcome! and thanks for watching!

  • @MixedSourceStudio
    @MixedSourceStudioАй бұрын

    This is a great tutorial and will help me with my little project i got going. great work keep it up. I see there's a second video out heading to watch that now.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thank you so much for that! see you in the second video! haha

  • @iozturkeri
    @iozturkeriАй бұрын

    Hey, it was a great project. Hoping to see the rest of the project.

  • @ezthedev

    @ezthedev

    Ай бұрын

    I'm glad you enjoyed it! Next episode is coming up within a week!

  • @andytai7180
    @andytai71808 күн бұрын

    Good tutorial, thanks!

  • @ezthedev

    @ezthedev

    8 күн бұрын

    Thanks for watching!

  • @NicolasMRodriguez
    @NicolasMRodriguezАй бұрын

    Thanks for sharing!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching!

  • @TheWorstWurst
    @TheWorstWurstАй бұрын

    Good video. I've learned alot 🙂

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thank you and I'm so happy to hear!

  • @lormden
    @lormdenАй бұрын

    Helpful tip I hope : You should look at the Curve resource in the documentation for an alternative and easy way of "curving" the hand.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha welp, this is indeed helpful! Thanks! It wouldn't be gamedev experience if I didn't re-invent already existing solution lol.. thanks for the info!

  • @mikelezhnin8601
    @mikelezhnin860118 күн бұрын

    48:00 fun fact, these `if` statements can often make code slightly slower, albeit insignificantly so. The longest operation in there is the look-up to the `lbl` object, and with `if` it happens once and can happen twice, while w/o `if` it happens exactly once. Additionally, it is usually checked for changes later on anyways - so unless you see horrible flickering w/o `if`, there is no need for it there.

  • @ezthedev

    @ezthedev

    18 күн бұрын

    Haha yea everytime I put value checker I have a voice in my head saying... "you know it might be faster to just override everytime" Thanks for confirming! And thanks for watching and providing a helpful comment!

  • @galopunk6392
    @galopunk6392Ай бұрын

    Starting the my Godot journey, I'll make sure to watch this video as soon as I finish the initial tutorial (the good old vampire survivor clone HAHA), always been a great fan of roguelikes and card roguelikes, and by everyone's comments you did an amazing job explaining it how to make it, subscribing so I can follow your teaching journey!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for subscribing and following along! And when you watch and you feel you need something more always feel free to let me know! I'm always looking to improve to help other better!

  • @generrosity
    @generrosityАй бұрын

    Very well explained video - thank you! It is surprisingly easy to listen and code along with you. I googled one of the autocomplete issues you had, you likely already "as Class" is needed in some odd extra places

  • @ezthedev

    @ezthedev

    Ай бұрын

    thanks for watching! and i'm glad to hear that it's easy to code along! And yea haha I've heard people as you might need "as Class" to guarantee some of those autocompletes... Tho it feels silly to have to do "as Class" in addition to typing the varaible!

  • @GameDev-ph5se
    @GameDev-ph5seАй бұрын

    Don't worry. I don't understand any of this so it's all good experience for becoming familiar. I can't even download Godot so I'm just watching and learning for now. Really I'm just watching your process and it helps to put the development into perspective

  • @Wilson-or1rt
    @Wilson-or1rtАй бұрын

    This is an awesome tutorial format! It's super helpful to see more experienced developers train of thought. Btw there is a nice little shorthand that would come in handy at 17:55 - you can drag'n'drop a node to the editor holding Ctrl and you'll automatically get an @onready var

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching! And that's so convenient! Thanks for the tip! Haha This is why i love the community!

  • @user-hr1tx3lg8w
    @user-hr1tx3lg8w10 күн бұрын

    Thank you it's real helpful and interesting tutor

  • @ezthedev

    @ezthedev

    10 күн бұрын

    Thank you for watching and commenting!

  • @BatuhanErsoyYT
    @BatuhanErsoyYTАй бұрын

    Perfect

  • @americoperez810
    @americoperez810Ай бұрын

    FYI, if you arent getting auto complete to work, try casting your objects to the type you want by using the 'as' keyword. For example, in you code at 32:45, you should write var card:Card = card_scene.instantiate() as Card

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha yea, I do end up doing that for some of the more important ones but it's unfortunate that I have to force the cast

  • @americoperez810

    @americoperez810

    Ай бұрын

    @@ezthedev agreed

  • @ecredes
    @ecredesАй бұрын

    I really enjoyed watching you tackle some fairly technical programming challenges and walking us through your thought process. I would be interested in your approach to refactoring and cleaning up some of the messy code. And also, what your approach would be for card data structures and options for storing a large dictionary/database of many cards.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Thanks for watching and enjoying the video! I do look forward to getting to that part of cleaning things up a more and exploring some card data structure as you mentioned! I already have episode 2 recorded and i can see that those things probably will come around final episode (tentatively episode 4) of the series! hope you stick around!

  • @americoperez810
    @americoperez810Ай бұрын

    for your card highlighting, instead of doing what you did, you could use the _on_gui_input function of a Control node and check to see if it was mouse input. if it was,then you can change the color of your card. IIRC, the mouse event should only be triggered on the "highest" Control Node. If a Control Node is obstructed by another Control Node, then it wont trigger its _on_gui_input function. If for some reason, the event propogates to other control nodes, you can manually consume the event, by calling the accept() function of a Control Node, and it wont propogate any futher Another option is to use the _input or _unhandled_input functions and then manually stopping the propogarion of an event by calling get_viewport().set_input_as_handled()

  • @ezthedev

    @ezthedev

    Ай бұрын

    Omg! I'm so happy about this type of review and suggestions! Thanks! I'll be sure to include some of these things by the end of the series! Thanks for watching and keep recommending please!

  • @americoperez810

    @americoperez810

    Ай бұрын

    @@ezthedev definitely do some research because it's been a little bit since I've worked with Godot, but I do remember there being something very very similar to what I suggested

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha yea I will definitely have to look into it! I know at least they have input consuming / unhandled for using _unhandled_input function and ill have to see if godot v4 decided that's enough for all input handling or if the method you mentioned is still around!

  • @mrrenreal
    @mrrenrealАй бұрын

    I subbed ! ❤ Love to see people doing what they love ! Forget what people say about brackeys and whoever is doing tutorial… ⬇️ People dig energy! Your passion can be felt through your video therefore…. Who the f*** care on how many people do tutorials! JUST DO WHAT YOU LOVE FOR AS LONG AS YOU LOVE IT! Mad respect 🤟🏼

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha thanks for the encouragement and the sub!

  • @godotgamelab
    @godotgamelabАй бұрын

    I'm doing a similar series, super interested how you approach this genre in Godot! Liked and subscribed 🤖

  • @ezthedev

    @ezthedev

    Ай бұрын

    Great! Good luck on your project and thanks for watching and subscribing! I'll come look when you post!

  • @socraticgambler
    @socraticgambler29 күн бұрын

    This is an encouraging word in the comments. 🎉❤

  • @ezthedev

    @ezthedev

    29 күн бұрын

    Thanks! 🙏

  • @Mr.po0o
    @Mr.po0oАй бұрын

    This was a great video but I would love it if you zoomed more especially on the code

  • @ezthedev

    @ezthedev

    Ай бұрын

    So sorry! Yea I agree... I changed some settings and recording setup too so resolution is better as well on the next episode! Lots of zooming in and clarity! Thanks for watching and a great suggestion!

  • @ThatBoiJayGee
    @ThatBoiJayGeeАй бұрын

    I've been looking for a rogue like deckbuilder tutorial, please finish this.

  • @ezthedev

    @ezthedev

    Ай бұрын

    I got you! Haha thanks for watching! There's second episode out already on this and I'm recording more!

  • @alexgeo7358
    @alexgeo7358Ай бұрын

    Gloomheaven at the back! Proud of you bro!

  • @ezthedev

    @ezthedev

    Ай бұрын

    Love the game! Just need to find a dedicated group to play all the way with... haha

  • @thomasbickerdike5753
    @thomasbickerdike575312 күн бұрын

    Thanks for sharing! If you would like a deck builder with super pretty pixel art I would highly recommend Cobalt Core :)

  • @ezthedev

    @ezthedev

    12 күн бұрын

    That sounds fun! I gotta try it out! Thanks for the recommendation

  • @grinningtaverngaming395
    @grinningtaverngaming39521 күн бұрын

    This is fantastic! For your next project in this format can you please do a simple 'paperclip clicker' game? Hopefully way less intensive and just as instructive. Cheers! Liked. Subbed.

  • @ezthedev

    @ezthedev

    21 күн бұрын

    Oooo interesting! I'll definitely take that suggestion into consideration!

  • @daczimek
    @daczimek3 сағат бұрын

    This was awesome! Thank you so much! So much valuable info in here and also observing the process was very interesting. When following along and stumbling upon one of the problems you had I started trying to solve it on my own before watching you and in the end I managed to solve some of the problems on my own. I have 2 big questions though. First is the updating of the highlight in the process function. You were talking about performance alot. Is it smart to do it in the process function? I chose to make an update_highlight() function and call it on mouse entered and mouse exited. The times when the highlight needs to be updated is only those and removing a card from hand, no? The other question regards the setup of the general card scene and the attack and defend card. I'm not so well versed with Godot but wouldn't it be easier to have a general card class and inherit from it? The only problem with that is that I don't know how to do inheritance in Godot if it's not just code but also Nodes. I think I would really want to support you on Patreon! Such a good experience.

  • @Walbertkyle
    @Walbertkyle21 күн бұрын

    Instead of using func _input, you can do a if statement where the card gets highlighted. if Input.is_action_just_pressed("mouse_click"): remove_card(highest_touch_index) It works the same, and its less work. (This saves you probably 5 minutes from the tutorial)

  • @ezthedev

    @ezthedev

    21 күн бұрын

    Less work is great! Haha yea I do not doubt there are better ways to do things on here for sure! I'm happy that viewers like you are here to add to the conversation and the tutorial!

  • @Justango69
    @Justango69Ай бұрын

    Yo, just got to the "What is hand?" section of the video and had a thought about how I might approach it. I would imagine the cards in an array, like [1, 2, 3, 4, 5]. The card(s) in the center of the array would be at Y position 0 with 0 rotation, and then the further the card gets from center, the lower Y position and more rotation it would have... I paused and have not looked ahead, so maybe you end of doing kinda the same thing, but wanted to jot it down before I forgot.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha don't want to spoil it for you! But I'll go ahead and say that's a good approach!

  • @jamesrivettcarnac
    @jamesrivettcarnacАй бұрын

    17:22 types are good.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Agreed!

  • @gleb_
    @gleb_26 күн бұрын

    Maybe it's not the best thing to do, but I would try using `z-index` for card selection. You could use `z-index+1` on every new card. Or even better, for a new card, you could use `last_card.z-index + 1`. I guess you'd need to shift `z-indexes` to every card when removing.

  • @ezthedev

    @ezthedev

    26 күн бұрын

    Yea, that though came across my head as well when I was thinking through it, but I remembered messing with 3+ number of different z values can be a lot of headache in my experience, so I just went with what I knew works in general! Alternatively, you could use "texturebutton" to handle pressed or use "unhandled input" to limit the input handling to one node!

  • @kiryonnakira7566
    @kiryonnakira7566Ай бұрын

    47:00 you said you would use setters but you used process. Which is really bad performance wise. for me, setters are declared like that: ```gd var card_name: String= "Card Name": set(value): if value == card_name: return card_name = value if name_lbl == null: return name_lbl.set_text(value) ```

  • @ezthedev

    @ezthedev

    Ай бұрын

    Setters are amazing! And yes, this would be better performance since you only make the graphical update only once! I do want to address more in detail about this in my 4th episode on optimization! I still think as the game gets bigger relying in graphical update on setter call can be difficult to keep up with but there are many alternatives and options! If you like doing it this way, and this is easy for you of course it's the best way! Thanks for the comment!

  • @dannyriz1080
    @dannyriz10804 күн бұрын

    Nice video! Btw did you know u can use formula for the input fields in Godot? Like at 4:50 you can just type directly "1920/3" for the width in the project settings and itll automatically calculate it for you

  • @ezthedev

    @ezthedev

    4 күн бұрын

    I didn't know until recently! Very cool and helpful feature! Thanks for the comment and watching the video! :)

  • @Fitalup
    @Fitalup22 күн бұрын

    Love the video! , wouldn't you mind to make a soft keyboard tracker to see the keys you input sometimes real fast since you're used to it , and sometimes it's hard as a beginner to follow

  • @ezthedev

    @ezthedev

    22 күн бұрын

    Oh! I didn't think about this! I'll look into getting that in! Unfortunately, I already record3d my next two videos.. but I'll definitely do that! If you have any questions on specific part about my keyboard input, let me know!

  • @Fitalup

    @Fitalup

    22 күн бұрын

    @@ezthedev also , this is just me , idk about the rest , bust since I'm more of a developer than a designer , i struggle so much with pixel size and the res , any advice on how to choose these , for example the card size for this game

  • @jamesrivettcarnac
    @jamesrivettcarnacАй бұрын

    8:22 lame is good in code naming.

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha lame but detailed

  • @piotrwegrzyniak5798
    @piotrwegrzyniak5798Ай бұрын

    Doen't Godot have that function on 2d nodes or 2d colliders that say whether it should block the "mouse-ray" or let i through? I believe it did, otherwise making like RTS kind of game, where by accident you click the building with a person behind it would be hell

  • @ezthedev

    @ezthedev

    Ай бұрын

    Unfortunately, from what I can tell they do not have mouse ray option (therefore mouse detection being blocked by top objects). AFIAK there's a lot of discussion on different ways of handling this situation, and a lot of them seem to rely on parent node deciding which of the child should be selected. I found some interesting discussion on this here forum.godotengine.org/t/prevent-clicking-elsewhere/51587/10

  • @Ryöken17
    @Ryöken1723 күн бұрын

    making an hand using so much mathematical term. Is there another option when you can do a list and add variables to each card to know the position on the list, then rotate the card depending on the position ?

  • @ezthedev

    @ezthedev

    23 күн бұрын

    Haha yea there is a simpler solution which I got to find out later. There's a node / component called "curve" in Godot which basically simplifies this!

  • @EmptyString1999
    @EmptyString199918 күн бұрын

    is there any reason for the cards you didnt use inhertance, thinking you could have a base_card and then attack_card and defend_card can be extensions of base_card where you can override their functionality on a card by card basis

  • @EmptyString1999

    @EmptyString1999

    18 күн бұрын

    also to add not trying to judge your methods amazing tutorial and really enjoyable to watch

  • @ezthedev

    @ezthedev

    18 күн бұрын

    Hi ! And thanks for watching and yhe question! In fact, I did consider inheritance briefly while filming this... and then I noticed some complication in my head and decided against it. The problem I saw is that the base card code has a lot of implementation that directly relies on having very specific child nodes. This means to inherit the class the inheriting node must also have same node scene tree structure. I didn't want to do the repeated work of adding nodes and naming nodes.. I really just wanted to drag and drop the base "card" node onto what would later be a "in-game card" So I decided it is okay to have "in-game card" that handles the logic of being a "card" in my specific game vs Card node being a component to setup UI structure of being a card. If I did this again, I do want to take more time to explore the best way to inherit classes tho! Haha. Hope this answered your question! And again my reasoning here could be flawed! And there are tons of better ways to do this I'm sure! So, please keep exploring! Thanks again and happy game dev'ing!

  • @khaledmoussa2668
    @khaledmoussa266818 күн бұрын

    32:29 how did you declare the variable as type: card? when I type the same thing an error goes like: couldn't find type "card" in the current scope

  • @ezthedev

    @ezthedev

    18 күн бұрын

    You can use your custom "type" as typing for variable by declaring your "gd" code with "class_name ...." in the beginning. For my case, at 19:38 I wrote "class_name Card" for the card code, which allows the typing "Card" for rest of the project. From what i can tell from your comment, it maybe erroring because you are using lower case "c" instead of "Card". Hope that works for you!

  • @khaledmoussa2668

    @khaledmoussa2668

    17 күн бұрын

    @@ezthedev It actually worked when I prefixed "card" with a "_" for some reason...

  • @rileypoteralski7964
    @rileypoteralski796412 күн бұрын

    I really enjoyed the video, you make it easy to understand. One thing though, I followed what you did but for some reason I cant seem to get my font to not be blurry when I run the scene. Any ideas?

  • @ezthedev

    @ezthedev

    12 күн бұрын

    Hey! Thanks for the comment and watching! Actually the font blurriness is specific to type of font you use. I'm using a custom font I downloaded! And fonts tend to be very sensitive to "font size" to have it perfectly pixelated. I'd recommend looking for free fonts in dafont.com or other font places!

  • @rileypoteralski7964

    @rileypoteralski7964

    12 күн бұрын

    @@ezthedev Ah ok, what size font would you suggest I download?

  • @ezthedev

    @ezthedev

    12 күн бұрын

    @@rileypoteralski7964 for something like this I like to work with 8px or 16px

  • @rileypoteralski7964

    @rileypoteralski7964

    11 күн бұрын

    @@ezthedev Thanks!

  • @viniciusantonio2253
    @viniciusantonio2253Ай бұрын

    math for hand: curve goes brrrrrrrrrrrrrrrrrrrrrrrrrrrr

  • @ezthedev

    @ezthedev

    Ай бұрын

    Brrrrrrrr math goes harddddd. Haha I have to say it's one of the more satisfying bits of development!

  • @viniciusantonio2253

    @viniciusantonio2253

    Ай бұрын

    I’d the godot’s built in curve to make the curve, but trigonometry is always cool

  • @ezthedev

    @ezthedev

    26 күн бұрын

    haha few comments did mention about the "curve". Maybe next time.... I can remember that exists !

  • @Ghin_Antonic
    @Ghin_Antonic27 күн бұрын

    I managed to miss the part where you removed the strictness of what hand would receive as a card and created an error. Love assassinating my own code by missing things

  • @ezthedev

    @ezthedev

    27 күн бұрын

    haha to be fair.. it is a long video, and it's easy to miss things!

  • @emreldmelting7898
    @emreldmelting789824 күн бұрын

    2 questions: - Is there a discord on which we can ask questions? - How do you create the Card node and BaseCardSprite subnode at 6:25?

  • @ezthedev

    @ezthedev

    24 күн бұрын

    hi! we do have a discord and I try my best to answer questions via text, screen capture, and even screen share voice call! discord.gg/9aXW6s5u I am realizing I didn't show the part where I "created" a new base Card scene: 1. Create a new scene "Card.tscn" by creating a new 2DNode Scene. 2. The new scene should already have "Card" at the top of the tree as 2D Node. 3. Right click on the top "Card" node and select "Add Child Node ..." 4. Choose "Sprite2D" Node 5. Rename the Sprite2D to "BaseCardSprite" Let me know if you have any other questions!

  • @emreldmelting7898

    @emreldmelting7898

    24 күн бұрын

    @@ezthedev Thank you! I'll make sure to join. I ended up creating a C, I was supposed to open up a new "tab" in the editor, which would open up a new scene, and choosing the 2d Scene Root Node. Hopefully, that's equivalent to steps 1 and 2 of what you detailed.

  • @ezthedev

    @ezthedev

    24 күн бұрын

    Yup! That's basically the same!

  • @olegfavorskii1403
    @olegfavorskii140321 күн бұрын

    for the card selection i think it would be better to use buttons instead of area 2d, it resolves overlapping by itself

  • @ezthedev

    @ezthedev

    21 күн бұрын

    I agree! I always get iffy about using specific nodes like button over generic building block, but honestly, for handling overlapping clicks and having easy hover/pressed/etc textures something like TextureButton works great probably!

  • @olegfavorskii1403

    @olegfavorskii1403

    21 күн бұрын

    @@ezthedev You also could use a path for the hand btw 🤔

  • @ezthedev

    @ezthedev

    20 күн бұрын

    @@olegfavorskii1403 haha definitely! Some also said curve?

  • @wo1fythedev
    @wo1fythedev26 күн бұрын

    I'm really appreciating the tutorial, but the quality of your screen capture makes it really hard to see what you're typing, even on the highest setting :(

  • @ezthedev

    @ezthedev

    26 күн бұрын

    I know... i had my setup all messed up for this one particular episode. Sorry for the sadness and pain! I fixed it for the next episode, but I know it's rough for this one...

  • @albert69Einstein
    @albert69EinsteinАй бұрын

    dude... I was following you tutorial to the letter, BUT BUT BUT at timestamp @43:59 mysteriously got a few more scripts that you didnt show us. These scripts AttackCard, DefendCard and CardHandler. While I am throughly enjoying this tutorial, its so aggravating that mysterious scripts all of a sudden pop up and are not explained. Maybe you do it later on in the tutorial ? IDK? I just noticed it and had to bring up the subject for those of us who spot stuff like this. anyway...good job. I like this tutorial format.

  • @ezthedev

    @ezthedev

    Ай бұрын

    hi! haha yea those i made as a test and was a whole rant session so i cut it. I cut that portion because it's not used at all (and i end up deleting those files). Sorry for the confusion and frustration! and I hope i can continue to make contents you can enjoy!

  • @ezthedev

    @ezthedev

    Ай бұрын

    good eyes.. haha i'll make sure to make it more consistent with things like that

  • @LocdnessMomster
    @LocdnessMomster16 күн бұрын

    Did you createyour own font?

  • @ezthedev

    @ezthedev

    16 күн бұрын

    I actually am subscribed to this creator that makes fonts and I get access to some of them! And a lot of them are free as well www.patreon.com/somepx/posts Otherwise, I do frequent www.dafont.com/ to find some free fonts I like!

  • @lurutpetal
    @lurutpetal26 күн бұрын

    The card's cost being placed in the right side is definitely on purpose, right?

  • @ezthedev

    @ezthedev

    26 күн бұрын

    Hahaha I actually love them to left off camera before episode 2. It was out of habit of seeing mana cost there from magic the gathering, but I was annoyed that it was covered in the hand

  • @nickjunes
    @nickjunes21 күн бұрын

    Great videos. One critique though is that I had to watch the beginning like 10 times to figure out how the canvases and scripts were related to each other. You kind of gloss over things like what’s a parent of what and how scripts are attached to nodes. If you blink you miss it.

  • @ezthedev

    @ezthedev

    21 күн бұрын

    Yeaaaa that's a very real! I definitely messed that part up with the edit and going through it! Hopefully, I will try to be better with that! Thanks for the feedback!

  • @nickjunes

    @nickjunes

    20 күн бұрын

    @@ezthedevThanks! I have a couple questions for you if you have a minute. Do you have to set an intermediate variable if you just want to set values of a label? Like is there a reason to make local variables for that? Also is there something like a separate constructor (that would run before it’s added to the scene) function so you don’t have to use the onready or is that the only kind of constructor there is?

  • @GameDev-ph5se
    @GameDev-ph5seАй бұрын

    Please! I need a online Digimon TCG

  • @ezthedev

    @ezthedev

    Ай бұрын

    Haha let's make it! You can make it following along!

  • @GameDev-ph5se

    @GameDev-ph5se

    Ай бұрын

    ​@@ezthedev Hope so. They have a good theme song just need a online multiplayer mode. Can't wait to get started, I've been wanting to make my own card game for over 20 years

  • @kazukisenpai2405
    @kazukisenpai2405Ай бұрын

    Bad video ever, low quality, low fps, talk too much unnecessary things

  • @RevvyHere

    @RevvyHere

    Ай бұрын

    maybe your brain is just bad

  • @Gameworks-gt9di

    @Gameworks-gt9di

    20 күн бұрын

    Some people just can't be taught. -Some Famous Dude

Келесі