Fair Fight
Fair Fight
  • 14
  • 27 606
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
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

Komentáře

  • @artsmit9545
    @artsmit9545 Před 8 hodinami

    You have documented your methods or video content anywhere? I not able to understand much with video 😅

  • @belgbeladel
    @belgbeladel Před 3 dny

    you are doing god's work here we love you man

  • @AlexR_OR
    @AlexR_OR Před 4 dny

    That is what I needed. Thank you!

  • @kitkorn4782
    @kitkorn4782 Před 5 dny

    0:49

  • @bravenstein9442
    @bravenstein9442 Před 6 dny

    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!

    • @PointDown
      @PointDown Před 6 dny

      Thanks for the support! Giving the current audience intention, multiplayer will be discussed somewhere in the middle of August or early September ^__^.

  • @neurolancer81
    @neurolancer81 Před 6 dny

    Code cleanup and update is always important. Looking forward to seeing some combo shenanigans in the next one.

  • @gonderage
    @gonderage Před 6 dny

    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.

    • @PointDown
      @PointDown Před 6 dny

      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.

    • @gonderage
      @gonderage Před 6 dny

      ​@@PointDown aw dang[

  • @sanparuzu
    @sanparuzu Před 7 dny

    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

    • @PointDown
      @PointDown Před 7 dny

      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.

    • @sanparuzu
      @sanparuzu Před 7 dny

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

    • @PointDown
      @PointDown Před 7 dny

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

  • @kennethrapp1379
    @kennethrapp1379 Před 7 dny

    Is there a reason to sort for priority other than giving it to the jump state when it's active?

    • @PointDown
      @PointDown Před 7 dny

      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.

  • @OrangeIND-
    @OrangeIND- Před 7 dny

    YOU know we are using State Machine Diagrams before this Machanism

  • @PabloPerez-rn7zp
    @PabloPerez-rn7zp Před 11 dny

    Hi thanks for the videos and the abstractions!, can you show how to replace animations and skeleton with this new way of working?

    • @PointDown
      @PointDown Před 11 dny

      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.

  • @Even-Steven
    @Even-Steven Před 13 dny

    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?

    • @PointDown
      @PointDown Před 13 dny

      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.

  • @JeffThePoustman
    @JeffThePoustman Před 13 dny

    Excellent.

  • @neurolancer81
    @neurolancer81 Před 13 dny

    Interesting exploration. TBH, I like this level of ultra control. Allows for crazy parkour type moves in the future maybe?

    • @PointDown
      @PointDown Před 13 dny

      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.

  • @gonderage
    @gonderage Před 13 dny

    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.

    • @AgnisNeZvers
      @AgnisNeZvers Před 13 dny

      The game is Overgrowth. Creator has amazing blog posts about dot and cross products under a Wolfire Games name.

    • @PointDown
      @PointDown Před 13 dny

      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.

  • @franciscostanfield5962

    Thanks so much. gonna need to watch all your videos.

  • @user-kt4kh8he7e
    @user-kt4kh8he7e Před 14 dny

    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.

  • @vegameta
    @vegameta Před 15 dny

    Чел как же ты прав. Спасибо за раскрытие глаз на то что такое реальная архитектура.

  • @vegameta
    @vegameta Před 15 dny

    Да, это очень мощно, спасибо! Придётся делать рефактринг всего проекта.

  • @Boildroid
    @Boildroid Před 16 dny

    сорс будет?

    • @PointDown
      @PointDown Před 15 dny

      может быть позднее, доработанный

  • @content8420
    @content8420 Před 17 dny

    It still amazes me that this engine's size is in MBs

    • @PointDown
      @PointDown Před 17 dny

      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.

  • @kloa4219
    @kloa4219 Před 19 dny

    Do you know how to do a knockback mechanic? I want to hit enemies but have them bounce back

    • @PointDown
      @PointDown Před 19 dny

      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.

  • @phoenixastra4429
    @phoenixastra4429 Před 19 dny

    Im still laughing over 'ass sphere'

  • @zackarysemancik5491
    @zackarysemancik5491 Před 20 dny

    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

    • @PointDown
      @PointDown Před 20 dny

      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.

  • @LongFacedBastard
    @LongFacedBastard Před 20 dny

    Great videos. Do you work a day job in the industry?

    • @PointDown
      @PointDown Před 8 dny

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

    • @LongFacedBastard
      @LongFacedBastard Před 7 dny

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

  • @LongFacedBastard
    @LongFacedBastard Před 20 dny

    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]

    • @PointDown
      @PointDown Před 8 dny

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

    • @LongFacedBastard
      @LongFacedBastard Před 7 dny

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

  • @musketgolfer4326
    @musketgolfer4326 Před 20 dny

    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

  • @mrjshzk
    @mrjshzk Před 20 dny

    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?

    • @PointDown
      @PointDown Před 20 dny

      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.

    • @mrjshzk
      @mrjshzk Před 20 dny

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

  • @ClausCodes
    @ClausCodes Před 21 dnem

    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!

    • @LongFacedBastard
      @LongFacedBastard Před 20 dny

      When I heard the term "dependency injection" in the last video I thought I was back at work doing PHP lol

  • @stefanocarlocelsi1705

    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.

  • @raysandrarexxia941
    @raysandrarexxia941 Před 23 dny

    Your voice volume is too low and the music is too loud.

  • @gonderage
    @gonderage Před 25 dny

    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 :]

  • @alexandreturcotte6411

    [becomes 623 sub]

  • @nue_hazel
    @nue_hazel Před 26 dny

    really great series, thank you !

  • @6v8v8v8v6
    @6v8v8v8v6 Před 27 dny

    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!

  • @Even-Steven
    @Even-Steven Před 27 dny

    Enjoying the series, though it is a lot to wrap my mind around, for now at least. Congratulations and have a great honeymoon :)

  • @JeffThePoustman
    @JeffThePoustman Před 27 dny

    Top notch content.

  • @lucapagano3685
    @lucapagano3685 Před 27 dny

    Keep going! ❤

  • @NeZversSounds
    @NeZversSounds Před 27 dny

    Congrats! You are not maidenless afterall.

  • @neurolancer81
    @neurolancer81 Před 27 dny

    Congratulations! I'm loving this series. Looking forward to more videos.

  • @dude2542
    @dude2542 Před 27 dny

    Wishing you all of the love and happiness!

  • @Grom84
    @Grom84 Před měsícem

    go on very interesting

  • @crispyghoul
    @crispyghoul Před měsícem

    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?

    • @PointDown
      @PointDown Před měsícem

      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.

  • @TheRussianLair.
    @TheRussianLair. Před měsícem

    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

    • @PointDown
      @PointDown Před měsícem

      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.