I haven't had the chance to test it on my laptop, but I can see that you've worked hard and done an amazing job! I dream of creating a game to have fun just with my friends, I intend to use yours project.When I edited it I realized how much effort you put into it, and man, I hope I can reach your level someday.❤
This was an excellent Devlog. Many other channels add annoying sound effects, memes, stock footage or how they brew their coffee (which is all fine of course), but it was refreshing seeing someone actually focus on the code, the bugs and the struggle to get it (mostly) working. I didn't even know that the order of the node hierarchy influences how they get operated on each frame. This must have been a ton of work with recording footage and editing. I really appreciate you making this open source for us and for crediting the resources you used to learn. Thank you so much. Good luck on your developer journey!
I agree with you on everything but we must also understand why other game dev channels do that. Adding jokes, sfx and memes all around the place in between explaining what they're doing is to add some sort of "dynamism" to the video, to appeal to a broader audience than just other game devs. It's to attract potential players, making them laugh while showing "hey my game is cool, look at the progress". However, as a game dev myself, I also sometimes prefer watching the actual work rather than the result. (Also, I think we can say that Dani had a huge influence on the game dev youtube community for using this type of editing)
Just add a transparency shader to the player mesh and set it to activate if the camera collides with anything or if it passes a minimum distance threshold to player mesh, and then link the albedo alpha value to a curve based on the distance between the player mesh and camera.
Some comments on your controller! Separate your buffered input system from your abilities (IE dodge/attack). Ideally you'll want to be able to buffer most actions in your game. (Usually you have something like a map of inputs/actions and whenever an input is pressed if it fails to activate an ability, keep checking each frame if that input could be used and clear it once it has been. (Or clear it once another button has been pressed). For the wall/camera problem, you might want to look into 'Dithering' which is a commonly used solution. (Basically emulates transparency and the amount that is dithered is generally scaled based on how close the camera is to the vertex)
Dude. This looks amazing. I love how smooth the controls are looking already. What’s great about making a controller like this is that you can drop it into all kinds of projects. Great work.
Dude give it a shot! Better to at least try than to regret not giving it a go. Last time I checked there’s no age limit to game dev hehe. Game dev is not easy but even making a box move around the screen feels super rewarding. If you’ve got no experience, I suggest learning to code using GDQuest’s “Learn to Code From Zero with Godot” gdquest.github.io/learn-gdscript/
I find it really interesting how you've merged a bunch of people's code into one really good souls-like package! I hope to see more content from you in the future!
for orbiting around the enemy, you can generate a circular curve and use distance between player and enemy as radius and enemy as center and then move the player along that curve when strafing.
adding all those method calls to the attack animations is a good idea! i have been struggling with a good idea for handling combos, and i feel like this might be it! for me personally, splitting code like jumping out into its own component seems to be taking composition unnecessarily far, but it’s all individual preference! i don’t mind longer scripts, and i don’t think a long script makes any performance impact if it’s the same total amount of code. but i could be wrong!
Wow that's so much progress for just a month. I've always wondered what it's like making a character controller so it was really fun watching you go through it. And your work is looking so good already!
This looks great, keep it up! Hope to see a successful project at the end of the tunnel, whatever that looks like for you! For your issues regarding code coupling, I would suggest doing a refactor now since you're early in the code and you now have a better idea for what you want the player to be able to do, technically speaking. If you refactor early you save yourself a lot of time. My suggestion would be to design the code from the top-down, so implement all of your known headers first, then play with that high-level design space to see if you can suss out which functions are likely causing the coupling and if there are workarounds.
Though I haven't tried making a game in this genre I must say it looks like you are spending too much effort on non-essential movement mechanics without actually having a functional game prototype to test it out in to see if it's even something you'll want in the game, you just have a sandbox. This is a month long project and there is no game loop, I'd recommend doing something more basic with a game loop, like get from point a-b and fight off enemies along the way, no need for animations or anything fancy, just the pill shape is enough. Then you can add all the extra stuff, just so you have a base game to help form your ideas and test it out in before sinking weeks of time on stuff that might not fit your needs. I used to make games the same way a few years ago and I never finished anything because of this, it feels so much more encouraging to start with a bare bones prototype with a game loop first. Good luck!
It’s always essential to nail down your game loop but I’d argue that character movement and controls alone are critical enough to the games feel that they warrant extra polish in the early stages. I wouldn’t dedicate this much detail to every system but making your character fun to move is a big win!
@@ThePhobiephozee2000 The Character controller is "the most important" mechanic in a souls-like... (Also just as important are camera, Animations, colliders... etc, etc. 😅).
What about implementing some inverse kinematics systems for the legs so every movement makes sense and doesn't have to be made with an animation, it can instead be procedurally generated, which would also fix a lot of little stuff like when the character rotates in place, etc...
I've never been a fan of how most games do "third-person cameras," having the camera collide with *anything and then either letting it; or trying to have the camera cope, is terrible; because it takes away control from the player. Elden Ring added something in shadow of the erdtree: When your character walks into a tent... the camera ignores the tent (the tent "wall" between the camera and the character is just made transparent)... I think this is great! Just make the camera a non-physical object that can go "into"/ through everything and then make things (everything except enemies) that is between the camera and the character "fade-out." 🤔
Thanks for this! Configuring which objects the camera collides with or fades out seems reasonable. Doesn’t seem to hard to implement as well… famous last words of any feature/mechanic hehe. Will definitely keep this in mind!
You should consider implementing a Hierarchical Finite State Machine to handle the various states of the player: normal, attacking, dodging, getting hurt, etc.
bro dont mind, marketing is great like your devlog, but it,z super nice if you have some visuals to filling the ugly grey color, even it free assets, but it good rather than grey color ! keep it up
I'm not sure if there are direct equivalents in Godot, as I'm a Unity developer, but it can't be too different, right? The way I would do it is by creating a quaternion which represents rotation towards the target and multiplying that by your raw movement vector. So, basically: // first argument is direction towards the target (I assumed it's '_target_look' in your case), second argument is upward vector which can be character's up or world's up Quaternion rotation = Quaternion.LookRotation(_target_look, character.up); Vector3 rotated_move = rotation * move_direction; character.position += rotated_move * moveSpeed * Time.deltaTime; As a result your character strafes around its target in perfect circles. Then you can also use that same rotation to rotate your character to face toward the target. Hope that helps
Great job I can see why I can't make any game. 😅 The biggest problem remains the AI of the enemies If the player's animation is that complicated I have an idea that I can't implement, please put it in your game. If you play blade of darkness The method of cutting enemies in it is terrible and more beautiful than all the games of souls
Don't make the camera lock-on _too_ perfect. The quality of a souls-like system is the player has a lot of options that are a mistake (like following too closely to an enemy). If you try to script out possible player mistakes, then you'll end up with something other than a souls-like.
Could you further elaborate on what you mean? I think an example or specific situation/scenario will help me understand better. But you do bring up an interesting point in not making too good of features that spoon-feed gameplay to the player.
@@Snaiel An example would be making the lock-on flawless/instant and without a turning speed. So, no matter how the enemy performs, the game automatically makes sure the player's character is always facing them. Makes sense on paper, but if remove the requirement for the player to anticipate the enemy, then it's no longer a skill issue. And skillful playing is the core of a soul's-like (please ignore Demon Soul's bugs, ha ha).
Heyn loves your Story. a little bit of advice, aren't those mixamo's animation usually root animation? You can achieve a lot more dynamics using root animation
Godot 4.1.2, error loading Main.tscn, in addition, if I try to make another main scene, there are about 427 warnings/errors. Why is that? Also the demo looks nice.
Thanks for the suggestion. I made a python program a while ago that does some syncing for my Dropbox account since they don't have selective sync on Linux. I'll see how well it works in this case.
@@SnaielNice! Have you also considered setting up the steam deck as a virtual controller for your pc? I know its possible to do and would definitely be better for prototyping haha
I have question I read your code and saw that it is simple although I cannot write it itself My question is how can I write codes, is there a way of thinking or a way to use the code, I have some ideas, but how do I link them and make them in my game here I yearn in short is how can I learn to write codes in the same way as you
It's experience at the end of the day. What's your coding knowledge like? Variables, control flow, loops, data structures, classes, design patterns, system architecture and more are what I go through when solving problems (like a toolbox). So I found learning about as many topics in programming to really help. Having a problem solving mindset helps a lot as well. I enjoyed learning mathematics through exercise questions and same with coding (like Leetcode). I'm not saying you should do these, I'm just giving some background on how these arbitrary and somewhat useless exercises help me indirectly by growing my problem solving skills. So maybe think of other areas you are good at problem solving and see if you can adapt your thinking into coding game mechanics. I make sure to break things down as much as possible and then look at my tools and similar problems solved previously to try and explore how to do things. Does it involve multiple things? Maybe an array will help, or maybe some other data structure. Does it involve directions and angles? Okay, what functions do I know or mathematical ideas I can apply? Then it's just solving small things at a time, then solving how to combine these smaller things by going through the same process of "what's my goal, here's what I know, let's experiment". Maybe build up your experience by following coding examples or tutorials, both normal code and game mechanics, but try to do it yourself first, then use the tutorials as an answer to check your work. Feel free to mention an idea you have and I'll try to go through my thought process of coding it.
You can look through the files at the time of the project when i first implemented it: github.com/Snaiel/Godot4ThirdPersonCombatPrototype/tree/5c134812ff7e7402b32a3a2b5282a2d9f57e057a
Heyy, im toying with making a souls like in godot4 as well! Hope to see your progress, maybe i'll post my own. Edit: right now im modeling placeholder stuff and wanting to fix my player controller it doesnt fall through the floor on complicated geometry
Wow, you managed to accomplish all of this in just a month? To be honest, i am bit discouraged. I've spent almost a year working on a 2D card game in Godot, and I'm still not at your level. whats the secret sauce?
I’d say the stars aligned on this one. I’ve made a few games before so I know what not to do. But it’s been 3 years since I’ve done any game dev so I was very very keen and just worked on it as much as possible. This month was semester break so this was the only thing I worked on. I’m in my second year of a computer science degree so I’m decent at coding. And I recently finished Sekiro so the mechanics are fresh in my mind. I’m definitely not gonna progress as fast as this in a long time. Don’t get discouraged. Keep cutting the scope of your game so it’s a nice manageable but high quality chunk. The more you develop the better and faster you’ll get.
Also your movement is not very good. It's simultaneously oxymoronically to slow & stiff on the ground and to loose & slidey in the air. It's like playing the ice level in Crash Bandicoot. You should only preserve momentum if the player is holding a directional input upon contact with ground. And there is a bug where if you touch sprint at any point while you're airborne when you land you slide forward uncontrollably. Sprinting just ducks up movement in general. Trying to platform on the pillars had me feeling like a games journalist playing Cuphead.
Let me know what you think about the character controller so far!
It's really nice better than mine😅
I haven't had the chance to test it on my laptop, but I can see that you've worked hard and done an amazing job! I dream of creating a game to have fun just with my friends, I intend to use yours project.When I edited it I realized how much effort you put into it, and man, I hope I can reach your level someday.❤
This was an excellent Devlog. Many other channels add annoying sound effects, memes, stock footage or how they brew their coffee (which is all fine of course), but it was refreshing seeing someone actually focus on the code, the bugs and the struggle to get it (mostly) working. I didn't even know that the order of the node hierarchy influences how they get operated on each frame.
This must have been a ton of work with recording footage and editing. I really appreciate you making this open source for us and for crediting the resources you used to learn. Thank you so much. Good luck on your developer journey!
I agree with you on everything but we must also understand why other game dev channels do that. Adding jokes, sfx and memes all around the place in between explaining what they're doing is to add some sort of "dynamism" to the video, to appeal to a broader audience than just other game devs. It's to attract potential players, making them laugh while showing "hey my game is cool, look at the progress".
However, as a game dev myself, I also sometimes prefer watching the actual work rather than the result.
(Also, I think we can say that Dani had a huge influence on the game dev youtube community for using this type of editing)
Just add a transparency shader to the player mesh and set it to activate if the camera collides with anything or if it passes a minimum distance threshold to player mesh, and then link the albedo alpha value to a curve based on the distance between the player mesh and camera.
Some comments on your controller!
Separate your buffered input system from your abilities (IE dodge/attack). Ideally you'll want to be able to buffer most actions in your game. (Usually you have something like a map of inputs/actions and whenever an input is pressed if it fails to activate an ability, keep checking each frame if that input could be used and clear it once it has been. (Or clear it once another button has been pressed).
For the wall/camera problem, you might want to look into 'Dithering' which is a commonly used solution. (Basically emulates transparency and the amount that is dithered is generally scaled based on how close the camera is to the vertex)
Thanks for the feedback!
Dayum this is looking pretty good so far 🔥🔥
liked, subscribed, saved to playlist, shared with friends, appreciated.
Dude. This looks amazing. I love how smooth the controls are looking already.
What’s great about making a controller like this is that you can drop it into all kinds of projects.
Great work.
DUDE THIS IS AMAZING!! YOU’VE GOTTEN SO GOOD
Man this is awesome. I wanna make a game so bad but I have zero experience and I’m kinda old. Great work
Dude give it a shot! Better to at least try than to regret not giving it a go. Last time I checked there’s no age limit to game dev hehe. Game dev is not easy but even making a box move around the screen feels super rewarding. If you’ve got no experience, I suggest learning to code using GDQuest’s “Learn to Code From Zero with Godot” gdquest.github.io/learn-gdscript/
This looks pretty decent already. Looking forward to follow your progress.
okay this had me hyped for the future of this game 😤
I'm working on a similar project and this video and its comment section have been extremely helpful
wow that's great to hear. I'm glad my video was helpful. everyone's thoughtful feedback and supportive comments are amazing.
Very nicely done. I'm about to start my own quest for perfect third person character and camera movement and I your work here has inspired me.
Good luck!
I find it really interesting how you've merged a bunch of people's code into one really good souls-like package!
I hope to see more content from you in the future!
for orbiting around the enemy, you can generate a circular curve and use distance between player and enemy as radius and enemy as center and then move the player along that curve when strafing.
adding all those method calls to the attack animations is a good idea! i have been struggling with a good idea for handling combos, and i feel like this might be it!
for me personally, splitting code like jumping out into its own component seems to be taking composition unnecessarily far, but it’s all individual preference! i don’t mind longer scripts, and i don’t think a long script makes any performance impact if it’s the same total amount of code. but i could be wrong!
Wow that's so much progress for just a month. I've always wondered what it's like making a character controller so it was really fun watching you go through it. And your work is looking so good already!
comprehensive devlog good editing good voice love it
Much appreciated!
You're gonna do a great job bro just keep up
waiting for devlog 2 tho
This looks great, keep it up! Hope to see a successful project at the end of the tunnel, whatever that looks like for you! For your issues regarding code coupling, I would suggest doing a refactor now since you're early in the code and you now have a better idea for what you want the player to be able to do, technically speaking. If you refactor early you save yourself a lot of time. My suggestion would be to design the code from the top-down, so implement all of your known headers first, then play with that high-level design space to see if you can suss out which functions are likely causing the coupling and if there are workarounds.
Thank you for the advice 🙏
great prototype man feels nice keep it up, and keep making these dev logs, would love to keep up to date with production :)
I'm currently stuck in tutorial Hill but this is helping lol
Thank you for doing this!
I always wanted to do this but you took the time to materialize it... Thanks!
Though I haven't tried making a game in this genre I must say it looks like you are spending too much effort on non-essential movement mechanics without actually having a functional game prototype to test it out in to see if it's even something you'll want in the game, you just have a sandbox. This is a month long project and there is no game loop, I'd recommend doing something more basic with a game loop, like get from point a-b and fight off enemies along the way, no need for animations or anything fancy, just the pill shape is enough. Then you can add all the extra stuff, just so you have a base game to help form your ideas and test it out in before sinking weeks of time on stuff that might not fit your needs. I used to make games the same way a few years ago and I never finished anything because of this, it feels so much more encouraging to start with a bare bones prototype with a game loop first. Good luck!
It’s always essential to nail down your game loop but I’d argue that character movement and controls alone are critical enough to the games feel that they warrant extra polish in the early stages. I wouldn’t dedicate this much detail to every system but making your character fun to move is a big win!
@@ThePhobiephozee2000 The Character controller is "the most important" mechanic in a souls-like...
(Also just as important are camera, Animations, colliders... etc, etc. 😅).
Good job, I hope you end up making an awesome game.
Great video!
Knew you were an aussie from the first few seconds of the video xD
pretty nice video man
well done
What about implementing some inverse kinematics systems for the legs so every movement makes sense and doesn't have to be made with an animation, it can instead be procedurally generated, which would also fix a lot of little stuff like when the character rotates in place, etc...
I've never been a fan of how most games do "third-person cameras," having the camera collide with *anything and then either letting it; or trying to have the camera cope, is terrible; because it takes away control from the player.
Elden Ring added something in shadow of the erdtree:
When your character walks into a tent... the camera ignores the tent (the tent "wall" between the camera and the character is just made transparent)... I think this is great! Just make the camera a non-physical object that can go "into"/ through everything and then make things (everything except enemies) that is between the camera and the character "fade-out." 🤔
Thanks for this! Configuring which objects the camera collides with or fades out seems reasonable. Doesn’t seem to hard to implement as well… famous last words of any feature/mechanic hehe. Will definitely keep this in mind!
You should consider implementing a Hierarchical Finite State Machine to handle the various states of the player: normal, attacking, dodging, getting hurt, etc.
Wish you good luck in developing and hope you'll finish your project and not drop it
Thank you :)
Cool
bro dont mind, marketing is great like your devlog, but it,z super nice if you have some visuals to filling the ugly grey color, even it free assets, but it good rather than grey color ! keep it up
I'm not sure if there are direct equivalents in Godot, as I'm a Unity developer, but it can't be too different, right? The way I would do it is by creating a quaternion which represents rotation towards the target and multiplying that by your raw movement vector. So, basically:
// first argument is direction towards the target (I assumed it's '_target_look' in your case), second argument is upward vector which can be character's up or world's up
Quaternion rotation = Quaternion.LookRotation(_target_look, character.up);
Vector3 rotated_move = rotation * move_direction;
character.position += rotated_move * moveSpeed * Time.deltaTime;
As a result your character strafes around its target in perfect circles. Then you can also use that same rotation to rotate your character to face toward the target. Hope that helps
Great job
I can see why I can't make any game. 😅
The biggest problem remains the AI of the enemies
If the player's animation is that complicated
I have an idea that I can't implement, please put it in your game.
If you play blade of darkness
The method of cutting enemies in it is terrible and more beautiful than all the games of souls
omg thank you im making a berserk game and couldnt get lock on working
Glad I could help!
Don't make the camera lock-on _too_ perfect. The quality of a souls-like system is the player has a lot of options that are a mistake (like following too closely to an enemy). If you try to script out possible player mistakes, then you'll end up with something other than a souls-like.
Could you further elaborate on what you mean? I think an example or specific situation/scenario will help me understand better. But you do bring up an interesting point in not making too good of features that spoon-feed gameplay to the player.
@@Snaiel An example would be making the lock-on flawless/instant and without a turning speed. So, no matter how the enemy performs, the game automatically makes sure the player's character is always facing them. Makes sense on paper, but if remove the requirement for the player to anticipate the enemy, then it's no longer a skill issue.
And skillful playing is the core of a soul's-like (please ignore Demon Soul's bugs, ha ha).
thanks so much, I really appreciate it!
Heyn loves your Story. a little bit of advice, aren't those mixamo's animation usually root animation? You can achieve a lot more dynamics using root animation
Id rather change how the character moves in code and just not worry about animations because I’m not a good animator.
Godot 4.1.2, error loading Main.tscn, in addition, if I try to make another main scene, there are about 427 warnings/errors. Why is that? Also the demo looks nice.
Please have a look at github.com/Snaiel/Godot4ThirdPersonCombatPrototype/issues/3
Hi can you make a tps for godot4 tutorial for beginners
sorry I’m not planning on making tutorials right now :(
Have you considered setting up some kind of ftp so you can wirelessly copy the files to the steamdeck instead of moving an sd card around?
Thanks for the suggestion. I made a python program a while ago that does some syncing for my Dropbox account since they don't have selective sync on Linux. I'll see how well it works in this case.
@@SnaielNice! Have you also considered setting up the steam deck as a virtual controller for your pc? I know its possible to do and would definitely be better for prototyping haha
since there are no demo version for Mac, i try to open the source code but failed to open Main Scene.
Please have a look at github.com/Snaiel/Godot4ThirdPersonCombatPrototype/issues/3
Your codes looking good, not sure on the music choice in the background though as it kinda started putting me to sleep and causing micro sleeps :(
whoops, thanks for letting me know!
do you have the source code by any chance would like to work on this a bit
I have question
I read your code and saw that it is simple although I cannot write it itself
My question is how can I write codes, is there a way of thinking or a way to use the code, I have some ideas, but how do I link them and make them in my game here I yearn in short is how can I learn to write codes in the same way as you
It's experience at the end of the day. What's your coding knowledge like? Variables, control flow, loops, data structures, classes, design patterns, system architecture and more are what I go through when solving problems (like a toolbox). So I found learning about as many topics in programming to really help.
Having a problem solving mindset helps a lot as well. I enjoyed learning mathematics through exercise questions and same with coding (like Leetcode). I'm not saying you should do these, I'm just giving some background on how these arbitrary and somewhat useless exercises help me indirectly by growing my problem solving skills. So maybe think of other areas you are good at problem solving and see if you can adapt your thinking into coding game mechanics.
I make sure to break things down as much as possible and then look at my tools and similar problems solved previously to try and explore how to do things. Does it involve multiple things? Maybe an array will help, or maybe some other data structure. Does it involve directions and angles? Okay, what functions do I know or mathematical ideas I can apply? Then it's just solving small things at a time, then solving how to combine these smaller things by going through the same process of "what's my goal, here's what I know, let's experiment".
Maybe build up your experience by following coding examples or tutorials, both normal code and game mechanics, but try to do it yourself first, then use the tutorials as an answer to check your work. Feel free to mention an idea you have and I'll try to go through my thought process of coding it.
This is cool , how do you achieve the lockon rotation ?
You can look through the files at the time of the project when i first implemented it: github.com/Snaiel/Godot4ThirdPersonCombatPrototype/tree/5c134812ff7e7402b32a3a2b5282a2d9f57e057a
Heyy, im toying with making a souls like in godot4 as well! Hope to see your progress, maybe i'll post my own.
Edit: right now im modeling placeholder stuff and wanting to fix my player controller it doesnt fall through the floor on complicated geometry
Definitely share!!
@@Snaiel when i have a little more I plan on it! It might take me a bit though, i dont plan on using mixamo or whatever, i wanna do this myself.
Wow, you managed to accomplish all of this in just a month? To be honest, i am bit discouraged. I've spent almost a year working on a 2D card game in Godot, and I'm still not at your level. whats the secret sauce?
I’d say the stars aligned on this one. I’ve made a few games before so I know what not to do. But it’s been 3 years since I’ve done any game dev so I was very very keen and just worked on it as much as possible. This month was semester break so this was the only thing I worked on. I’m in my second year of a computer science degree so I’m decent at coding. And I recently finished Sekiro so the mechanics are fresh in my mind. I’m definitely not gonna progress as fast as this in a long time. Don’t get discouraged. Keep cutting the scope of your game so it’s a nice manageable but high quality chunk. The more you develop the better and faster you’ll get.
@@Snaiel Thanks brother, this helps a lot. I'll keep working hard
what is the engine
Godot!
Also your movement is not very good. It's simultaneously oxymoronically to slow & stiff on the ground and to loose & slidey in the air. It's like playing the ice level in Crash Bandicoot.
You should only preserve momentum if the player is holding a directional input upon contact with ground.
And there is a bug where if you touch sprint at any point while you're airborne when you land you slide forward uncontrollably. Sprinting just ducks up movement in general.
Trying to platform on the pillars had me feeling like a games journalist playing Cuphead.
Thank you!! This is incredibly helpful.
Great work! There's a way to contact you? Or do you have a discord?
snaiel on discord