How to Create an RPG in Godot 4 (step by step)

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

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

  • @dev-worm
    @dev-worm  Год назад +84

    link to the full series: ruclips.net/p/PL3cGrGHvkwn0zoGLoGorwvGj6dHCjLaGd

    • @legendhowl
      @legendhowl Год назад

      how did u split the sprite sheet

    • @aynonms
      @aynonms Год назад

      @@legendhowl 6/10

    • @legendhowl
      @legendhowl Год назад

      @@aynonms wdym

    • @aynonms
      @aynonms Год назад

      @@legendhowl 6 vertical, 10 horizontal

    • @legendhowl
      @legendhowl Год назад

      ik but it becomes blurry for me

  • @Marandal
    @Marandal Год назад +252

    i am a refugee from Unity. Thank you dev-worm for this tutorial!
    I really appreciate your in-depth explanations of what things do and how
    they operate.

    • @dev-worm
      @dev-worm  Год назад +10

      Glad it could help!

    • @idontknoq4813
      @idontknoq4813 Год назад +9

      I'm also a refugee. Thanks for the tutorial.

    • @Vocodedvoice
      @Vocodedvoice Год назад +5

      Same

    • @1997AlexB
      @1997AlexB Год назад +5

      Godot welcomes refugees of all nations!

    • @enderpig99
      @enderpig99 Год назад +4

      @@1997AlexB im an unreal refugee it was tough😥

  • @Diertstarr
    @Diertstarr Год назад +42

    Unity refugee here; starting the toots - so far so good - no problems, easy to pick up. Thank man! See ya in the next one!

  • @microwire007
    @microwire007 Год назад +149

    Just saying "Hi" to all the other new Godot users who have jumped ship in the past couple of days. I only just started learning game development about 4 weeks ago on Unity, I'm thinking now is a good time to focus on a different tool.

  • @ilguardiano8718
    @ilguardiano8718 Год назад +29

    the legend is back, more powerful than before

  • @LoganSie
    @LoganSie Год назад +28

    As someone who is new to coding in general and godot, this tutorial is beyond amazing! It would be great if your future videos you made mechanics which we could simply add and expand on. Will continue to watch this series and the rest of your videos because i feel there isn't as much resources for godot 4 in terms of learning and this video alone is very inspiring! Thanks!❤

    • @dev-worm
      @dev-worm  Год назад +10

      so glad to hear that, im working on some really exciting tutorials right now

  • @ericspeak6110
    @ericspeak6110 Год назад +10

    THANK YOU for the work that your doing, this channel right now is the reason I havent given up again on my dream. Thank you,

    • @dev-worm
      @dev-worm  Год назад +3

      Glad to hear it, Im wishing you the best and I cant wait to see your finial game!

  • @Makiyes-gaming
    @Makiyes-gaming Год назад +47

    Just as a tip if your animation doesn’t work after all the code make sure the animated sprite is a child of the player and not the collision box

    • @mohamedbennasroune7633
      @mohamedbennasroune7633 Год назад +7

      BRO U SAVED MY DAY FR I WAS WONDERING FOR HOURS WTF WAS I DOING WRONG THANK YOU SO MUCH

    • @gripychipy
      @gripychipy 10 месяцев назад

      Thanks

    • @ValentineInWonderland
      @ValentineInWonderland 8 месяцев назад +2

      Bro my character literally doesn't show up at all 😭 not sure what I did wrong tho, because I literally followed this exactly

    • @jeremiahhoney650
      @jeremiahhoney650 8 месяцев назад +2

      @@ValentineInWonderland same all I get is grey screen

    • @themaplerunner3994
      @themaplerunner3994 4 месяца назад

      thank you so much

  • @abnorth2276
    @abnorth2276 4 месяца назад +1

    Good tip for people who don't want to flip the sprite to make it go left and right (so for example you have a dedicated sprite for left and right): You can just remove the lines that say anim.flip_h = true/false on the last if statements in the player script and then type in your own animation where it otherwise would be "side_walk" and "side_idle" respectively. It worked great. Awesome tutorial.

  • @qmerk2661
    @qmerk2661 7 месяцев назад +26

    first off, im loving the tutorial so far. im already on ep. 4 but i figured id ask this here.
    i am pretty new to game dev and godot. so im pretty sure this is not the best way to go about this but id rather have my character have diagonal movement as well so i changed the code under the func player_movement(delta) part to
    func player_movement(delta):
    if Input.get_action_strength("Move_right"):
    play_anim(1)
    current_dir = "right"
    elif Input.get_action_strength("Move_Left"):
    play_anim(1)
    current_dir = "left"
    elif Input.get_action_strength("Move_Down"):
    play_anim(1)
    current_dir = "down"
    elif Input.get_action_strength("Move_Up"):
    play_anim(1)
    current_dir = "up"
    else:
    play_anim(0)
    var input_vector = Vector2.ZERO
    input_vector.x = Input.get_action_strength("Move_right") - Input.get_action_strength("Move_Left")
    input_vector.y = Input.get_action_strength("Move_Down") - Input.get_action_strength("Move_Up")
    input_vector = input_vector.normalized()

    if input_vector:
    velocity = input_vector * speed
    else:
    velocity = input_vector

    move_and_slide()
    now heres the thing. this took me forever to try to figure out (because im new to this stuff) but everything works as i wanted it to, and im happy about it, and honestly proud of myself for getting it to work at all lol. but im just gonna ask anyone that may know more then i do, if i did something wrong here that may bite me in the butt later on.
    im not asking for some nit picky answer just so you can try to flex your knowledge with an advanced answer, im only asking if, for me(a beginner thats just gonna use this tutorial to have a project to practice learning with(kinda like a starting template))
    if this is a BASIC way to do this, and if its fine or not. thank you in advance

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

      Thank you, i was searching for this, saw so many tutorials i was going to just go with it

    • @lithium1497
      @lithium1497 5 месяцев назад +6

      Beginner here myself, always look at the comments of the Video. Somewhere below user @sashabellor4344 posted a script below, but it was missing a line in the func _physics section, will copy below the correct code that worked for me after I fixed it up.
      @export var speed = 100
      func _physics_process(_delta):
      var direction = Input.get_vector("left", "right", "up", "down")
      velocity = direction * speed
      move_and_slide()
      Voila, simple as that.. Just make sure to go into your Project > Project Settings > Input Map > Bind your keys "left" "right" "up" "down" to each separate Arrow/WASD, or the script will launch like 1000 errors a second looking for un-mapped buttons.
      Good luck sir, I was getting frustrated because the code in the video wasn't working properly either, and the previous comment from Sasha was slightly off, as when I tried func _physics_process(delta) It would debug an error saying it required a _delta .. hence, func _physics_process(_delta): and for some reason this no longer spits out any debug issues + works in all 8 directions.... 4 hours later RIP Saturday Night.
      Edit: After hours of frustration, this was all scrapped and followed the original tutorial, getting the animations to work was such a pain, I am sticking to what is shown to us.

    • @brakefox5106
      @brakefox5106 5 месяцев назад +1

      @@lithium1497 Thx bro! You helped me. Hi from Brazil.

    • @lithium1497
      @lithium1497 5 месяцев назад +2

      @@brakefox5106 You are very welcome! Much love from Canada

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

    legendary yt channel, been starting gamedev and your tutorials are so good as they explain everything we want to know and implement in our games.
    keep going!

    • @dev-worm
      @dev-worm  2 месяца назад

      I am so happy to hear that!! if you have any questions at all throughout the way feel free to let me know!

  • @missharley2118
    @missharley2118 Год назад +2

    So much better and faster than the outdated one I spent all day trying to debug, THANK YOU SO DAMN MUCH.
    I do need to learn how to type faster though, you type so quick I have to keep pausing and rewinding to pause it haha!

    • @deadjuice1880
      @deadjuice1880 10 месяцев назад

      Learning from watching is tough and slow.
      A few good tips:
      Watch the video first.
      Then follow along after.
      Observe, take in what you can, and then go along with it.
      You're here to learn, but you can get stuck in a mental trap by following instructions, and not having time to understand.
      Also, put it to like 0x75 speed with the gear icon in RUclips.
      Good stuff to learn here, but also, the instructor moves way too fast, while you are trying to follow.
      No fault on them or you, this is a great series of tutorials, and there is a lot to be learned here.

  • @Maxter1o2
    @Maxter1o2 8 дней назад

    Just started your series, just finished this video. Just wanted to say thank you for making this tutorial video series even though 2 years old almost this video alone has been very informative, helpful and honestly pretty cool watching few lines of code making something start to come to life.

    • @dev-worm
      @dev-worm  7 дней назад +1

      Aww I am so glad to hear that it is still providing value. I really hope that the series helps you greatly and if you ever have any questions feel free to let me know! And that first time feeling of getting something to start moving on screen from your own work is a feeling you can never top... it is such a great feeling for sure. Goodjob and Goodluck throughout the rest of the series!

  • @gonzaloramirez3261
    @gonzaloramirez3261 Год назад +5

    Thank you from Argentina, this video is of great help to me as I start a project I have in mind. It's undoubtedly a huge advantage to have this! Greetings.

    • @dev-worm
      @dev-worm  Год назад +2

      so glad to hear that!

  • @tomoyaokazaki2138
    @tomoyaokazaki2138 9 месяцев назад +2

    dude, i like how much you covered in this one video. I also had my doubts tbh with how the animation was coded in, but it worked perfectly on my end like it did on your end! Whenever that happens, you know it's an amazing tutorial. I can't wait to watch your other tutorial videos for this series!

    • @dev-worm
      @dev-worm  9 месяцев назад

      goodluck in the rest of the series!! thanks!! if you ever need anything then please let me know!

  • @chase7767
    @chase7767 Год назад +6

    I drank each time he says "right" and died of alcohol poisoning at 13:32

    • @mathislalonde353
      @mathislalonde353 11 месяцев назад +1

      you killed me 😂😭

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

      still thinking about this comment almost a year later. lmao

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

    rewatching this series for the 2nd time after half a year for a new game project idea! thanks!

  • @SkillSage-p3r
    @SkillSage-p3r Год назад +28

    to move the player you could use this instead of the huge amount of if statements:-
    const SPEED = 100
    var direction : Vector2 = Vector2.ZERO
    func _physics_process(delta):
    direction = Input.get_vector("left", "right", "up", "down")
    if direction:
    velocity = direction * SPEED
    else:
    velocity = Vector2.ZERO
    move_and_slide()
    it works the same.

    • @doublecc6234
      @doublecc6234 Год назад +3

      How would you implement the animation code into the character movement code?

    • @SkillSage-p3r
      @SkillSage-p3r Год назад

      @@doublecc6234 I used Animationtree, I learned the way from this video it is very helpful,
      ruclips.net/video/WrMORzl3g1U/видео.htmlfeature=shared
      Animationtree make things more simpler and easy.

    • @TheEndTimes101
      @TheEndTimes101 8 месяцев назад

      The issue with this code is it adds diagonal movement if the player hits left and right at the same time. Diagonal movement in itself is not a bad thing but you will need new animations and more code to get it working. His code keeps that out and it fits top down feel better. Not saying there's not a better way.

    • @SkillSage-p3r
      @SkillSage-p3r 8 месяцев назад +6

      @@TheEndTimes101 yeah to fix it add . normalized here
      direction = Input.get_vector("left", "right", "up", "down"). normalized
      and it should be fixed.

    • @CozyThreadsAU
      @CozyThreadsAU 5 месяцев назад +4

      The other code wasn't working for me but this is. Thanks!

  • @sanitycheck574
    @sanitycheck574 Год назад +2

    every godot4 tutorial maker is a hero!!!!!!!!!!!!!!

  • @JayTohab
    @JayTohab 9 месяцев назад +3

    While the game I want to make isn't from this genre, this is still good practice for me to get used to working with Godot! Thanks!

    • @dev-worm
      @dev-worm  9 месяцев назад +1

      I completely agree with you!! goodluck!! let me know if you need anything at all!

  • @pafinnoobmufin5037
    @pafinnoobmufin5037 Год назад +5

    Thank you so much, I just finished series yesterday and tried to do this part alone and almost did it but I am happy that I found different solution to animations and it works

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

    Really good. Well explained. Really new to Godot but used other engines, your explanation of the way the variables and functions interact in the GD script really helped and was well timed. Thanks man

  • @armyofchickens6062
    @armyofchickens6062 Год назад +37

    At 19:30, Instead of the ready function with the animation, inside of the animated sprite 2d you can set an animation to be the default when it starts, saves some coding

    • @davidbouman8928
      @davidbouman8928 Год назад +7

      but with the ready function you can have multiple different start animations for different scenes, i.e. if you want the character to start facing the right in a boss fight.

  • @funmtg1272
    @funmtg1272 Год назад +1

    watched this video today and plan on watching the rest in the series. very helpful and informative.

    • @dev-worm
      @dev-worm  Год назад

      so happy to hear that! thank you, hope the rest of the series is helpful

  • @randykeith1203
    @randykeith1203 Год назад +12

    I followed your directions to the letter until 12:28 but I don't see my character on screen at all in the debug
    edit: for some reason the scene was on world and not player but still cannot move my character in debug

    • @narrow_way12
      @narrow_way12 Год назад +2

      same

    • @Picksol
      @Picksol Год назад +4

      If you still haven't fixed your non-moving character it may be because your input system for "ui_right" etc. only using the arrow keys, you need to put in the WASD movement yourself by going to Project --> Project Settings --> Input System (in the tab bar) --> Then putting them in for each of the ui_right ui_left. If that didn't fix it, you may not have move_and_slide() or not calling the method he made in process, or you may not have made the script differently from him and that made it not attached to the player

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

      Also, scaling comes up shortly after, which solved mine, my guy was too tiny.

  • @eddyxc1697
    @eddyxc1697 7 месяцев назад

    hey bro, appreciate the tutorial. always enjoy creators who present things in a fast, but concise way

    • @dev-worm
      @dev-worm  7 месяцев назад +1

      I appreciate that! hope it helped!! thank you bro!

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

    I usually favor reading over videos for learning new things, but the main benefit of video in learning game development is that you can match results much better. The problem arises when stuff doesn't work, and you have to keep scrolling for that tiny step you missed or did in another way.
    I created the script using the asset tree, by right-clicking the scripts folder and adding the script. This doesn't attach the script to the CharacterBody2D node. After about half an hour of scrolling through the video, I finally noticed in the inspector that no script was attached, so I simply attached it there and it worked. Turns out I missed the click on the attach script button in the video.
    Thanks for the series, it's going to be a fun one.

  • @BigJim1976
    @BigJim1976 9 месяцев назад

    This was infact informative! I used to mess around in unity as a hobby years ago when I was a kid. Kinda dropped it because I just never knew what I really wanted to do with it, plus at that time I was used to writting in Java script, which did not translate well with the tutorials at the time. They were mostly wrote in C#, and trying to translate it to Java script when you barely knew code at all was rather difficult, lol.
    So I've been really wanting to get back into making some games for fun, and Godot seemed like a pretty good opportunity to do so, but I just couldn't figure out a good place to start. This video has atleast given me 1/2 a mind of what I'm trying to do, and how to do certain tasks, I will will follow the rest of this series with joy, and pleasure.
    Thank you good sir!

    • @dev-worm
      @dev-worm  9 месяцев назад +1

      thank you!! i believe Godot is the best place of anyone to get started with development! and Im wishing you only the best!! if you ever need anything then please let me know! ill be glad to help!

  • @General_Havoc
    @General_Havoc Год назад +6

    Hello! Just wondering if you could do a series on how to Create a Platformer in Godot 4. It would be really cool!

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

    one of the best tutorials i have seen so far

    • @dev-worm
      @dev-worm  2 месяца назад

      so happy to hear that!! thank you so much!

  • @glitcheddivinity
    @glitcheddivinity Год назад +7

    This is amazing. Thank you so much! As an absolute beginner, this was easy to follow. So excited for the rest of this!

    • @dev-worm
      @dev-worm  Год назад +3

      so glad I could help, if there is anything else you need then please let me know.

  • @minkhe
    @minkhe Год назад

    You deserve more attention this is one of the best tutorials I've seen

    • @dev-worm
      @dev-worm  Год назад +1

      so happy to hear that, thank you!

  • @indieviktorian7206
    @indieviktorian7206 Год назад +3

    Your tutorials are the best!!!❤❤❤❤

    • @dev-worm
      @dev-worm  Год назад

      Thank you so much :)

  • @dallisfrancis1136
    @dallisfrancis1136 Год назад +3

    I have watched a lot of videos about Godot and yours are the best . Your video literally explained everything and I was able to succeed in what I was trying to do

    • @dev-worm
      @dev-worm  Год назад +2

      so great to hear! if you ever need help with anything then let me know!

  • @kristianlavigne8270
    @kristianlavigne8270 Год назад +3

    Pro tip: If you split it up into smaller functions such as move with move("left") and play_move with play_move("left", "side") and so on you can vastly simplify the code, more readable, composable and much less duplication. if/else and nesting statements is the bane of software dev.

  • @asirithwelzorn5907
    @asirithwelzorn5907 Год назад +2

    So hard to find good quality tutorials for Godot 4,glad I found this one. Although for some reason if I use "delta" in the player movement function,no movement works whereas if I remove it,it works.
    Edit: for some reason,Godot didn't attach the script the player node. Idk how that happened,lol. all fixed now

    • @Yinithyn
      @Yinithyn Год назад

      How did you fix it? I think I'm having the same problem.

  • @Nesisorator
    @Nesisorator Год назад +6

    Isn't thte whole process of picking the right animation in the code a bit convoluted? Do you really need that current_dir variable and that play_anim(1) in every if statement? I mean you could just pass the velocity vector into the function (play_anim(velocity) ), get its direction inside that func and pick the right animation with that, right?
    Also concatenating the Input check with all that elif statements creates some sort of hierarchy for the inputs, with "right" having the highest and "up" the lowest.
    I think you can do something like
    velocity.x = Input.is_action_pressed("right") - Input.is_action_pressed("left")
    velocity.y = Input.is_action_pressed("down") - Input.is_action_pressed("up")
    this has less hierarchy but pressing left and right at the same time cancels each other out and it allows diagonal movement.

    • @dev-worm
      @dev-worm  Год назад +1

      i was trying to keep diagonal movement out of it, but i guess that works. thanks for letting me know

    • @doublecc6234
      @doublecc6234 Год назад

      Could you go more in depth of how to setup the code for the animation

    • @masicbemester
      @masicbemester 10 месяцев назад

      Edit: it works!! Just had to multiply the integer difference by the speed value, like this:
      velocity.x = speed*(int(Input.is_action_pressed("ui_right")) - int(Input.is_action_pressed("ui_left")))
      velocity.y = speed*(int(Input.is_action_pressed("ui_down")) - int(Input.is_action_pressed("ui_up")))
      When I copied and pasted this right after func player_movement(delta):, it says "Invalid operands "bool" and "bool" for "-" operator" and I don't know how to fix this. Is the problem about the types of values being subtracted? What should I change for this to work? Does setting the input "bool" to an "int" fix this (I thought about this when remembering a beginner Python tutorial even though it's GDScript because I assumed there's at least a similarity here) or is my lack of coding experience showing?

  • @fleurspr5432
    @fleurspr5432 Год назад +1

    I just wanted to say thank you for making this tutorial. It's really easy to follow on!! 🥰

    • @dev-worm
      @dev-worm  Год назад

      Glad it was helpful!

  • @ricardogaudi2754
    @ricardogaudi2754 Год назад +3

    Thank you very much!!! you have no idea how much this video helped me out, i've tried lots of videos and i mean a LOT and still didnt get as far as i got using this video. Keep up the good work man👌

    • @dev-worm
      @dev-worm  Год назад

      glad to hear that bro

  • @GraysonCharlton
    @GraysonCharlton 17 дней назад

    Thank you for creating this video. It's super helpful. I liked and subscribed.

    • @dev-worm
      @dev-worm  16 дней назад

      I am so glad to hear you found it helpful! thank you!

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

    For some reason, my player just doesn’t move when I follow the script in 12:38 !

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

      My character didn't even show up on screen.

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

    Just use
    var input_direction = Input.get_vector("left", "right", "up", "down")
    velocity = input_direction * speed
    Way smoother :D

  • @Xalantor
    @Xalantor Год назад +3

    This is EXACTLY what I was looking for. Thank you for your hard work!

    • @dev-worm
      @dev-worm  Год назад +1

      so happy to hear that! thank you! hope everything is able to help you out!

  • @1997AlexB
    @1997AlexB Год назад

    Very helpful and at a good pace to follow along to. Thanks for that, will be continuing with this series thill the end.

    • @dev-worm
      @dev-worm  Год назад +1

      glad to hear that... if you ever need any help with anything then dont be afraid to ask!

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

    At 12:25 my character doesn't appear on the screen and move around. I'm using my own sprite and it's bigger than your character sprite if that has anything to do with it. I copied down the code exactly so I don't know what to do

  • @InconnuO_O491
    @InconnuO_O491 Год назад

    The best tutorial about the basics in godot I've seen

  • @Quantum_phy
    @Quantum_phy 10 месяцев назад +3

    What to do if you want to change your weapon characters or both do you have to make every possible combination of them

    • @deadjuice1880
      @deadjuice1880 10 месяцев назад

      Do not worry about that just yet.
      What I heard from programmers, is to take lessons one at a time.
      This series is a great starting point on learning game design and programming.
      RUclips or google specific features tutorials like those, and learn them in a separate project.
      Eventually, after working on so many project, you might see how they can be put into a single project.
      This stuff takes a while to learn and understand, and you do not want to overwhelm yourself.
      Stick to this one for now, and modify this project after the fact!

    • @Quantum_phy
      @Quantum_phy 10 месяцев назад

      ​@@deadjuice1880ok

  • @chonkhihumtsoe4879
    @chonkhihumtsoe4879 Год назад

    This is a great tutorial. Just started Godot and came across this video. You explain things really well

    • @dev-worm
      @dev-worm  Год назад +1

      Glad it was helpful! And I'm so happy to hear that!! If you ever need anything then please let me know!

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

    am I the only one but after spending almost an hour trying to fix the code, my animation doesn't go idle, though, i did everything exactly like the video and even tryna do it myself.

  • @calebcasual
    @calebcasual Год назад +1

    This is awesome, I know there are tutorials for pixel art as well but It'd be really cool to see a full tutorial one day that goes over making all the art assets and then the game as well.

    • @dev-worm
      @dev-worm  Год назад +2

      I completely agree!!

  • @RansomeColeman
    @RansomeColeman 7 месяцев назад +5

    Thanks for the tutorial! As someone old to coding but new to game dev going through the different features was very helpful.
    I spruced up the player_movement a bit to allow diagonals, sharing here in case others are interested. I started the current_dir a bit different as well with var current_dir = "down"
    func player_movement(delta):
    velocity.x = 0
    velocity.y = 0
    if Input.is_action_pressed("ui_down"):
    current_dir = "down"
    velocity.y += speed
    if Input.is_action_pressed("ui_up"):
    current_dir = "up"
    velocity.y -= speed
    if Input.is_action_pressed("ui_right"):
    current_dir = "right"
    velocity.x += speed
    if Input.is_action_pressed("ui_left"):
    current_dir = "left"
    velocity.x -= speed
    if velocity.x || velocity.y:
    play_anim(1)
    else:
    play_anim(0)
    move_and_slide()

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

      This was very helpful, thanks! I added a few lines of code right above the "if velocity.x || velocity.y:" line to fix the problem of diagonal movement being faster than straight movement:
      if velocity.x && velocity.y:
      velocity.x *= .71
      velocity.y *= .71
      I know the "correct" way to solve this problem is to use normalized vectors, but for simple 8-directional movement this is a quick fix that doesn't require reworking the existing code.

    • @dev-worm
      @dev-worm  7 месяцев назад +2

      code looks amazing!! good work!! thanks for sharing it for others as well!

    • @RansomeColeman
      @RansomeColeman 7 месяцев назад

      @arcanerefrain oh nice, I've read about the diagonal problem, appreciate the lookout!

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

    This is really going to help me achieve my vision for a game. Appreciate it.

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

      You'll have to do the coding yourself as the code he shows doesn't work in the latest version

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

      ​@@ayoungartistakajack6799 Cheers. I managed to code this section. I love coding. :)

  • @billathonjohn
    @billathonjohn 11 месяцев назад +3

    TYSM! I thought I was a failure when I tried this, because where it says
    func play_anim(movement):
    var dir = current_dir
    var anim = $CollisionShape2D/AnimatedSprite2D
    I forgot to write current_dir, which made the animation bug out and stop working! When I looked at it I smacked myself on my forehead and was satisfied with my sweet success! Thanks again and I will surely finish this tutorial in no time! You earned a sub ;)!

    • @dev-worm
      @dev-worm  11 месяцев назад +1

      thanks!! ahh i hate when something so small like that happens!! glad you could figure it out!!

    • @billathonjohn
      @billathonjohn 11 месяцев назад +1

      your welcome!@@dev-worm

  • @sashabellor4344
    @sashabellor4344 7 месяцев назад +11

    With Godot 4 there's a shortcut to 2d Topdown player movement!
    @export var speed = 100
    func _physics(delta):
    var direction = Input.get_vector("left", "right", "up", "down")
    velocity = direction * speed
    move_and_slide()
    ("left", "right", "up", "down" = defined inputs created in my input map)
    That's it and your character will move in 8 directions!

    • @dev-worm
      @dev-worm  7 месяцев назад +3

      thank you! i’m sure this can help so many!

    • @hansuswurstus888
      @hansuswurstus888 5 месяцев назад

      also we can remove
      anim.flip_h
      when moving up and down due to different sprites that don't need to be flipped.

    • @PoloKid
      @PoloKid 4 месяца назад

      You beauty!

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

      This is the best method! thanks for sharing!
      I needed to change "func _physics(delta):" to "func _physics_process(delta):" for it to work.

  • @RM_3D
    @RM_3D 5 месяцев назад

    First time loading Godot. I don't know coding or Godot, i'm an environment artist usually use Unreal and have wanted to dabble in pixel games and this is the most straight forward tutorial i've found yet. I tried 4 or 5 others trying to get a character to move and they all had problems and wasn't clear. I understood the code and what it was trying to accomplish. Will definitely be swapping the sprite sheets for my own down the line but its nice to have a base to start from.

    • @dev-worm
      @dev-worm  5 месяцев назад

      I am so happy to hear that!! I am glad to help at anytime no matter what it is that you need!! So feel free to reach out!!

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

    i need help. im a bit lost, i followed ur tuorial step by step, triple checked that all my code is right, and made sure the script isnt a child of colision. but when i load the game, my character doesnt move or animate, im using godot 4.3, im also brand new to coding

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

    Thank You. Leaving a comment for youtube engagement. Would appreciate future videos digging deeper into learning the coding language if possible

    • @dev-worm
      @dev-worm  10 месяцев назад +1

      thanks man means the world! for sure!! looing into those types of tutorials now! thanks for the suggestion!

    • @mariamejia936
      @mariamejia936 10 месяцев назад

      I'm so glad you appreciated my comment, I am always looking for learning actual code and even after buying books I never feel a concrete place to start, godot keeps me hopeful@@dev-worm

  • @ADAMOR_52
    @ADAMOR_52 Год назад +7

    do u plan to add stuff like armor, different zones with stronger enemies, inventory where you would get the loot and then you can sell it in shop and buy the better armor, weapons, potions, etc?
    - I haven´t watched the vid yet, I´m learning from a different tutorial atm but after i finish that I will move on this one

    • @dev-worm
      @dev-worm  Год назад +5

      i plan on doing that in a future series witch will happen right after this one is finished, the game will be on survival so all that will be in the game, on this series i just want to keep it more on the simple side because of all the new players to godot 4 and to be honest im still getting used to the new functions in godot 4.

  • @MijmerMopper
    @MijmerMopper Год назад +2

    I am so glad I got in the habit of using a bit different names then you do, simply because it helps me keep track of why the things work the way they work, rather then just follow along.

  • @GyHUN95
    @GyHUN95 Год назад +9

    Great series! I see everywhere this method, instead of using seperate directions: var moveDirection = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down",) velocity = moveDirection * speed. Can you explain which would be the difference, or the best use case for a simple movement code?
    func _physics_process(_delta):
    handleInput()
    updateAnim()
    move_and_slide()

    func handleInput():
    var moveDirection = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down",)
    velocity = moveDirection * speed
    #Anims are: Idle_LEFT, Walk_RIGHT, etc...

    func updateAnim():
    if velocity.length() == 0:
    if $anim.is_playing():
    $anim.stop()
    $anim.play("Idle_" + direction)
    else:
    direction = "DOWN"
    if velocity.x < 0 : direction = "LEFT"
    elif velocity.x > 0: direction = "RIGHT"
    elif velocity.y < 0: direction = "UP"

    $anim.play("Walk_" + direction)

    • @Barefootchefdownunder
      @Barefootchefdownunder 11 месяцев назад

      I've been scrolling the comments wondering the same. It's tough when learning as I want to know what is the best practice. In this video we seem to use a bunch of lines to achieve a fairly simple movement controller.

  • @Carmidian
    @Carmidian 8 месяцев назад +1

    I saved your playlists under "awesome tutorials", I love following along with tutorials that you get an end product thank you so much for doing it. If you're looking for ideas would love to see a 2D side scroller beat em up. Like double dragon or golden axe

    • @dev-worm
      @dev-worm  8 месяцев назад +1

      Ill look into it!! thanks!! hope the tutorial helps!! if you end up having issues just let me know so I can help!

  • @devinegamingtv3427
    @devinegamingtv3427 7 месяцев назад +7

    When I run the game after all the script is added, I get a stiff picture of my character that moves around without animations, Godot is giving me this "AnimatedSprite2D node not found!"

    • @devinegamingtv3427
      @devinegamingtv3427 7 месяцев назад +12

      I fixed it. The problem was me naming the animations starting with a capital letter, but inside the code without capital letter. I'm replying to myself to help others if they could face the same problem :)

    • @Leonidas_CJ
      @Leonidas_CJ 7 месяцев назад +1

      Legend

  • @DremorusReborn
    @DremorusReborn Год назад

    Thank you for the tutorial! I've managed to do this :D Keep making these!

  • @MonkeySense
    @MonkeySense 11 месяцев назад +24

    i wrote the character movement code exactly the same, stopped the video to check, than checked again. every single line of code is marked as an error.

    • @rjyo1236
      @rjyo1236 7 месяцев назад +1

      Maybe your language is not the same as his

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

      I know it's an old message but it's always good to let us know the error message then someone here can actually help you.

    • @O7OF-0xFF90
      @O7OF-0xFF90 Месяц назад +1

      extends CharacterBody2D
      # Movement speed
      var speed = 110
      # Interaction range
      var interact_range = 50
      # Custom velocity variable (renamed to avoid conflict with CharacterBody2D's velocity)
      var custom_velocity = Vector2()
      # Health of the player
      var health = 250 # Player starts with 100 health
      # Reference to the AnimatedSprite2D node (make sure this node exists in the player scene)
      @onready var animated_sprite = $AnimatedSprite2D # Make sure the node is named "AnimatedSprite2D"
      # State to check if the player is attacking
      var is_attacking = false
      func _ready():
      pass
      func _process(_delta):
      handle_movement()
      handle_interaction()
      func handle_movement():
      # If the player is attacking, don't process movement
      if is_attacking:
      return # Skip movement processing if attacking

      custom_velocity = Vector2() # Reset velocity each frame

      # Movement controls (WASD or Arrow keys)
      if Input.is_action_pressed("move_right"):
      custom_velocity.x += 1
      if Input.is_action_pressed("move_left"):
      custom_velocity.x -= 1
      if Input.is_action_pressed("move_down"):
      custom_velocity.y += 1
      if Input.is_action_pressed("move_up"):
      custom_velocity.y -= 1

      # Normalize velocity to prevent diagonal speed boost
      custom_velocity = custom_velocity.normalized() * speed

      # Apply the custom velocity to the CharacterBody2D's velocity
      velocity = custom_velocity
      move_and_slide()
      # Flip the sprite based on movement direction
      if custom_velocity.x > 0:
      animated_sprite.scale.x = 1 # Facing right
      elif custom_velocity.x < 0:
      animated_sprite.scale.x = -1 # Facing left
      # Handle animations when not attacking
      if custom_velocity.length() > 0:
      play_animation("move") # Play "move" animation if moving
      else:
      play_animation("idle") # Play "idle" animation if not moving
      func handle_interaction():
      # Check for interaction when the player presses the 'F' key
      if Input.is_action_just_pressed("interact"): # 'F' key for interaction
      var interactable = get_closest_interactable()
      if interactable:
      interactable.start_dialogue()
      # Check for attack when the player presses the 'attack' key
      if Input.is_action_just_pressed("attack") and not is_attacking: # Prevent attack spam
      attack()
      # Get the closest NPC within the interaction range
      func get_closest_interactable():
      var interactables = get_tree().get_nodes_in_group("interactables")
      var closest_interactable = null
      var closest_distance = interact_range
      for interactable in interactables:
      var distance = global_position.distance_to(interactable.global_position)
      if distance < closest_distance:
      closest_distance = distance
      closest_interactable = interactable
      return closest_interactable
      # Function to play an animation based on the current state
      func play_animation(animation_name: String):
      if animated_sprite.animation != animation_name:
      animated_sprite.play(animation_name) # Play the specified animation
      # Call this function when the character takes damage
      func hurt(damage_amount: int):
      health -= damage_amount # Subtract damage from health
      if health

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

      You did something wrong check the entire code and indents. If you want help put the script in.

  • @aChannel13813
    @aChannel13813 Год назад +1

    im pretty well versed in c#, but for learning the built in gdscript functions i think this is a great series especially given its up to date.

    • @casachezdoom2588
      @casachezdoom2588 6 месяцев назад

      At first my intention was to use C# with Godot, since I had already started using it in Unity, but most tutorials use GDScript. Honestly, I don't mind GDScript at all and I feel like the transition in learning is pretty quick plus you don't need an external editor which simplifies the workflow.

  • @connorburnett4245
    @connorburnett4245 8 месяцев назад +3

    his code isn't working for me every time i fix some thing another error shows up if it not in scope or i cant move i have been trying for days

    • @zawad1981
      @zawad1981 5 месяцев назад

      what are your errors?

    • @glouziz
      @glouziz 5 месяцев назад

      @@zawad1981 Привет, ты знаешь, как сделать анимацию передвижения персонажа по диагонали? Мне бы это очень помогло

    • @connorburnett4245
      @connorburnett4245 5 месяцев назад

      @zawad1981 I keep rewriting it but nothing worked it just kept crashing and give 100 different errors I even tried copying and pasting working code from the comments and that gave the same 100 different errors when ever I press a button it closes

    • @zawad1981
      @zawad1981 5 месяцев назад

      @@connorburnett4245 its tough to give a solution without seeing what your errors are.
      Can you paste some of them here?

  • @demiangarden
    @demiangarden Год назад +2

    Just started following this tutorial series! So excited for what's next!!

    • @dev-worm
      @dev-worm  Год назад +1

      so much coming soon! hope the series helps you!

  • @WaterZerks
    @WaterZerks Год назад +3

    The character just stands still when I hold it, I have to keep tapping it for it to move
    EDIT: Nvm I'm stupid lmao... for anyone reading this make sure you're putting in the right if statements lmao

    • @Que3496
      @Que3496 Год назад +1

      bro how?? i don't know how to fix it, please help

    • @WaterZerks
      @WaterZerks Год назад

      @@Que3496 Just copy exactly what he does with the code and make sure your if statements are stated correctly, that's kinda all the help I can give sorry

  • @gruby4498
    @gruby4498 5 месяцев назад

    As the starting animation, you can just select starting animation in AnimatedSprite2D node (A+ icon in animation bar), great tutorial by the way, thanks for it!

    • @dev-worm
      @dev-worm  5 месяцев назад +1

      that’s a good tip! thank you! also i am so glad to hear that you liked it!

  • @sinisterdesign
    @sinisterdesign Год назад +133

    Great video, but my man, you have *got* to stop pronouncing it "go dot." It's "guh doh."

    • @everything-has-a-handle-now
      @everything-has-a-handle-now Год назад +28

      Nha it's "god ot"

    • @idontknoq4813
      @idontknoq4813 Год назад +13

      No.

    • @zeldaandTwink
      @zeldaandTwink Год назад +26

      If they wanted the T to be silent then it wouldn't be there

    • @nobodyinparticular80
      @nobodyinparticular80 Год назад +28

      Officially, it’s go-dot like ro-bot (godot robot mascot). But most people say “guh-doh”.

    • @Cretaal
      @Cretaal Год назад +10

      Do you pronounce it "jif" or "gif"?
      There's only one correct answer...

  • @AMINEI-wl9rk
    @AMINEI-wl9rk 8 месяцев назад +19

    extends CharacterBody2D
    const speed = 100
    var current_dir = "none"
    func _ready():
    $AnimatedSprite2D.play("front_idle")
    func _physics_process(delta):
    player_movement(delta)
    func player_movement(delta):

    if Input.is_action_pressed("ui_right"):
    current_dir = "right"
    play_anim(1)
    velocity.x = speed
    velocity.y = 0
    elif Input.is_action_pressed("ui_left"):
    current_dir = "left"
    play_anim(1)
    velocity.x = -speed
    velocity.y = 0
    elif Input.is_action_pressed("ui_down"):
    current_dir = "down"
    play_anim(1)
    velocity.y = speed
    velocity.x = 0
    elif Input.is_action_pressed("ui_up"):
    current_dir = "up"
    play_anim(1)
    velocity.y = -speed
    velocity.x = 0
    else:
    play_anim(0)
    velocity.x = 0
    velocity.y = 0

    move_and_slide()

    func play_anim(movement):
    var dir = current_dir
    var anim = $AnimatedSprite2D

    if dir == "right":
    anim.flip_h = false
    if movement == 1:
    anim.play("side_walk")
    elif movement == 0:
    anim.play("side_idle")
    if dir == "left":
    anim.flip_h = true
    if movement == 1:
    anim.play("side_walk")
    elif movement == 0:
    anim.play("side_idle")
    if dir == "down":
    anim.flip_h = true
    if movement == 1:
    anim.play("front_walk")
    elif movement == 0:
    anim.play("front_idle")
    if dir == "up":
    anim.flip_h = true
    if movement == 1:
    anim.play("back_walk")
    elif movement == 0:
    anim.play("back_idle")

    • @TrueFalses
      @TrueFalses 8 месяцев назад

      thanks legend 👍

    • @connorburnett4245
      @connorburnett4245 8 месяцев назад +1

      @@TrueFalses doesn't work for me the game crashes ever time i load it

    • @Wolfframe
      @Wolfframe 5 месяцев назад

      Thank goodness it worked! Thank you, kind man! =)

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

      works but side animations don't play for me (also how do diagonals?)
      edit nvm forgot I named my animations differently (still how do diagonals?)

  • @RicardoLeidenz
    @RicardoLeidenz Год назад +1

    As a Unity refugee, I thank you

  • @dr.goshleorio8343
    @dr.goshleorio8343 6 месяцев назад

    I've tried a bunch of Godot tutorials gotta say this one is the clearest and worked the best for me. Keep up the good work!

    • @dev-worm
      @dev-worm  6 месяцев назад

      so happy to hear that!! thank you!

  • @ethandfriends2
    @ethandfriends2 6 месяцев назад +1

    Thank you man, here’s hoping I can use this for an adventure game

    • @dev-worm
      @dev-worm  6 месяцев назад

      i hope everything works out for your game!! if you ever need any help just let me know!!

  • @Slipping_thru_the_Seams
    @Slipping_thru_the_Seams Год назад +1

    i got it working, this is so exciting!! thank you so much

  • @MootPotato
    @MootPotato Год назад +1

    i like your background music in the videos. Think it helps me to pay attention. Thanks for keeping the videos to the point and not making them hours long bc this is working for me

  • @aneerudh1712
    @aneerudh1712 Год назад

    Omg thank you so much. I was just struggling with the new version! Keep going👍

    • @dev-worm
      @dev-worm  Год назад

      this series will be very helpful for sure, I learned a lot about the new godot version just from making this little game lol

    • @Welebam5308
      @Welebam5308 11 месяцев назад

      @@dev-worm I am having a little difficulties, i tried changing the version but it didn't work, my problem is that "Cannot call non-static function "play()" on the class "AnimatedSprite2D" directly. Make an instance instead"

  • @h-angrygirl
    @h-angrygirl 10 месяцев назад

    Hola DevWorm te saludo desde Uruguay, no sé inglés pero algunas palabras entiendo, sumado a que he visto suficientes tutoriales en español como para ir entendiendo el razonamiento de lo que haces y/o dices por lo cual puedo seguirte sin problemas, muchisimas gracias por compartir tus conocimientos

  • @Jardras
    @Jardras 5 месяцев назад

    Thanks for the Tutorial. Starting to get into game dev and Godot seems to be fitting :D

    • @dev-worm
      @dev-worm  5 месяцев назад

      glad to hear godot seems like the correct fit for you!! i wish you only the best with your godot journey! and if you ever need anything just let me know!!

  • @mihirparab2172
    @mihirparab2172 Год назад

    tysm!! this series is going to help a lot for sure....❤

  • @MrSevenEleven
    @MrSevenEleven Год назад +18

    if you use the animationplayer node instead, you can script other key changes with it, as well as play sound through audio player nodes
    also, you can change the speed with a slider on the character node inspector if you just "@export var" the speed variable. you can actually do a lot with this, like control the variable with other scripts

    • @Blitz289581
      @Blitz289581 Год назад

      Where would one be able to find a more in depth explanation or tutorial of what you're talking about?

    • @nobodyinparticular80
      @nobodyinparticular80 Год назад +1

      I find animation player always preferable. I get that people could use something simpler, but for any object with more than a couple frames, animation player really should be used because of the power of keyframing everything.

  • @ingred4860
    @ingred4860 5 месяцев назад

    Hi! I have been using renpy for about five years now, and yes I love making visual novels, but think its time to branch out! I know im late, but thank you so much for making such good tutorials!

    • @dev-worm
      @dev-worm  5 месяцев назад +1

      thank you!! I am just glad to help!! I wish you only the best in your Godot journey!! If you ever have any questions feel free to reach out!!

  • @ThePixelPal
    @ThePixelPal Год назад

    Such an easy-to-follow tutorial thxs a bunch!

    • @dev-worm
      @dev-worm  Год назад

      so glad to hear that!!

  • @turtleburger
    @turtleburger 6 месяцев назад +2

    Holy cow my dude, BREATHE! I slowed it down to 0.75 speed and I'm still constantly pausing to catch up. xD

    • @dev-worm
      @dev-worm  6 месяцев назад +1

      ah i’m sorry!! hope you were still able to get all the information out of it!

  • @tommasotezza1319
    @tommasotezza1319 Год назад

    I just found this series , I'm so exited to start it

  • @MrMaxiDPM
    @MrMaxiDPM 4 месяца назад +1

    really good tutorial!!!!, im gonna make an cool rpg now. (using undertale sprites as placeholders lolll)

    • @dev-worm
      @dev-worm  4 месяца назад

      Ooo goodluck!! keep me updated for sure!

  • @komahanaru
    @komahanaru 6 месяцев назад +2

    Grate tutorial. I did a few mistakes. Like making the Animatedsprite2D a child of CollisionShape2D
    and I also placed he elif in the wrong place, messing up my animations.
    But it made me read the code and understand it better trying to solve it.
    I like your pacing and explaining too makes it easy to look back over certain parts.

    • @alieninwonderland4219
      @alieninwonderland4219 4 месяца назад

      @@komahanaru i need to ask you something because you literally did my same errors! What do you mean with placed tue elif in the wrong place? Because when I play the game my character does not do the front_iele animation, it just walks on the place! Did yours have the same problem? If yes, how did you solve?

    • @komahanaru
      @komahanaru 4 месяца назад +1

      ​@@alieninwonderland4219 no, not particularly. Sounds like something gone wrong with the idle execution.
      Double-check your movement values and any capital letters. Make sure the name of the animation and what you type in the code are the exact same, capitals included. It's a common mistake when following tutorials.

  • @davildur
    @davildur 11 месяцев назад

    Thank you for this tutorial. I am glad that i found this one!!

    • @dev-worm
      @dev-worm  11 месяцев назад

      glad to hear, thank you! hoping everything is working smoothly for you!

  • @H3_remix
    @H3_remix 10 месяцев назад +1

    This is a fantastic tutorial. I am not sure if I missed it, but when did you set the scene? I made my scene main, and then couldn't get my character to show up on the screen without dropping the player.tscn inside of my world tree. Just wondering because in the video you said 'you can play the player scene'. When I did that it the character wasn't there yet because he wasn't added to my tree. in case anyone else runs into this issue, but I have adhd so I may have just missed that small portion of the video. Thanks for the great work!

  • @marshmellow9834
    @marshmellow9834 5 месяцев назад

    I love the video and though I had some issues I did learn alot so thank you vary much!

    • @dev-worm
      @dev-worm  5 месяцев назад

      i am so glad you were able to overcome the issues!! and happy to hear you learned a lot!! goodjob!

  • @delonmeau
    @delonmeau Год назад

    15:21 Why not use the current velocity to determine which direction the player is facing? No need for a separate variable

  • @drinkwwwaterrr
    @drinkwwwaterrr Год назад

    Thanks man this is awesome especially since most tutorials are still stuck on Godot 3

  • @mdnghtppl0000
    @mdnghtppl0000 Год назад +1

    great video, clear and concise

  • @giovannisena4853
    @giovannisena4853 9 месяцев назад

    Hey, thank you for covering this, one thing I wanna know is what would I do to make a party following system, I'd appreciate it

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

    Starting this series today in hopes of learning how i'll be getting my game translated from thought to the actual system. Fingers Crossed and I'll let ya'll know how it goes🤞

  • @333brndn2
    @333brndn2 Год назад +1

    Running across a slight issue with my movement. I wrote the script for the movement, and tested it, and it was working fine. I added in the scripting for changing the animations, and now while my left and right movement work fine, along with animations, my character cannot move up and down. It plays the appropriate animation for the buttons being held or let go of, but can no longer move up or down.

    • @333brndn2
      @333brndn2 Год назад +1

      I fixed it! The character mustve been stuck on the x axis somehow, moving him slightly more towards the center of the room made it all suddenly work.

    • @Welebam5308
      @Welebam5308 11 месяцев назад

      Hey! maybe you could help me, my problem is "Cannot call non-static function "play()" on the class "AnimatedSprite2D" directly. Make an instance instead"

  • @clashroyaleaze6229
    @clashroyaleaze6229 4 месяца назад +1

    12:20 i did everything same,but my character doesn't move like in the video it moves like 1 block per every click and it doesn't go by

    • @dev-worm
      @dev-worm  4 месяца назад +2

      it seems like you are using "if Input.is_action_just_pressed" instead of "if Input.is_action_pressed", because the "just_pressed" means it will only call it to move for one frame when the button is "just_pressed". I hope that makes sense and you can get everything working!! Goodluck!

    • @clashroyaleaze6229
      @clashroyaleaze6229 4 месяца назад +1

      @@dev-worm ohh okay thanks

  • @JaiLeeroy
    @JaiLeeroy Год назад

    You may be the Griffpatch of Godot sir. Thank you for the amazing tutorial!

  • @gametube1375
    @gametube1375 Год назад

    I have been waiting for this player

  • @robfrydryck127
    @robfrydryck127 Год назад

    What a great start!