Fair FightPart 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 to do with non-basic ones, and will probably touch 3D animation.
00:00 What do we fix 00:43 What even is a player character? 02:22 Choosing right abstractions 03:42 Next steps and why you can't avoid them 06:26 Building a nice model 10:50 Killing branches with right data structures
Use professional AAA practices in your Godot game NOW | Part IFair Fight2024-04-10 | 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 to do with non-basic ones, and will probably touch 3D animation.
00:00 What do we fix 00:43 What even is a player character? 02:22 Choosing right abstractions 03:42 Next steps and why you can't avoid them 06:26 Building a nice model 10:50 Killing branches with right data structurespre-multiplayer vertical slice of combat, devlog ep 4 halfassedFair Fight2025-08-28 | take care tell loved ones you love themAdvanced Godots SkeletonModifier3D: create, debug and optimize them with this godly tech!Fair Fight2025-08-07 | Yo! Formally this is another episode of Project Arena devlog series, however as I structure them thematically, this is practically indivisible from another skeletal animation video. I remind you, possible viewer, that to understand fully what happens on the screen, you need to understand basics of this class, SkeletonModifier3D. If you have no idea what happens, you can watch this video of mine: youtu.be/xpoPfUKI9tw If you know what class does, but aren't aware of my crazy ass idea to build a whole animation framework with that doesn't include a "purple" node beneath, watch this basic tech video: youtu.be/J4N_MH89z6c
In this video I will first warm you up by giving some universal SkeletonModifier3D tips that will probably be helpful even without the whole framework. Then I will review a new modifier I made for our project, it's a powerful torso overlay animator that doesn't just play an animation on your torso bones, but overlays it on top of some existing torso. It has several great usages, for example, we can make a torso asset completely immune to pelvis conflicts. You can have an offset that was taken with pelvis looking whatever and transplant it effortlessly onto let's say sprinting legs with crazy pelvis fluctuations and it will still be looking naturally. Example that is being used in the video demonstrated this mechanism on a blocking torso pose that was "taken" from a combat pose blocking donor animation, but has no problems of playing on top of jogging legs.
The only problem of that modifier is that a brutal calculation of such a transformation is costly af and took more than 2 ms from the frame originally. So the rest of the video is about optimizing SkeletonModifier3Ds to hell and back :) That was quite a journey and I learned a lot about Godot internals and animation data, wish that for you, dear viewer :З
As always, that's a devlog for my project, so no code today, but you know, there are some files in that juicy discord's brainstorm brewery channel: discord.gg/j5XDqnMUeQ
Chapters 00:00 How to generate this much power 00:30 Kira theme worthy suspense 02:04 Modifiers execution flow caveat 04:03 Free 100%+ percent performance 07:04 Two tips for torso/legs split 10:05 New Modifier in the family! 14:06 Making this boy less chonky 16:36 Making this boy into olympic runner 20:31 Higher level design, export fields etc 22:27 Future usages of this technologyGod Tier 3D Character Controller Made In Godot, this will be our ALS!Fair Fight2025-06-20 | Yoo! This is the first episode of project Arena's devlog series. In this one I will review the controller core update, and its difference with public controller project. The core idea is, of course, the torso split. Older viewers know that I already have attempted it on the public project, and succeed to some extend, but couldn't call that "god tier". However, since then some things changed. Firstly, Godot started to pull its head out of its butt on 3d animation topic and gifted us SkeletonModifier3D technology. With them I power the animation framework flexible enough to pull perfect torso split and 8-directional locomotion blends without loosing my soul to AnimationTree. Secondly, I've got a professional animator that can provide such 8-directional locomotion packages of really nice quality. And finally, the project holds hopes to become commercial one day, so now there are ambitions and money on the line, so I'm sweating. I'm quite proud with results, this is a very tranquillizing milestone to me. Of course, I have only a couple examples for how powerful the thing is, but I sat with pen&paper framework, and grew to think I can design the whole titanfall with these bricks. This puts my soul finally at rest, I made The Controller and can now do some other things like enemies, networking or even better animator's utils. Again, there is no project, but I consider this a solid learning material anyways. There are a couple of blurred code pieces in the video, they are not "privated" they are hidden to talk about them later down the journey in a couple of minutes. In the end I also include several advice on how to refactor public controller towards this system. Also, some of my videos from the past you might consider useful: This is pretty much the tech I use to animate stuff, minor things changed youtu.be/J4N_MH89z6c These two videos are my previous attempt to torso split, they are a valuable material, but add a grain of salt, nowadays they are a bit morally old, keep in mind this was before we got skelly modifiers: youtu.be/Fsa2wxyQvzM youtu.be/huwW1JZt0BI If somehow you are a new viewer and have no idea what happens, check this one out, I have a 1.25h tutorial series, you are in for a good time: youtu.be/FgO5edghqRE
Check out our discord, once in a while a wizard appears there and randomly cuts you main frame execution times by half! discord.gg/j5XDqnMUeQ
Also the guy who provides animations makes some awesome 3d tools, check them out! https://linktr.ee/notthatnda
00:00 Why you want to cut your legs 02:45 Base(d) system 10:53 Short classes review 12:42 Final leap to godhood 14:40 How to refactor public project into thisDota 2 overaly app, stream 1 | godot-ers also welcome!Fair Fight2025-06-12 | Hii Youtube will probably default to 720, force it into HD by hands, we'll lose framerate, but I'm streaming notepad anyways.
What we do is we create a WPF app on vanilla C#, more info here: youtu.be/59X2P7ZORNgFair Fight Live StreamFair Fight2025-06-10 | ...Test stream runFair Fight2025-06-10 | kurlyk kurlykNew Content: We Make C# WPF Application now! | streams incomingFair Fight2025-06-08 | Hello, kind stranger! Today I'm doing the one thing creators are told not to do, I am splitting the audience of the channel into two different topics, because I can. From now on, I will occasionally take my time to develop a WPF application on vanilla C#. Originally I'd do it as a hobby of mine giving it several hours a week, but since the whole ordeal is programming, I decided to give it a chance. I won't waste precious time to heavily edit any videos for it, instead I am launching streams. We'll see, I honestly expect them to be unpopular and empty af, because to watch them a viewer must be interested in Godot and in C# and simultaneously in Dota and my idea about it... Too much of Venn circles need to cross. On the other hand, despite the app being developed being vanilla C#, nothing stops anyone to just hop on the stream and ask me anything about Godot, I will answer. If somehow streams will be embraced by godot community as something of value, I will continue them as a stable practice.
A couple of words about the project: We'll do an overlay application for dota 2. Depending on over- or under- hyping it you can call it "dota 2 coach application" or "glorified stickynote simulator". The core idea is we will latch onto dota's game data streaming to know what time is it and other interesting stuff. Knowing that we can create small windows that are always on top, transparent, clickable-through, can't get focus etc. If we add a text on such a window - bam, we created a reminder to do something. What we'll get as a result is a powerful tool for ingame habits baking in. I know, the idea might sound very gimmicky at first, but such app's power is scaling with how good of an advice one can give to self, and we often can't generate super nice advice on the fly. Give this thought some time and you'll find some bonkers level broken usages for this, especially if you are not so good of a player. I'll also want to include some long-wanted pet ideas of mine that I never got to implement because of lazyness. For example, quite a visible, not-clickable-through, always on top window in place of game searching button, and don't move it away until 10 minutes from the last game passed :D. This is 100% legal, we use official instrument to get data from games, it is created by valve etc. The project will be MIT opensource, but I will create it fully from zero, so there is no repo yet ;)Project Arena devlog № 0. Idea Origin, Vision and What To Expect.Fair Fight2025-06-06 | Hellooo :) This is the episode № 0 in the devlog series that is about to take over the channel. In the first third of the video I will tell about the format, what it brings to the table for an average viewer and what it potentially might take from them. In the second part I will describe what out game's journey will look like if it happens.
There is no code for this episode, your project is in another castle :]
You can also support me on patreon, but I'd wait with that for now, as I am restructuring the channel and probably will change patreon page. There is, however a new way I'll be using that, because now I will include some written content and patreon will be a wanna-be blog site.
Also, as we now are a team, check out Nacho's socials and awesome tools! https://linktr.ee/notthatnda
00:00 story time 01:45 what the format brings 03:57 the VisionBig Changes Are Coming To This Channel!Fair Fight2025-05-27 | You could probably see that I didn't manage to keep updating the last series. I think the time has come to seriously shake things up, because I started to be detached from the channel more than is reasonable if I want to continue with it. This video aims to provide some context of the situation and to plant some seeds for future. Soon there will be one or two next videos that will explain/announce what content you will see on this channel from now on.Beautiful IK fundamentals and implementations with cyclical coordinate descent method ft. Godot 4Fair Fight2025-03-31 | This standalone single video is about IK solutions. In the first part I want to throw in some entry points about theory of the problem and the ways to solve it in general. Then I'll tell why had I chose the algorithm we are using today (cyclical coordinate descent), and what to expect from it. Finally, the second part of the video is dedicated to several implementations for the algorithm and its "children" from the bare classics towards constraints and then complex modifications for order of execution, weightings of optimisation speed, etc. To demonstrate all this I created a separate 2d project in godot 4.4 (I needed scalable domain Curve resources from that version). Although the video doesn't contain nor skeletal modifier, nor any 3d transformations, all this is done with an idea of becoming SkeletonModifier3D. That will be the topic of the next video that I will create in parkour series after this one.
Here below I will list a lot of materials I found useful while doing my research for IK:
First, several things from Geat: youtu.be/2_cdDGwnl80 - this one is about Jacobian method, I heavily recommend to watch it even if you don't plan on using the method youtu.be/htxwOFi26YI - this one is about CCD, i.e. what we do as well github.com/SpehleonLP/IK-Guide - they also have an extremely useful repo dedicated to IK, just read the readme as an article
youtu.be/UNoX65PRehA - imo best video out there if you are interested in understanding FABRIK algorithm basics youtu.be/lJCeHXXPf5w - another video about FABRIK, not that good imo, but it has the code and the code is on gdscript
Chapters: 00:00 IK fundamentals, algorithms families 03:50 Cyclical coordinate descent fundamentals 05:29 gdscript implementations: classics 11:17 constraints 13:21 an attempt to create form-saving solverTransition to Godots superior 3d animation system - SkeletonModifier3D !Fair Fight2025-02-20 | Hello again, and welcome to the new skeletal animation video! This project's code is located in parkour project, but it's really almost a standalone episode. I only put it there to preserve the developed progress for climbing actions etc, because climbing actions sort of triggered the pathing here, highlighting the necessity to finally dip our toes into IK pool.
In this video I will give a short beginner's guide (for real!) to building SkeletonModifier3D based animation systems. I am also proposing a nice hack that once again abuses some properties of plain old AnimationPlayer to cure one of the biggest downsides of working with complex animation frameworks - we'll solve transition request hell.
Currently, the project includes only one proper modifier - the animator one. I also set things up in a less effective, but illustrative way - we have one animator for full body and two other for torso and legs right beneath it. Obviously, it is much better to just have torso and legs animators installed, and your "full body" mode is just running both of them, but I use the division for demonstration purposes. I also must say that currently parkour project is "stripped" from some abilities we had back in the main controller project. This is due me wanting to refactor some input mapping mechanisms and some other key area awareness changes that brick some of the old attacks/movement code. I do it because parkour project's goal is, well, to demonstrate parkour. But of course, the animation framework migration will eventually make its way to the main controller's repository. Then and there I will include all fixes and polishing for torso/legs split Moves, attacks and all features we had to preserve "backward compatibility". For now please take these results as a demonstration and a theory/design philosophy-packed example video. And the next one will be more code-heavy with IK integration etc.
00:00 intro and past mistakes correction 01:20 why NOT use skeleton modifiers (or costs of using them) 02:32 why use them anyways you power-hungry creature 04:46 skeleton modifiers 101 08:13 crazy tech for complex systems + optimisation 13:46 base animator modifier code reviewLedge actions for your 3d adventure game in GodotFair Fight2025-01-31 | Hi) For this episode of parkour series I brought you the next evolution/use case for our geometry pre-baking technology. Now on the asset preparation phase we memorize the list of neighbours for each edge of the collision model of an asset. And it gives us ability to analyse them in runtime, for example we now can search for climbable neighbour-edges of the current edge, what will allow us to traverse "rings" of edges. Can be used to climb around cliffs, buildings etc. The demo comes with several actions for ledge "family" of behaviours, I set up bridges for attacks, climbing and vaulting as well. And the pinnacle is probably the ledge-to-ledge leap action because it allows for traveling between different assets without leaving ledges. It opens the way to construct large level areas made purely of parkour elements: bottomless pits, cliffs, dramatic destroyed buildings climbs etc. One step closer to creation of a good 3d adventure game in Godot, I'm talking to you, uncharted clones builders! :D
You might as well support me on patreon ^_^: patreon.com/c/FairFight (If you are reading this and your name is Steve on patreon, answer me there or in discord or in email, idk)
00:00 overview, general structure 01:37 grab point tech debt / distance between two lines 05:15 substates except angle 10:36 angle substate plus two low level topics about geometry 17:55 attacks and pull up 19:25 ledge-to-ledge leapParkour ep3 halfassed (read description)Fair Fight2025-01-06 | So, what this embarrassment pile is - it's a productionless attempt to just throw at you the current progress of parkour project's as freeflow thoughts. This is how I communicate without writing a script and editing pronunciation/vocabulary brainfarts). English hard.
Life's also hard, so what I'll do is I will put here a link to the code (which was available like a month ago, I just couldn't gather enough me to put together a video), then I'll create there a nice wiki-ish readme file with markdown etc. In that readme I'll review the biggest challenges of concrete mechanics implementations and the current "nemesis" of the project: necessity to create Moves with substates while maintaining the system as a whole as a single layer state machine. the repo(readme in progress): github.com/Gab-ani/Godot-Parkour-And-Advanced-Movement/tree/ep3-beam-walljump-protoledgeHow to be OP and detect some climbable ledges with godot (3d)Fair Fight2024-11-29 | Yes, intro and title took inspiration from @ymfah edits :D. Developing this thing kinda felt as one of his challenge runs.
This video is dedicated to an ambitious goal of destroying the fuck of physics based algorithms for runtime edge detection. Every single of those methods is bad because they all do one wrong turn in the very start of the journey. They also ruin performance of everything they touch, let alone godot, and we are trying to shove there a nice 3d game. So we'll make another turn, and our algorithm will be both more precise than any ray/shape combination and more efficient than those. To achieve this we'll harness unholy power of data preprocessing, we'll make a pact with hash demons and we'll learn to get immediate geometry information from a figure with O(1) speed.
00:00 fuck physics, get off my lawn 04:06 geometry for the win 12:22 pipelines for world domination 19:51 algo reiteration for skippersDesigning AAA parkour system for Godot in 15 minutesFair Fight2024-11-14 | Hello hello) This is the first video in our parkour series. Before descending into the depths of raycasting spam and movement testing, we need to prepare our controller base to hold the heavy burden of whole new level of inputs mapping. Prior, our movement buttons were responsible only for on-the-floor existence, and now suddenly we want to pilot ledge actions and rope walking with them. This means that even WASD actions have ambiguous meaning for our base controller, that some layer will need to translate into state machines transitions. So, in this introductory episode I hope to open some eyes onto Godot power to hold all those sexy parkour and climbing techniques big AAA adventure games have.
Useful links:
For people who don't understand what happens, you can check my character controller playlist, we achieved some very nice results there and I am using it as a base to this parkour series. First video for the 1h route: youtu.be/FgO5edghqRE Compressed version: youtu.be/E3BxMgmP4m0
Also check the pinned comment!) You, yes, you, have a chance to actively impact how the series will evolve later.
Aaaalso this video doesn't offer much of the code. Long story short, I already can wall-jump, ledge grab, ledge climb and beam/rope walk, but, a loooot needs to be said about my experience creating those states. When I started to write the script I found out that it slowly becomes more and more 50-ish minutes log, and I sworn off creating 40 minutes videos. So, I am cutting the first theory-heavy part first, and the next video will be full blown godot-heavy episode about code. If you reeeally want - you can download the repo, the project literally already in a working state. But, disclaimer, I will commit into it some final refactoring and enhancements, this isn't the final state: github.com/Gab-ani/Godot-Parkour-And-Advanced-Movement
Feel free to ask any questions, here or in my discord server: youtu.be/E3BxMgmP4m0
00:00 Area Awareness and why you need it 01:42 Types of area awareness 08:00 area awareness integrationOne Node Revolutionizes AAA Skeletal Animation in Godot 4.3Fair Fight2024-10-26 | Hi) Originally I planned to do a small overviewing video about skeleton modifiers because I wanted some tails/custom IK things for myself. But the deeper I dug into it, the stronger was my understanding that this one node is probably the single most powerful base class I ever saw in Godot. 4.3 version dropped us a powerhouse of a technology that masks as a simple hook, but simply by existing, gives us ability to create our own custom skeletal animation pipelines on a level unseen before. If earlier AAA quality of assets mixing from the get go was something we had in theory, but obfuscated and gated in practice, now not only it is possible, but it is easy and can be nicely broken down. Enjoy your ascensions :D.
Also I won't pin the code for this time. The technology is newfound for me, and as you might saw, this isn't the character controller project. During the next series about parkour I definitely will use skeleton modifiers to their fullest and then I'll share those things. For now, if you really need, copy from screen I shown you everything I have, but what I ultimately understood while working with them is that it's as close to, ahem, "low level" as gdscript can feel. And practice shows that low level code hardly ever can be properly used and understood if copied.
00:00 Good node 05:27 Powerful node 10:26 AnimationTree rant 14:36 Crazy powerhouse of engine rewriting node 21:09 I'm pepega for measuring performance that way, read the pinned comment 21:50 Crazy powerhouse of engine rewriting node IIFree Flow combat system, or how to be Godot BatmanFair Fight2024-10-15 | Hi) This video is a midseries single that was chosen by my patrons to be placed between two bigger projects. I'll first take some obnoxious time to talk about Free Flow combat system and then we'll integrate it into our Godot project, while discussing the general cycle flow and what entities work when your game uses free flow. As an illustration I used my older work about complex and branched combo lines, that saved its internal logic while acquiring new free flow-ish functional. Good luck becoming Batman!)
For the purpose of having enemies around, this project is set in our godot 4.2 project about intelligent enemies, despite us having access to 4.3 with character controller. I simply added another branch there. github.com/Gab-ani/Godot-3D-Enemies/tree/free-flow
00:00 What is free flow combat really? 04:17 Actual codeMore features for advanced Godot third person controller!Fair Fight2024-10-11 | This video documents our third person controller's progress over the last four months. From the last overview video we've pulled ourselves through enemies series. We successfully split our character into torso+legs combination that allowed us to easily create parallel mini-actions like reloads, blocks, sheathing our weapon while running etc. I also upgraded the project to Godot 4.3 version for future usage of SkeletonModifier node. Right now the codebase is completely compatible with both 4.3 and 4.2 engine versions. There is also a broad list of fixes and tech debt liquidation. All significant changes are documented and demonstrated in the video. This is the purest form of the project so far, it contains all the controller's progress from enemies series, but does not contain enemy-player integration code.
You might as well support this channel in patreon ^_^ patreon.com/FairFightUsing Godot to create intelligent enemies: mirrors, bots etc.Fair Fight2024-10-03 | This episode can be the last one in Enemies and AI series. In it I review practical implementations for concepts I talked in the previous video: effective two layer state machine that is piloted by non-descrete decision centre. Overall results are nice, the project definitely achieves the main goal of building and showcasing a viable technology. We certainly use Godot to create AIs of enormous awareness and intelligence level for our bots, mirror duels, offline player surrogates, player-sized bosses etc. But at what cost?...
00:00 Problem setting 01:34 Theory rewind 03:33 Beliefs 04:05 Brain 07:17 Behaviours 10:01 Actions 10:29 Behaviour example 1 11:21 Behaviour example 2 14:01 Behaviour example 3 18:04 Making it defeatable 21:07 Bitter lessonsFundamentals to create a dueling enemy for a fighting game. ft. GodotFair Fight2024-08-31 | This is a subepisode for Enemies & AI series, a needed theory part before I'll be able to talk about practical implementations for our duel mirror fighter. I'll discuss some intelligent machines fundamentals, then I'll suggest a structure to organize such a project with Godot. There is no code for the episode, sadly, but it of course will be included in the second, practical, part.Roll dodge, shield block and finite spells in GodotFair Fight2024-08-14 | This is another video in-between Enemies & AI episodes. This is another evolution step for our controller base, moving us closer to the soulslike family. I created four new behaviours: roll dodge, shield block and blocking reaction (impact movement) and a spell with charges that can be restored with a separate animation. The second part of the video is about Godot 's tool scripts such as a simple tool script and it's more complex brother, EditorScenePostImport. We use them to do some custom animation modifications to the source animations we get from mixamo (or even create ourselves).
00:00 Results 00:37 Roll 01:52 Block 03:13 Spell 04:44 Custom import pipelinesGodorrors beyond my comprehensionFair Fight2024-08-08 | Animations in animation libraries have make local (unique) to scene functional broken. Code changes don't help as well. No .duplicate() methods help. To workaround, you need to manually have different resources with same content, achievable with a tool script. RIP 5 hours of bug searching(.
github.com/godotengine/godot/issues/82421Godot animation layering pipelines for big gamesFair Fight2024-08-04 | Hi and welcome to a sudden video in controller series!) This video is an inbetween video in Enemies & AI series, as we will create a competent dueling opponent in the next episode. And to do that, we need some functional to be competent about, so our controller needs those roll, shoot, reload and block. And to have those animations, we'll need to create a pipelines for layering an animation on top of another one in Godot. Pretty much any of the big games that come to mind have at least some form of animation layering, but sadly, a lot needs to be done still for Godot to create nicer workflows. This is the video to document this controller evolution stage and to discuss an important topic on the way.
00:00 What do we want? 01:25 Model 06:39 Biased BlendTree review 10:18 Blending "pipelines"Learn Godot workflows by recreating AAA bossesFair Fight2024-07-26 | Today we continue our enemies and AI series discussing an important topic for any action game. Bosses. As bosses usually have closed arenas and only several ai-input fields which are probably player's positioning data, they are fully covered by discrete AI algorithms for decision making. However, bosses in general, especially AAA ones, have much more moves and behaviour patterns that regular enemies. Their fight behaviours are split in phases, they have responsive answer-attacks for player's tactics, and they usually have branched combo lines of several starters and dynamic lengths. Despite being discrete, a regular state machine or behaviour tree approach can struggle to cut this task, so today we mark the apex of static behaviours by discussing and implementing a model of hierarchical finite state machines. We will also discuss their nature, new workflows they bring and new ways to think about your behaviours to design your boss fights. And to illustrate the concepts, I will try to recreate the first(almost) boss from dark souls III, Iudex Gundyr in Godot, or Iudex Godotdyr :D.
Two links to my videos about backend animations. They are timecoded and the whole watch time is about 6 minutes if you aren't interested. The why: youtu.be/kK5NXyIsEQI?t=587 The how: youtu.be/b3uFSh3GASs?t=176 The second video also contains information needed to create parrying and grab behaviours cleanly if you want and / or have assets.
00:00 Results and goals setting 00:59 Assets talk I 02:21 HFSM and design breakdown 07:39 Assets talk II 08:41 HFSM class code walk-through 14:16 Behaviours code walk-throughChannel update, present and futureFair Fight2024-07-19 | Hello This is a small transitional video I'm including in the schedule due to delays in the next video production. In short, I created a Patreon page and Discord server. In the video I talk about tiers, rules and my general stance on patreon issue.
Patreon page: patreon.com/FairFightHow to Godot about 95% enemies from action gamesFair Fight2024-07-12 | In the second episode in Enemies&AI series we will discuss enemies of the lowest structural complexity and will learn to create them in Godot with best practices. Low structural complexity is by no mean a negative characteristic, as that enemies are the core of the whole genre of action games. If an enemy is updated in real time, and is existing primarily to hurt the player or to be hurt by them, it's probably covered by this video with little to know exceptions. I'll make a focus on theory of state machine and it's evolution, then we will recreate the first enemy of the series, a territorial mob, but this time with nice architecture decisions.
In the video I often draw parallels and make comparisons with the Character controller series. You don't need it's context to understand what happens on the screen, but you may want to check it out. The short version of it is in this video, watch the first 5 minutes: youtu.be/E3BxMgmP4m0 The longer version is the whole character controller playlist.
Also I barely touched the logic of Weapon and Hurtbox classes, because they kinda in "just works" category, if you want an extended piece about them with full explanations, here's the chapter timecode, 2.5 min length: youtu.be/b3uFSh3GASs?t=276
00:00 Choice of algorithms 03:09 Base state machine 04:32 How to design state machines 08:57 HFSM and why HFSM 13:22 Recreating first enemy with statesGodot, Enemies, Bosses, NPCs and AI buzzwordsFair Fight2024-07-05 | Welcome to the first video in Enemies and AI series! This episode on 80% consists of theory and design talk I want to do before exploring practical implementations. First part is devoted to defining what an enemy, or a game opponent in general even is. Then we'll quickly talk about technical terms and algorithms we'll need on our way, such as state machine (of course lmao), behaviour tree, GOAP and some high level BDI techs. Then we'll do a short overview of existing solutions for Godot. For general picture broadening and to not create something unoriginal. And finally there will be a short demonstration of how to not.
This video doesn't has any code to share through github, however, I mentioned many other people and theirs content. Here's the list of all links I used.
00:00 What we'll do 01:22 Despair of formalists 05:05 Triumph of artists 09:59 On AI algorithms 13:22 Logical Trap & How to analyse 20:13 Existing Godot things 23:30 The simplest we can do (don't)Complex AAA combos in Godot, tutorial & pipelineFair Fight2024-06-21 | In this short tutorial video our small project demonstrates ability to go instant-DMC, if only you have animation assets. Studio-made AAA fighting games often have long strikes series, sometimes for tens of moves in one combo line. However, there is no such a thing as "AAA list length" or "AAA praph complexity", anything data can be schemed on an A4 piece of paper. Its the assets quality and quantity that is frightening, but to create a combo line is as easy as to create a custom List collection implementation. Today we will pretend we have the amount of animation assets needed to create a small, but already complex combo structure with several branches and merges in it. And as a bonus, I'll give a quick excurse on my animation import pipeline, because, pipelines are the most important thing in your gamedev life. Also Godot can be not so intuitive to use when it comes to working with animations and animation libraries.
00:00 Preparations 00:34 Assets 01:00 Attack series design 01:48 Implementation 02:14 My animations pipeline 05:05 What we achievedPost-start melee attack redirection in Godot | MM3Fair Fight2024-06-14 | 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-trackingJump & Fall control for 3D character in Godot | MM2Fair Fight2024-06-07 | 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 to give a small talk that will pay off only in 3rd and 4th episodes when we'll start to push Godot limits in ability of containing polished combat system.
00:00 Overview of ways to control the velocity 02:06 Signs of missed abstractions 04:16 WASD inputs are everywhere 05:41 Results are defined by the goals 07:23 Nezvers chapterSmoother turn movement for a Godot game | MM1Fair Fight2024-05-31 | 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 momentum switches. Today I want to push the boundaries on that subject a bit. So we are making the movement smooth!) I will show a basic implementation and then draw a couple of roads for the future. As always, problem-driven, so everyone who ever touched the subject will find something interesting to look at.
Code repo for the new series: github.com/Gab-ani/Godot-3D-Mechanics-MuseumAdvanced controller core for a 3D game in GodotFair Fight2024-05-24 | 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+ minutes to narrate my thought process and design principles used. Today I am finishing this series completely. But our journey doesn't end here, I have at least two series planned, one about enemies and one about networking and multiplayer. Those series could use some background and I don't want to narrate all the same old thoughts again. So I will start those series from the ground up as well, like "hostile capsule" or "synchronized capsule", but the end goal is to use all the lessons from the character base and reapply the best practices. Asking a viewer who came for some networking knowledge to watch a 70 minutes of previous content is straight up disrespect so I've created this last "resume episode". I'm also won't be able to make any videos in June, from 1st up to the 30. Sorta catastrophic especially for a small channel, so to at least remind humanity about my existence, I'll schedule some smaller side videos that will also be based on this controller base. Enjoy the ride and remember, if you can thing of a mechanic, Godot is capable of implementing it!)
00:00 MVC overview 02:13 State machine overview 03:26 Main Cycle 05:21 Point of the video 07:05 What changed from 4th episodeHow to become 3d assets animator in 3 hoursFair Fight2024-05-17 | 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 creation of 3d animations takes weeks if not years, but one good soul opened my eyes on this subject and I want to spread the word now). Specifically, this video is an instruction of how to become able to produce somewhat plausible animations after several hours of training. My software is mainly Blender, Mixamo rigging tool and addon and I also will say a couple of words about Godot editor and skeletons.
The whole work is kinda a compilation of wisdom of other people, so here's a bunch of useful links:
REMEMBER YOU ARE PROHIBITED FROM CLICKING ON THEM BEFORE YOUR POSING ROUTINE!
Wade Neistadts video about workflows, because workflows and pipelines are the most important things in the world: youtube.com/watch?v=GMTet6nd_iM The channel is my favourite in general, but mainly Maya content and my poor ass uses blender, so only theory from them.Dealing with Godots root motion bullshit once and for allFair Fight2024-05-06 | 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 motion algorithms to achieve deep understanding of what is going on when skeleton animation is being played. Then I'll suggest a nuclear solution for all root motion problems for all eternity, that is suitable both for classical Godot's logic-inside-animations approach and for my beloved decoupling of model and presentation.
00:00 What went wrong 02:07 Review of bad ways to fix root motion 04:40 What is the real cause of all this 06:24 Despair and insight 07:57 Nuclear solutionAAA combat interactions for your Godot gameFair Fight2024-05-03 | 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 built with 50 events is hardly ever can be debugged and/or scaled properly. Today we'll find a way to design things without unnecessary events. Our test mechanics of choice will be melee hit, of course, reaction to it in a form of damage and stagger (and poise, of course, auto-done). Then we'll touch two-way reaction processing in the form of parrying, to lay ground to any possible two-entity interactions like grabs, complex blocks and what have you. And then we'll polish it all with another layer of logic containing character resources like hit-points and stamina, to add stakes to our hits and parries. The result is a small combat system that is built not to demonstrate the results and discard them, but to be prepared for future growth. And of course it's built almost with a GDscript, without fancy visual stuff, with an exception of one mind-blowing animations trick).
00:00 What we achieve 00:30 How to interact properly? 02:18 How to deal with parameters? 04:36 Weapon hit implementation 07:13 From theory to examples 08:02 Character resources 11:43 Debts: stagger "combo node" 12:26 BUGS, IGNORE THE CHAPTER AND READ COMMENTS PLEASE 14:27 How to scale 15:05 basic riposte
code available): github.com/Gab-ani/Godot_Universal-Controller-tutorial/tree/episode-4-intermediate-interactionsHow to build AAA combat under 15 minutes in GodotFair Fight2024-04-26 | 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 for new attacks creation to be not much harder than adding a new animation onto skeleton. It's also weakly coupled enough for different attacks to have editor-controllable, slottable transition logic addons that can be put onto existing attacks without their main logic rewriting. Godot 4 is powerful enough to support 3d games with all those fancy combat stances, parries, blocks and aerial combinations with minimum code, all you need is just to embrace proper nodes usage. We are getting dangerously close to creation of ultimate character core, but even the best core can crumble during interactions with outer world. Adding colliders to your weapons and trying to hit something or to be hit in return bears a risk of quickly turning your character into a signal clew. In the next and probably the last episode we'll add a couple of character resources such as health and stamina and create several usages for them, such as attacking and being attacked.
00:00 preparing assets 00:59 becoming time aware 01:51 midair 03:48 critical movement design flaw and solution 05:19 landings ans jumpless fall 06:15 combat system design 10:44 weapon creation 11 : 31 melee hits and combos logic 12:19 adjusting to pass The Scale exam 13:58 performance inspection 14:50 camera
Renewed transition table: docs.google.com/spreadsheets/d/1g3Epn-2Rf-fAI8XPp9UfOkeH6QwFUIz8fWFDrPdhe40/edit?usp=sharingBuild your Godot characters like AAA titles do | Part 2Fair Fight2024-04-19 | 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 doesn't help either. This video main goal is to show you a way to think of an animated character from an architectural perspective. Today's episode contains a lot of theory and Godot specific lifehacks and lays ground for a third one. Watch closely, because in the next episode we'll be able to suddenly create a studio-looking jump and a combat system from zero using these approaches. For now, our 3d character transforms from a walking capsule to a walking humanoid with almost unchanged controller.
00:00 Intro 00:36 What we are trying to fix 01:40 What is an imported character? 02:25 The fall of MVC 02:50 The rise of true king PAC 04:12 Avoid workflow trap 05:06 Do this instead 06:56 Jump action 08:07 State machine organization 09:08 Use templates, people 09:47 Intermediate transitions intro 10:27 Animations and how to not use them 11:18 Base 12:12 Animations and how to use them
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 the noodle code even developer soon fails to understand. The only thing that this approach could lead is fast prototyping, and prototypes always fail when it comes to proper scaling and/or reusing. This is the introduction to two large cycles on this channel, first is building a proper character controller with full Godot's potential, and the second being a series of essays on some developed practices I find... questionable at best.How to show something always on top | Godot 4Fair Fight2024-04-02 | Camera lock on target marker, text nametags for game characters, flying damage numbers. Similar subjects, but different implementations.
Godot's hot material switching lagspike: youtube.com/watch?v=Cg4ZT6X0ghsSoulslike 3D Controller and Camera in Godot 4 | Part II: Target LockingFair Fight2024-03-26 | 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 04:35 TargetableAspect node 05:24 Circular movement correction 05:58 Locked camera update code 06:47 Target droping and final clearing 07:15 Pipelines of further modificationsSoulslike 3D Controller and Camera in Godot 4 | Part IFair Fight2024-03-24 | 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