![Fair Fight](/img/default-banner.jpg)
- 14
- 27 606
Fair Fight
Registrace 17. 08. 2023
Godot content here. Clean code enthusiast, or should I say clean node, lol).
Post-start melee attack redirection in Godot | MM3
In this short video we'll talk about ability to manipulate player with directional inputs while being locked in an animation. The topic itself isn't rocketscience, just process WASD in update while playing. But as always, I am aiming at maximizing scalability of my systems, so we ought to talk about directional input processing as a whole for a soulslike game, be it developed with or withot Godot. The lessons of this episode can be applied to any behaviour further, be it a melee attack, a gesture or a movement animation.
Code : github.com/Gab-ani/Godot-3D-Mechanics-Museum/tree/MM3-rotational-inputs-tracking
Code : github.com/Gab-ani/Godot-3D-Mechanics-Museum/tree/MM3-rotational-inputs-tracking
zhlédnutí: 273
Video
Jump & Fall control for 3D character in Godot | MM2
zhlédnutí 281Před dnem
Today we are focused on becoming able to control the fate of the character during it's midair state. Finally we'll be able to jump on a step even when we started our jump vertically!) However, trying to peer down into the depths of rotating character and/or its velocity uncovers deep laying problems of underestimating WASD inputs importance for a 3D game. Relying on this being a series I want t...
Smoother turn movement for a Godot game | MM1
zhlédnutí 621Před 14 dny
First video of Mechanics Museum series, in this episode we'll talk about bringing a polished look to characters casual movement. Most Godot demos show the simplest WASD to vector approach, "if it moves, then it's a controller". Although this works for some time, sooner or later everyone will be bothered by their character sharp behaviour. Instant turns, limbs teleportation and impossible moment...
Advanced controller core for a 3D game in Godot
zhlédnutí 1,3KPřed 21 dnem
This video is on a bit lazier side, it doesn't teach some mind-warping stuff, but instead overviews and summarizes several other videos while providing small channel update and a peak in the future. For the past month I worked to create the series about a 3D character controller that is capable of building advanced mechanics while being scalable, easily readable and supportable. It took 70 minu...
How to become 3d assets animator in 3 hours
zhlédnutí 3KPřed měsícem
At first it seems that this video deviates from the channel previous theme - code centered indie game dev. But my channel theme is actually indie gamedev as a whole, and despite being code centric, sooner or later we'll need to face the dire need of custom assets. No bank can satisfy 100% of your animation needs, you will need to create or to buy them. In the past I thought education and creati...
Dealing with Godot's root motion bullshit once and for all
zhlédnutí 2,1KPřed měsícem
In the last episode of my character controller series I did a mistake when implementing a small root motion feature. The whole situation threw me off guard, stained the reputation and ruined the end of a beautiful series. I wont reapload anything and will leave the stained video forever in that state, but I returned with the revenge. In this 4.5 episode I will extensively discuss Godot's root m...
AAA combat interactions for your Godot game
zhlédnutí 1,4KPřed měsícem
In the fourth and probably the last episode we are building bridges between our well encapsulated character controller and the rest of the game world. Godot has powerful events routing system called signals, and at first it seems that collision with an enemies sword is exactly the case for using them. But in a big game, we'll either have zero signals or like 50, and a system that has its logic ...
How to build AAA combat under 15 minutes in Godot
zhlédnutí 11KPřed měsícem
The third episode of character controller tutorial series is separated into two parts. In the first 6 minutes we use our moves system to create almost studio-looking jump action from scraps and learning some important truths about root motion animations and how to deal with them in Godot. The rest 9 minutes are devoted to building a powerful 3d combat system base. The result is highlevel enough...
Build your Godot characters like AAA titles do | Part 2
zhlédnutí 2KPřed 2 měsíci
As for now, Godot primary way to work with 3d is a glb format file. The nice highlevel interface allows you to include a 3d object into a scene with a simple drag-and-drop. The easiness of this operation masks a lot of things and plays a cruel prank on an unprepared developer when it comes to 3d objects with ability to animate. And the most popular 3d workflow being mixamo to blender to Godot d...
Use professional AAA practices in your Godot game NOW | Part I
zhlédnutí 3,3KPřed 2 měsíci
Part one of universal character controller tutorial. In this series, we are creating a professional looking controller from the ground up in Godot 4. This episode contains refactoring of the base 3d character template to achieve better readability and scalability. The end result is a character base that has an open road to implement any basic movement features. In the next part I'll show what t...
Watch this before using AnimationTree
zhlédnutí 1,2KPřed 2 měsíci
First video of Godot Untutorial cycle, I became better while creating it, hope you could too, while watching. In this videos I'll discuss the strange option to design characters in Godot - directly in the animation player. While providing fast results, this option in my opinion is a dangerous trap. The temptation to mash together some visual programming without proper incapsulations leads to th...
How to show something always on top | Godot 4
zhlédnutí 168Před 2 měsíci
Camera lock on target marker, text nametags for game characters, flying damage numbers. Similar subjects, but different implementations. Glowing thing in photoshop: czcams.com/video/IMOQgO9EgJc/video.html Godot's hot material switching lagspike: czcams.com/video/Cg4ZT6X0ghs/video.html
Soulslike 3D Controller and Camera in Godot 4 | Part II: Target Locking
zhlédnutí 625Před 2 měsíci
This video focuses on creating a camera for 3D controller in Godot 4. The goal is to create behaviour as similar as possible to the one used in the dark souls series. I will cover target locking, dynamic length following camera and circular orbiting around the target and camera. 00:00 Introduction 00:37 Big Refactoring and state machine migration 02:24 Targeting overview 03:21 Target Selection ...
Soulslike 3D Controller and Camera in Godot 4 | Part I
zhlédnutí 516Před 2 měsíci
This video focuses on creating a camera for 3D controller in Godot 4. The goal is to create behaviour as similar as possible to the one used in the dark souls series. I will cover target locking, dynamic length following camera and circular orbiting around the target and camera. 00:00 introduction 02:14 following camera 04:00 orbit around the target 07:00 free camera inputs
You have documented your methods or video content anywhere? I not able to understand much with video 😅
you are doing god's work here we love you man
That is what I needed. Thank you!
0:49
I always appreciate your insights and methods! I would be super curious to how you would handle multiplayer in the future as you've hunted towards it in the past. Your channel is truly a gem!
Thanks for the support! Giving the current audience intention, multiplayer will be discussed somewhere in the middle of August or early September ^__^.
Code cleanup and update is always important. Looking forward to seeing some combo shenanigans in the next one.
I'm pretty excited to see how you do combo finishers / combo trees next episode, because there's another concept I don't think you touched on yet: input buffering. Eager to see your take on it, since afaik, it's necessary for things that require a combination of inputs, like spinning the control stick, flicking it back and forth, or waiting a few frames as a part of a combo.
Ah, man you'll miss on that, sadly(. What I've meant by combo is a long line of attacks, that is invoked by a single button, but consecutively. i.e. You have an attack button, but the second pressing during the hit_1 will invoke hit_2 and so on and so on, untill you'll break the series and leave attacking for some time, putting the series progress to hit_1 again. With a twist that I'll flex with creation of 5 different attack lines of 4 attacks from 6 assets only). What you are talking about is fighting style comboing, like MK-ish fatalities etc. The implementation isn't so hard, I'd probably do a video on them if people will be interested in MM sometime in the future. But if nothing magical happens during my absence, MM is probably paused till at least August to make space for enemies and AIs :D.
@@PointDown aw dang[
Is there a way to swap out for like a different use of animation node 3d? Tried looking at the example but a bit lost as I'm not seeing the animation tree attached to the player model
I might have misunderstood your question, but the whole thing doesn't have AnimationTree at all. Animation is done in a simple AnimationPlayer node named as SkeletonAnimator in HumanoidModel scene. The building of this all from zero is shown in the long version of controller series, animations precisely are in the 2nd episode. Can I ask what is your end goal, what did you mean by swapping out for different usage of animation node, and what animation node exactly did you speak of? Maybe I still could help.
@@PointDown ah yes looking I saw that. M end goal is to ultimately replace the animations with my own attack and such. I thought this was an easier system than doing animation blend tree and such but looking at the scripts I think I'm a bit confused as to how it calls and such
@@sanparuzu Ah, this system is indeed much easier than AnimationTree nodes at this point. It calls to animate at exactly one place: HumanoidModel's root node Model, in the method switch_to(). The general idea is that we have a state machine representing the character, and the animation player is just set to playing the animation for a state. When state changes - animation player changes animation too, that's all the code about animations here, plus some custom blending timings written in an ugly way in the AnimationPlayer's script (I plan to implement them as a table later, maybe, this is a demo anyway). The harder part is how to work with animations of attacks, because most of attacks have a root motion component. I have a video about root motion on my channel, it's a bit advanced if you aren't familiar with Godot's animation resources. BUT!) I scheduled a video that contains my animation import routine, more than enough info for you to change everything to your own animations. It is scheduled to 21.06. Sadly I won't be able to answer comments under it till the end of the month.
Is there a reason to sort for priority other than giving it to the jump state when it's active?
It's the guideline for an input on "what to do if several options present". Imagine your player has 1 HP and they see an incoming hit from the boss. Panicking, they managed to press Crouch, Attack and Evade buttons in one input tick. Without inputs sorting, we'll probably default to random or the first in an array, which is not consistent and is probably a vile design. I'd say, player will be much happier if we just let them Evade the attack every time this happens. Sorting inputs by priority gives us a way to do this in expressive way and with great scalability. Moreover, ease of change is also here, with one number change I can make the system prefer an Attack over roll in this situation, if, for example, our combat has a mechanic of parrying attacks with an opposed attack (f.e. Holloknight). That's will be infinitely better than manually changing order of if operations in every state.
YOU know we are using State Machine Diagrams before this Machanism
Hi thanks for the videos and the abstractions!, can you show how to replace animations and skeleton with this new way of working?
Hi) I cant fully understand your question. Animations are sort of glued together with the skeleton, you cant change the skeleton and continue with old animations, you need your tracks names to match the bones names. I maybe misunderstood you, anyway, if this is the case, I scheduled the video with my animation pipeline to 21.06, maybe you'll find something interested there.
When looking at animations in some games, one thing that bugs me a little bit is foot sliding - and to deal with that other engines are implementing motion matching. Have you given any thought about this for a possible future integration?
Well, this problem doesn't have a single solution, but a gradient of measures. Previous MM episode has a little section on animation scaling to match legs movement together with velocity. Then on top of that, many games use inverse kinematics for legs to snap them to the surface and diminishing the cringe on slopes and stairs. Then you can forbid into-a-wall-running by sensing walls near and your legs will stop slide, as the character is standing idle.
Excellent.
Interesting exploration. TBH, I like this level of ultra control. Allows for crazy parkour type moves in the future maybe?
Well, as I said, the goal defines the results perception. I am not creating a game about crazy parkour, hence the ultra control being undesired, if one want to create a parkour game, why not allow ultra control, yes. This is the reason I am showing 2.5 ways of dealing with the problem and do some commentary on acceleration / rotation natures of fall control for broader audience to choose.
Man, this reminds me of that one legendary GDC on procedural animation. The speaker noticed that his characters were just facing the walls as they walked/jumped into them. Especially as the character would slide along the wall, it'd look weird, so the speaker added wall running, and it was one of the coolest thing to do in the game.
The game is Overgrowth. Creator has amazing blog posts about dot and cross products under a Wolfire Games name.
Yup, nice idea, but the whole wallrunning is an overkill imo. If I'd need to polish this further, but left as is, I'd just add an animation of soft knee/foot kick-off from the wall and landing, then prohibited to run into the wall, if I'm near it. Godot actually has a built-in CharacterBody3D.is_on_wall(), so easy to implement. Maybe I'll do it in the future if MM gets some love and I'll continue with parkour.
Thanks so much. gonna need to watch all your videos.
Thankyou so much I thought I will never do animation my self and was dependent on maximo and other tools. Your teaching style is very attractive, I am following your advise.
Чел как же ты прав. Спасибо за раскрытие глаз на то что такое реальная архитектура.
Да, это очень мощно, спасибо! Придётся делать рефактринг всего проекта.
сорс будет?
может быть позднее, доработанный
It still amazes me that this engine's size is in MBs
Yup. GDscript is ok, but I still like C# much more. This channel could very well be a Unity channel. Better language, better existing content, has their nice DOTS to exercise the brain. But the fucking editor casually consumes 3.5 gb memory plus has a memory leak on top if you activate ECS stuff. And VS on top of that. Yeah... And here we have Godot, that is still a bit raw at times and crushes regularly once a week. Well, guess what, to close crashed Godot editor and reopen it again takes about 15 seconds :D. My heart forever with it at this point.
Do you know how to do a knockback mechanic? I want to hit enemies but have them bounce back
Check Move.react_on_hit() in my demo and the Staggered move heir. After that, just rewrite reaction and maybe have an animation for being knocked back.
Im still laughing over 'ass sphere'
At 5:31, would you mind explaining how you get this orbiting value and orbiting curved? My understanding is that the orbiting value is simply a component of the input vector, but I'm not sure how you got the curved value. Looking at the diagram, how do you make sure the orbiting value isn't larger than the radius of the large circle below? If it is, would you be able to come up with the orbiting curved value? Thanks :D
5:52 is an explanation for orbiting vector. Base orbiting component is an input component. Orbiting curved then is strictly defined. And why is orbiting is lower then the circle - is "an implementation sense" detail. Orbiting component is the orbiting velocity of the character *per frame*. This is about 0.05 meters for a realistic running human speed, because a second has 60 phys-frames usually in 2024. And the camera arm length is just the camera arm length of several meters. Surely, the geometry problem solution will break on hight speeds, but you need to have 400+ km/h for it to start, and if that's the case I doubt you need a soulslike camera. The diagram has these proportions just for illustration purposes.
Great videos. Do you work a day job in the industry?
Nah, to work daily in Mordor, you need some drafting questions figured out with government, by what I mean get fucking shot in foreign land for the war that isn't yours, if you are able to walk. And I'm softly kiting the whole thing in internal emigration. I do some side-hustles with gray payment here and there. I'm mostly doing these vids out of spare time surplus and to save sanity via the creative process). P.S. Sorry for the late answer, for some reason youtube ate the notification, I saw it randomly reopening my vid(.
@@PointDown Good luck man, glad you're still with us. War is an evil of the powerful, and sometimes our art is all we have. I'll keep boosting your work on here as long as you keep feeling like posting it 🔥❤
Your final design's branching is not O(n) [where n is number of possible actions] but O(n + m) [where m is the number of expressed actions to be sorted for priority]
Yup, but I am happy to throw any additional algorithmic complexity as long as it saves me human readability. When I spoke of branching, I spoke of literal ugly if wall in my states that got eliminated by automating the choice. The overall complexity of operations on such scale is minuscule, with or without this addition, the frame time doesn't change, I have a small performance check in the end of the 3rd episode for the series. P.S. Sorry for the late answer, for some reason youtube ate the notification, I saw it randomly reopening my vid(.
@@PointDown thanks for the response however "late" you might think it. Said complexity figures are also basically always calculated at their worst case, and for most frames that is not the case for this design.
it is my vow to you that I will one day become proficient enough in godot to put these wonderful videos of yours to good use; right now i'm wracking my brain on trying to make a full-rig fps controller like ARMA or other mil-sims hehe
wow.. I kept thinking godot animation was limited but truly knowledge is power and you can get amazing results with it. Is there any way to add like a procedural body sway when changing direction?
Yes, there is. I am a fun of do it yourself concept and probably would implement my own solution directly working with skeleton. But there are actual physical bones in Godot. Setuping them nicely is tedious, but the result can be jawdropping. I don't have any videos on the subject, you can check this one czcams.com/video/0MHY2TDeMLM/video.html. Also you can search for inverse kinematics for legs tutorial, they also are touching the theme of manipulating skeleton while having an animation to play.
@@PointDown wow this is amazing. i'm gonna try it out on a next project. the most stuff regarding manipulating bones was a simple "look at" solution for bones like the neck which I posted in my channel. It's quite basic and does not have smoothing but I managed to improve it earlier
Dude, I've been coding for 20+ years, but never did it cross my mind to use the MVC pattern (or those in the enterprise) in a game. You, sir, are cherished. Please keep doing these videos!
When I heard the term "dependency injection" in the last video I thought I was back at work doing PHP lol
i think programers implement root motion wrong. they just don't understand the concept. the root bone position represents player movement. you should change the velocity based on the root motion displacement from the root. and thats why you have to make a proper root bone animation. i think what you are traing to do is just handle it as a fixing a moving animation. the animation should stay fixed in the same position.
Your voice volume is too low and the music is too loud.
oh yippee!!! have fun on your honeymoon and congrats on marrying!!! thank u for this series. developing my dinky lil devil may cry clone is going pretty smoothly, now that im confident that i don't have to stress about n^2 transitions :]
[becomes 623 sub]
really great series, thank you !
Finally someone who mentions how valuable import pipeline is. Loved the trick of using AnimationPlayer as a data container with timeline too. Keep going with the good content!
Enjoying the series, though it is a lot to wrap my mind around, for now at least. Congratulations and have a great honeymoon :)
Top notch content.
Keep going! ❤
Congrats! You are not maidenless afterall.
Congratulations! I'm loving this series. Looking forward to more videos.
Wishing you all of the love and happiness!
go on very interesting
I stumbled across your channel today and I am awestruck by the quality of the topics that you are covering for godot. You are answering a lot of questions that I have had for a long time but could not find good tutorials for. Making the player movement feel very AAA has always been a concern of mine, so again thank you for making these videos and hope you make more. Today I will try your root motion tutorial. PS - If its not too much trouble, can you make a tutorial on how to make the player tilt slightly/ shift their weight sideways when making a turn while running, like you see in many AAA third person games?
Thanks for feedback!) Considering tilting, I'll write the idea down, but probably not earlier than September, as I set for myself at least two more series goals. Fast answer for selfresearch - modify your movement Moves to distinct behaviour between turning and running straight (probably by remembering small amount of recent delta-velocities). Then make your torso tilt a littlebit. This will make your legs bahave awkwardly, so you'll need to replicate what industry does - inverse kinematics for legs. Godot has some guides in that field, here's, for example: czcams.com/video/G_seJ2Yg1GA/video.html . With a little bit of tinkering it is compatible with my skeleton-skin dividing beliefs. P.S I am making the last controller cycle video and my github has code for 5th branch already. There is a small node called DEV_ROOTFORGE, its an unpolished dev layer instrument for auto-baking root position tracks. Can be hard without commentary, but you can read it and research functions with docs. The issue it helps to eliminate is that animation player can't have a position track, so we are baking skeleton's position track into "value track" on backend animation that happens to be a Vector3 value track.
Hm, i stumbled upon this channel because i wanted to make a game in godot as its open source and seemingly growing. Then i discovered you need to know how to code and i dont have any previous experience and i dont know what im doing, and the frustration is adding up after a week of not being able to program a fucking camera moving in the play test. So, the thing im curious is, the game im trying to make has a 3d combat system of 3 sides (for now) that you can attack, up, right, and left, controled in a simulated widget. im trying to make the same combat system as the game For Honor has, but im thinking about making it a lot more input-intensive to take the system to its full potential. Do you think its really more dificult than to make a more traditional combat system like dark souls, or maybe even easier? I wonder to see a response from someone who actually knows and has some progress about making a game and its combat mechanics
Haven't played FH, sorry. I heard, they have a system that switches your stand dependent on the joystick position. If guard changing isnt a move with an animation, but simply a short hands reposition, I wouldn't have them as Moves, but simulated them with blending or with arms IK. Then input gots a new field - the variable for guard input. It can be left, right and up, but you then can create any number of zones or even direct hits with a vector. Your combat system layer then needs to store and change the parameter of current guard, and your moves need to ask for it. If there are 3 guard, I'd have three types of moves, like r_attack, u_attack and l_atrack, etc. If you want precise control with "infinite" guards decided by vector, I'd have one move that changes its animation and does some dark magic with blending and IK for arms.