How to Make a Roguelike Card Game on Godot

Поделиться
HTML-код
  • Опубликовано: 29 сен 2024

Комментарии • 239

  • @ezthedev
    @ezthedev  3 месяца назад +33

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

    • @hamsu7453
      @hamsu7453 3 месяца назад +4

      Keep it coming this is awesome!

    • @ezthedev
      @ezthedev  3 месяца назад +2

      @@hamsu7453 thank you!!

    • @vincent88pl
      @vincent88pl 2 месяца назад +1

      More videos like this :)

    • @taquito5242
      @taquito5242 2 месяца назад

      You can use a getter function to access variables if you're having trouble figuring out the load order.
      Generally, children are always loaded before the parents are, so you shouldn't have have problems referencing children. But if you want to access parents, you can try signals that work their way up to the parent, or attempt a getter function that fetches the reference to the parent like such:
      var node: Node2D:
      get:
      if node == null:
      node = get_tree().root.get_node("Path/to/node")
      return node
      HOWEVER, there are numerous other ways to do this too.
      You can right click on a node you want to access from anywhere in that scene, hit "Access as Unique Scene", and then you can access it later by referencing it with a % before its name!
      I've only watched so far until 37:00 so pardon if you've already discovered this.
      You can also hold references to (non-instantiated) nodes you frequently access in a singleton script that you can autoload!
      I've also heard people like to export nodes altogether to be able to reference them. You can do it in many ways.

    • @PartyWanted
      @PartyWanted 5 дней назад

      Hi, I was wondering how much more work it would be to multiplayer ?

  • @skibbl_dev
    @skibbl_dev 3 месяца назад +51

    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  3 месяца назад +25

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

  • @jamesrivettcarnac
    @jamesrivettcarnac 3 месяца назад +3

    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  3 месяца назад

      This right here is the truth!

  • @Mr.po0o
    @Mr.po0o 3 месяца назад +4

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

    • @ezthedev
      @ezthedev  3 месяца назад +1

      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!

  • @albert69Einstein
    @albert69Einstein 3 месяца назад +2

    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  3 месяца назад

      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  3 месяца назад

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

  • @TheGenuineNoiser
    @TheGenuineNoiser 3 месяца назад +50

    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  3 месяца назад +4

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

  • @danielwertz8724
    @danielwertz8724 3 месяца назад +38

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

    • @ezthedev
      @ezthedev  3 месяца назад +2

      Hahaha group huggg 🤗

  • @rmt3589
    @rmt3589 13 дней назад +4

    1:08:05 You're doing good! This is the learning that most tutorials leave out.

    • @ezthedev
      @ezthedev  13 дней назад +1

      Haha thanks ! That is so encouraging

    • @rmt3589
      @rmt3589 13 дней назад +1

      @@ezthedev Np. I'm on my first watch of Episodes 2, and am loving it! Seems to be exactly what I needed.

  • @catnapsandramen9435
    @catnapsandramen9435 2 месяца назад +14

    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  2 месяца назад +5

      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 2 месяца назад +2

      Seconded!

  • @muxecoid
    @muxecoid 2 месяца назад +10

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

    • @ezthedev
      @ezthedev  2 месяца назад +2

      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!

  • @AllMindControl
    @AllMindControl 3 месяца назад +6

    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  3 месяца назад +1

      Omg this is some top tip! Haha thanks

  • @kiryonnakira7566
    @kiryonnakira7566 3 месяца назад +3

    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  3 месяца назад

      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!

  • @SableSpiritStudio
    @SableSpiritStudio 3 месяца назад +12

    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  3 месяца назад +3

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

    • @jamesrivettcarnac
      @jamesrivettcarnac 3 месяца назад +2

      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.

  • @anderslarsson4252
    @anderslarsson4252 3 месяца назад +7

    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  3 месяца назад +1

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

  • @party-logan4110
    @party-logan4110 3 месяца назад +5

    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  3 месяца назад +2

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

  • @davidwusoftdev
    @davidwusoftdev 3 месяца назад +5

    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  3 месяца назад

      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!

  • @Justango69
    @Justango69 3 месяца назад +4

    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  3 месяца назад +1

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

  • @djalexander968
    @djalexander968 Месяц назад +2

    I dont care if i never watch a video again, showing your work? Explaining things beyond "this is a _, so anyways", your a nugget of gold in a coalmine 2 seconds from exploding, youtube godot devs are really not helpful with the small and often common mistakes we make, cause it either isnt good views, or they just cant imagine anyone needing the advice 😂, but like i said, showing you work, just like in class, helps everyone else understand how a mistake wouldve even been a mistake, and how to catch it ahead of time in the future, whether you make it on the "simple stuff" or not, either way definitely subbed

    • @ezthedev
      @ezthedev  Месяц назад

      Thank you for your sub!
      AND such kind and encouraging words! Haha I'm glad to hear this style of content is something that a lot of people are resonating with. Thanks again!

  • @godotgamelab
    @godotgamelab 3 месяца назад +4

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

    • @ezthedev
      @ezthedev  3 месяца назад +1

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

  • @piotrwegrzyniak5798
    @piotrwegrzyniak5798 3 месяца назад +2

    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  3 месяца назад

      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

  • @dryerflyer
    @dryerflyer 3 месяца назад +3

    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  3 месяца назад +1

      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!

  • @fernandoiraira6926
    @fernandoiraira6926 3 месяца назад +6

    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  3 месяца назад +2

      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!

    • @H3_remix
      @H3_remix 3 месяца назад +3

      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.

  • @mrrenreal
    @mrrenreal 3 месяца назад +2

    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  3 месяца назад

      Haha thanks for the encouragement and the sub!

  • @Burnrate
    @Burnrate 2 месяца назад +3

    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

  • @generrosity
    @generrosity 3 месяца назад +2

    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  3 месяца назад +1

      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!

  • @americoperez810
    @americoperez810 3 месяца назад +4

    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  3 месяца назад

      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 3 месяца назад +1

      @@ezthedev agreed

  • @Edward-Not-Elric
    @Edward-Not-Elric 3 месяца назад +4

    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  3 месяца назад +1

      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 3 месяца назад +1

      ​@@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  3 месяца назад +1

      @@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!

  • @khaledmoussa2668
    @khaledmoussa2668 2 месяца назад +2

    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  2 месяца назад +1

      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 2 месяца назад

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

  • @lormden
    @lormden 3 месяца назад +2

    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  3 месяца назад

      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!

  • @ecredes
    @ecredes 3 месяца назад +2

    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  3 месяца назад +1

      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!

  • @Walbertkyle
    @Walbertkyle 2 месяца назад +1

    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  2 месяца назад

      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!

  • @gleb_
    @gleb_ 2 месяца назад +1

    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  2 месяца назад +1

      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!

  • @jamesrivettcarnac
    @jamesrivettcarnac 3 месяца назад +3

    8:22 lame is good in code naming.

    • @ezthedev
      @ezthedev  3 месяца назад

      Haha lame but detailed

  • @grinningtaverngaming395
    @grinningtaverngaming395 2 месяца назад +1

    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  2 месяца назад

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

  • @dannyriz1080
    @dannyriz1080 2 месяца назад +1

    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  2 месяца назад

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

  • @americoperez810
    @americoperez810 3 месяца назад +3

    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  3 месяца назад

      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 3 месяца назад +1

      @@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  3 месяца назад

      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!

  • @ArktikusYoutube
    @ArktikusYoutube 3 месяца назад +2

    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  3 месяца назад +1

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

  • @Dpik3
    @Dpik3 18 дней назад +1

    I have always wanted to get into game dev. Thank you for the passionate and entertaining thought process of creating a game. I really enjoy the level of detail you went into and the rawness of your thought process.

    • @ezthedev
      @ezthedev  18 дней назад

      Thank you so much for following along!

  • @Swilzy
    @Swilzy Месяц назад +1

    That was so fun to follow along.
    I like how you explain how you would do it yourself, so i can try to do it my way or following your thought and then i can just come back to see if we did it the same way, and if doesn't work for me, i can at least have a fix for it.
    That was especially true for the math behind the calculation about hand card positions.
    I'm a dev as my day job, it's always so fun to see that even developers don't think in the same way as other developers when it comes to problem solving.
    +1 Sub.
    Will watch the next part with great interest.

    • @ezthedev
      @ezthedev  Месяц назад

      thank you so much for the sub and view!
      It's so encouraging to hear your thought on this format, and loved that you enjoyed it!

  • @mikelezhnin8601
    @mikelezhnin8601 2 месяца назад +1

    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  2 месяца назад +1

      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!

  • @thomasbickerdike5753
    @thomasbickerdike5753 2 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад +1

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

  • @ryanclark9686
    @ryanclark9686 3 месяца назад +3

    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  3 месяца назад +2

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

  • @H3_remix
    @H3_remix 3 месяца назад +4

    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  2 месяца назад +1

      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 2 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад +1

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

  • @ColinThePanda64
    @ColinThePanda64 Месяц назад +1

    I was stuck for like 30 mins because in the handle card touched and untouched I put in card: Card instead of card and it stopped working. This is a great video and I learned a lot.

    • @ezthedev
      @ezthedev  Месяц назад +1

      I.. yea haha apologies! But I'm glad you got through!

  • @guirosan
    @guirosan 3 месяца назад +2

    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  3 месяца назад

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

  • @wo1fythedev
    @wo1fythedev 2 месяца назад +1

    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  2 месяца назад +1

      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...

  • @PsychodelicKitten
    @PsychodelicKitten Месяц назад +1

    When I play back the screen is all gray. I’m in 3d though and I’ve done camera and environment and like the thing is just blind and driving me nuts. I’ve got it to work once and that’s about it. Makes me want to try another engine. I’m following a tutorial right now but hasn’t got to that part yet 🤦🏻‍♀️ also love ur vids so far

    • @ezthedev
      @ezthedev  Месяц назад

      hello PsychodelickKtten, thanks for enjoying the video and following along!
      Unfortunately, that's one thing you must make sure... you need to be in 2D in order for everything to work well!
      If you are still having trouble, I'm available in our discord to help out!
      I've worked with other viewers who had trouble by helping them via screenshots and/or screen share in voice chat!
      so, please feel free to come and ask!
      here's the link: discord.gg/vNZSBqk4

  • @albert69Einstein
    @albert69Einstein 3 месяца назад +2

    Thanks!

    • @ezthedev
      @ezthedev  3 месяца назад

      Thank you so much for the support!

  • @Ghin_Antonic
    @Ghin_Antonic 3 месяца назад +1

    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  2 месяца назад

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

  • @CaiooliveiraRAWR
    @CaiooliveiraRAWR 3 месяца назад +2

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

    • @ezthedev
      @ezthedev  3 месяца назад

      Thanks for watching!

  • @Ryöken17
    @Ryöken17 2 месяца назад +1

    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  2 месяца назад +1

      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!

  • @ThatBoiJayGee
    @ThatBoiJayGee 3 месяца назад +1

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

    • @ezthedev
      @ezthedev  3 месяца назад

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

  • @luz-ep5ej
    @luz-ep5ej Месяц назад +1

    quite good one vedio, I wish you could make more about it, like it🥰🥰

    • @ezthedev
      @ezthedev  Месяц назад

      There are two more episodes and the 4th one is coming soon!

  • @Road_to_Dawn
    @Road_to_Dawn 13 дней назад +1

    Regarding the angles being upside down to where the Y-axis is positive going down and negative going up: the way I heard it is that it comes from how old TV screens were measured from the top-left corner, so while X would increment as you measured to the right, Y would increment as you measured downward.

    • @ezthedev
      @ezthedev  12 дней назад +1

      Very interesting! Thanks for this fun information! And thanks for watching:)

    • @Road_to_Dawn
      @Road_to_Dawn 12 дней назад

      Thank you! And good luck with the game!

  • @lurutpetal
    @lurutpetal 2 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад +1

      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

  • @htspencer9084
    @htspencer9084 Месяц назад +1

    I too find it difficult to not write my variable names in camelCase >.

    • @ezthedev
      @ezthedev  Месяц назад

      STILL going back and forth as we speak.. haha I can't be consistent cuz of the habit!

  • @Wilson-or1rt
    @Wilson-or1rt 3 месяца назад +2

    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  3 месяца назад

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

  • @amitkrishna4645
    @amitkrishna4645 3 месяца назад +2

    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  3 месяца назад

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

  • @SableSpiritStudio
    @SableSpiritStudio 3 месяца назад +2

    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 😄

  • @gualdim
    @gualdim 3 месяца назад +2

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

    • @ezthedev
      @ezthedev  3 месяца назад +1

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

  • @GameDev-ph5se
    @GameDev-ph5se 3 месяца назад +1

    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

  • @BatuhanErsoyYT
    @BatuhanErsoyYT 3 месяца назад +2

    Perfect

  • @JojoMcMuffin
    @JojoMcMuffin 3 месяца назад +2

    Nice vid, looking forward to the future updates.

  • @nickjunes
    @nickjunes 2 месяца назад +1

    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  2 месяца назад +1

      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 2 месяца назад

      @@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?

  • @iozturkeri
    @iozturkeri 3 месяца назад +2

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

    • @ezthedev
      @ezthedev  3 месяца назад

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

  • @galopunk6392
    @galopunk6392 3 месяца назад +2

    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  3 месяца назад

      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!

  • @TheWorstWurst
    @TheWorstWurst 3 месяца назад +2

    Good video. I've learned alot 🙂

    • @ezthedev
      @ezthedev  3 месяца назад

      Thank you and I'm so happy to hear!

  • @ksrrompe
    @ksrrompe 3 месяца назад +2

    Thanks bro, this is awesome!

    • @ezthedev
      @ezthedev  3 месяца назад +1

      Thanks you for watching!

  • @computersciencestudentriverbat
    @computersciencestudentriverbat 3 месяца назад +2

    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  3 месяца назад +1

      Thanks a lot for your encouragement always!

  • @ВладСидюк2акітр-23м
    @ВладСидюк2акітр-23м 2 месяца назад +1

    Thank you it's real helpful and interesting tutor

    • @ezthedev
      @ezthedev  2 месяца назад +1

      Thank you for watching and commenting!

  • @daczimek
    @daczimek 2 месяца назад +1

    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.

    • @ezthedev
      @ezthedev  2 месяца назад

      Hi! Thanks for the support on kofi! Haha I'm trying to start membership benefits and such via RUclips instead of Patreon currently but I'll hopefully get started on patreon soon!
      Let's see.. for your questions.
      1) doing graphic update on process.
      So, typically it would be better performance to do it as you did. However, I had enough issues in the past when doing "just in time" graphic updates sometimes things can get messy with "turning off" highlight in all the future cases. I found it easier to manage in a less error prone way when doing the "state" or data update "just in time" and having the graphical update on every loop based on the state.
      One exception is if I know for a fact that the graphical update is heavy then I can look at just in time update... however, it rarely happens since if it's just visual update that needs to happen. You can also offload it to GPU (shader) and not worry. I just developed this pattern o er the years to be efficient in prototyping while reducing future issues.

    • @ezthedev
      @ezthedev  2 месяца назад

      2. Inheritance of object sometimes doesn't work quite as well since you end up having to copy the dependent "nodes" in the scene tree for "inherited" objects.. so if you have any big changes at the base/parent level, you have tons of changes to make for all the children scenes.. in organization and concept, it feels nice, but in practice inheritance gets messy to keep up with...
      So, I developed a habit of making "scenes" to be less I hesitancy but more modular/component

    • @ezthedev
      @ezthedev  2 месяца назад

      Hope this clarifies some of my decisions! Thanks for watching again!

  • @Kennsey_96
    @Kennsey_96 2 месяца назад +1

    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  2 месяца назад +1

      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!

    • @Kennsey_96
      @Kennsey_96 2 месяца назад

      @@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

  • @EmptyString1999
    @EmptyString1999 2 месяца назад +1

    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 2 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад

      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!

  • @jamesrivettcarnac
    @jamesrivettcarnac 3 месяца назад +2

    17:22 types are good.

  • @hardcoreresettifan5048
    @hardcoreresettifan5048 12 дней назад +1

    this is EXACTLY what I have been looking for. thank you.

    • @hardcoreresettifan5048
      @hardcoreresettifan5048 12 дней назад +1

      would join a patreon for this kind of thing. 100%.

    • @ezthedev
      @ezthedev  11 дней назад +1

      Haha that's good to hear! Still focusing on serving the community and the members/subs! Hopefully I can be prolific enough to start patreon! thanks for the support!

  • @lv99redchocobo37
    @lv99redchocobo37 3 месяца назад +2

    looking forward to your next vid :D what a journey

    • @ezthedev
      @ezthedev  3 месяца назад

      Thanks for watching!

  • @socraticgambler
    @socraticgambler 3 месяца назад +1

    This is an encouraging word in the comments. 🎉❤

    • @ezthedev
      @ezthedev  3 месяца назад

      Thanks! 🙏

  • @EthernalOynuyor
    @EthernalOynuyor 22 дня назад +1

    I have been working on a card game as a side project since godot 3.5 and now i imported it to 4.3. Our setups are very similar but i also have scripts attached to card resources that play out their intended effects. One problem i have is that even if i queue_free or free all cards or/and then the entire scene and return to main menu and start a new game, the cards retain their buffs and don't trigger their effects again. (In the exported game, not in the engine)
    Way i do it is X amount of random cards are chosen based on difficulty and then loaded using "load" during a loading screen scene and then transferred into an array of packedScenes that is present in the GameBoard scene.

    • @ezthedev
      @ezthedev  20 дней назад

      That is a great insight! I hope your process of coming over to 4.x+ version has been good! I've been really loving godot so far!

    • @EthernalOynuyor
      @EthernalOynuyor 20 дней назад +1

      @@ezthedev It wasn't too hard, the only significant things that broke down was the anchoring on a lot of elements which i had to rearrange the entire UI basically and the tween nodes along with their messed up animations.

    • @ezthedev
      @ezthedev  20 дней назад

      @@EthernalOynuyor right they did remove/deprecated in favor of lot of other cool features! I think overall it's all great changes! But yea up version ing engine is always a bit of pain haha

  • @alexgeo7358
    @alexgeo7358 3 месяца назад +2

    Gloomheaven at the back! Proud of you bro!

    • @ezthedev
      @ezthedev  3 месяца назад

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

  • @emreldmelting7898
    @emreldmelting7898 2 месяца назад +1

    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  2 месяца назад +1

      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 2 месяца назад +1

      @@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  2 месяца назад

      Yup! That's basically the same!

  • @rotterdim
    @rotterdim 2 месяца назад +1

    When I search for "tutorials" on development, THIS is what I want to see. It's like a pair programming session, semi-scripted, so closer to the truth than most other tutorials. I love the concept, and hope you'll do a colony sim game next ;)

    • @ezthedev
      @ezthedev  2 месяца назад

      Haha thanks for watching! This is definitely encouraging to continue on my journey! Colony Sim soon? Sounds fun to explore!

  • @olegfavorskii1403
    @olegfavorskii1403 2 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад

      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 2 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад

      @@olegfavorskii1403 haha definitely! Some also said curve?

  • @rileypoteralski7964
    @rileypoteralski7964 2 месяца назад +1

    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  2 месяца назад

      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 2 месяца назад

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

    • @ezthedev
      @ezthedev  2 месяца назад

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

    • @rileypoteralski7964
      @rileypoteralski7964 2 месяца назад +1

      @@ezthedev Thanks!

  • @Ookami31
    @Ookami31 2 месяца назад +1

    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  2 месяца назад +1

      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!

  • @JakubSK
    @JakubSK 2 месяца назад +1

    Do not build cards dynamically, this is a pain to work with when then dealing with shaders, even if setting shaders at the parent level. Simply draw each card and call it a day.

    • @ezthedev
      @ezthedev  2 месяца назад

      Very valid and real advise!

  • @LocdnessMomster
    @LocdnessMomster 2 месяца назад +1

    Did you createyour own font?

    • @ezthedev
      @ezthedev  2 месяца назад +1

      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!

  • @andytai7180
    @andytai7180 2 месяца назад +1

    Good tutorial, thanks!

    • @ezthedev
      @ezthedev  2 месяца назад

      Thanks for watching!

  • @NicolasMRodriguez
    @NicolasMRodriguez 3 месяца назад +2

    Thanks for sharing!

    • @ezthedev
      @ezthedev  3 месяца назад

      Thanks for watching!

  • @AnalogAbyss-ui6td
    @AnalogAbyss-ui6td Месяц назад +1

    Gold!! Well Done Sir!!👏

  • @BrunoJuncklaus
    @BrunoJuncklaus 3 месяца назад +1

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

    • @ezthedev
      @ezthedev  3 месяца назад

      you are welcome! and thanks for watching!

  • @PioYPK
    @PioYPK 22 дня назад +1

    You're a great teacher!

  • @MixedSourceStudio
    @MixedSourceStudio 3 месяца назад +1

    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  3 месяца назад

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

  • @GuiCmo
    @GuiCmo Месяц назад +1

    Thank you so much.

    • @ezthedev
      @ezthedev  Месяц назад

      Thank you for watching!

  • @MyNamesRuss
    @MyNamesRuss Месяц назад

    "This series is going to include the mistakes and bugs" - fantastic. Tutorials teach you *how* to do something, but not *why* you want to do it that way. Don't just show me the right way, show me the wrong way too, and the difference between them!

    • @ezthedev
      @ezthedev  Месяц назад +1

      And I definitely do go a "wrong" way a lot haha. I try to show the thought process of sticking with wrong way to get to playable state and thinking of fixes and improvements "just in time" to encourage people to get to making games and stop roaming around the tutorial/idea/archetecture hell haha....
      We've been all there

  • @borisbarzotto5785
    @borisbarzotto5785 Месяц назад

    Thanks for the tutorial, I got a bit lost at the end when I implemented the highlight. It could be done better with a system like the z-index? I do not know if there is something similar in godot, but add a z-index or layer index to each collisionshape2d of the cards and thus better detect the card that interacts with the mouse without affecting the one below? thx

    • @ezthedev
      @ezthedev  Месяц назад

      That's definitely one way! I personally try to avoid using z index because by default they are all set to 0 and managing the programmatically or manually could get confusing.
      Other great way is also to use TextureButton which already handles clicking well.
      Other way is to use "control" or "container" which has property called "mouse" and you can make the entity "black" mouse control so anything underneath doesn't get impacted!
      A lot of better ways for sure! Now, underneath how those implementations are done probably is some type of draw order awareness.
      Thanks for participating in this discussion and help!

  • @JiKayPh
    @JiKayPh Месяц назад +1

    I like this video

  • @GameDev-ph5se
    @GameDev-ph5se 3 месяца назад +1

    Please! I need a online Digimon TCG

    • @ezthedev
      @ezthedev  3 месяца назад +1

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

    • @GameDev-ph5se
      @GameDev-ph5se 3 месяца назад +1

      ​@@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

  • @babben9092
    @babben9092 Месяц назад

    I'm building a card playing game and this series is helping a bunch, thanks!

    • @ezthedev
      @ezthedev  Месяц назад

      Thanks for watching and stopping by on stream!

  • @rickystah101
    @rickystah101 Месяц назад

    new fav godot tutorial, thanks for this example!

    • @ezthedev
      @ezthedev  Месяц назад

      Thanks for watching! Hope you have fun in your dev journey

  • @viniciusantonio2253
    @viniciusantonio2253 3 месяца назад +1

    math for hand: curve goes brrrrrrrrrrrrrrrrrrrrrrrrrrrr

    • @ezthedev
      @ezthedev  3 месяца назад +1

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

    • @viniciusantonio2253
      @viniciusantonio2253 3 месяца назад +1

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

    • @ezthedev
      @ezthedev  2 месяца назад +1

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