after reading this incredible article, im still left with the question..."but, HOW?!"
More of these please! I need some good beginner tutorial!
ahahahah Luke hahaha comment of the day !
Anton Gonzalez and Andrew McLennan-Murray talked about animation, VFX, controls and enemy Ai in their new Dark Souls-inspired game Dungeonhaven.
The animation was one of our bigger challenges. Players are extremely sensitive to bad animations or attack timings, so this took a lot of player testing to get right. Unreal has an insanely robust animation system which helped us make the most of the motion captures we were using. There are so many features in Unreal Engine’s animation system we’re still learning to make the most of them. Andrew set up a cool system using a combination of animation graphs and montages which allows us to control very precisely when the player can transition between animations or when they have to recover from attacks.
This made it easy for us to tweak the timings and combine the moves into a combo so they work well together. We’ve set up light and heavy combos and weapon switching when you trigger advanced weapon mode. Also, you have to keep in mind that you should be really careful with skeletal meshes and make sure you set them up in a right way, so you don’t end up retargeting all the animations and can reuse them as much as possible. The thankfully Unreal Engine provides really cool tools for that too.
One thing we’ve learned is that state machines can start to complicate gameplay development as they become more complex, so we’ve been leveraging montages more recently. The recent Unreal live streams on animation have been helpful.
The blood was probably one of the most fun things to work on. There are some things in the project where artist and programmer have to work pretty closely together and the blood was definitely one of them. We use a combination of decals, particle effects, and material masking to produce the full blood effect. When a character takes damage, blood particles fly out of the wounds, and wherever they land they place a decal. At the same time, we’re keeping track of how much damage the player has dealt in the last few seconds, and based on that info we tweak the mask opacity on a special material Anton made to have the character appear to be covered in blood.
We were able to take quite a few assets from unreal engine demo scenes or marketplace and spend some time modifying them in a way to make sense in our setting. Ofc we had to come up with some unique effects here and there, doing it from scratch or combining some of the effects we already had together in some different way. In almost all cases just taking something purchased online and putting it straight into the game doesn’t quite work, because there’s usually something missing or the quality is too low, but it gives you a good base and with some tweaking, you can make it look just like you want it to be. Thankfully cascade makes is fairly easy to do. Though I’m really waiting for Niagara to finally show up in 4.20.
As for the smokey guys we took the character enemy’s mesh we already have and changed it with “smokey” refractive shader I made using some masks panning in Unreal Engine and combined it with smoke particle effects that are emitted from the character mesh itself. Also, they explode into a dust of smoke every time they teleport or die. Ideally, I’d prefer to havan e entirely new model for that, but we didn’t have time for it, but I quite like the result we came up with.
It was important to us to find the right balance between making the controls very responsive but also punish the player for committing to an attack at the wrong moment. We’ve seen a lot of games go overboard on the punishment, and this can make combat feel clunky and perhaps unfair. At the same time, not forcing a player to commit to any attacks leads to a very hack n’ slash feeling, and we were going for something more deliberate than that. In the end, it came down to a lot of trial and error and having players who play a lot of melee combat games give us feedback. The abilities we have also come into play here. For example, the player starts the game with the ability to turn to stone, even during any attack animation. There’s a very small timing window where you can initiate an attack and still hit an enemy while we’re transforming into stone and becoming invulnerable. Timing this correctly is very satisfying. If you stay in stone form too long, though, enemies will group up around you and there’s no way you’ll survive. We also made some mobility options for the player, a dash move and a roll. They each have slightly different uses, timings, stamina costs and invulnerability frames. This gives the player some options to help them survive the vicious world we’ve created.
Much like we did for the player, we made precise controls for the enemy animations. We needed to be able to tweak the timings so that players had just enough time to react. I won’t spoil too much, but each enemy’s AI uses a few factors to decide which attacks to engage. Each enemy has at least one special move, it might be an uninterruptable attack, or for example, the shadow knights have a teleport move. Players will have to learn how to deal with these tactics. One thing that’s most important is we want the player to know it’s absolutely their fault if they die. The enemies are tough but fair and predictable. The players biggest enemy is often their own patience.