[Music] a quick intro uh my name is ian caffino i am one of the co-founders of afterburner studios and on dreamscaper i was responsible for design animation uh vfx and ui among you know the 100 other things that you had to deal with as an indie so i've been in games for about 10 years now before that i had a background in graphic design motion graphics and film i shipped aaa titles a double a title and now a successful combat focused indie game so how did i get here almost four years ago now back in the summer of 2018 i took a big gamble i left my job in more traditional development and started a studio with two friends paul smibota and robert taylor this is us in a dreamhack in 2019 so fast forward and after three years of uh development and many iterative
releases we launched dreamscaper 1.0 on august 5th 2021 on both pc and switch so you may have also seen it pop up last month on xbox and game pass which is really exciting for us since launch we've had over a quarter of a million players which sounds insane to say uh and today it sits at a 91 positive rating uh on steam with over 1800 reviews which is very cool so quickly for those who are less familiar with the game dreamscaper is an action roguelike with a waking dreaming gameplay cycle by day you experience cassidy's waking life exploring red haven meeting new people forming relationships by night you face off against cassie's nightmares in a rogue-like dream loop so what you're seeing here is a snippet of combat you know something you might uh encounter is typical in the middle of a run i wanted to make sure to leave them broken so you guys can get a sense of what it's like to kind of clear a room of enemies and the flow and pacing of
combat so this talk is going to be broken up into three sections design feel and keys to success i want this to be an actionable crash course for everyone so here's what i hope you get out of the talk in design and understanding of some of the key areas to focus on when making a combat system as a developer with limited resources in feel some of the best practices for creating visceral and satisfying combat that helped us refine our game feel and finally in keys to success personal takeaways that i had that might help maximize efficiency on a small team all right let's jump in i'd like to start by going over some design considerations that can help us establish a solid foundation for you to build your combat system from first up is establishing strong pillars so as you're all familiar with it's incredibly important to define what your player
experience will feel like and it and translate that into an actionable target to aim for so i want to focus on how you can create the most effective pillars for combat so find the right level of specificity the player should feel powerful is a pretty traditional goal so how can you adapt that and evolve it for the player experience that you want when you're creating your pillars drill down one level of specificity so that the player should feel powerful can become the player should feel highly skilled or the player should feel godlike that players should feel like an assassin or a commander so you can already see how under the umbrella of power fantasy there's a massive area to work with it both a commander and an assassin are very powerful figures but they exhibit that power in very different ways so a pillar that is too general will create misalignment as a target area will be too wide inversely a pillar that is too specific won't leave a lot of room for flexibility so you have to decide what
makes the most sense for your team and your goals so you can nail that appropriate target area so for dreamscaper i knew i wanted to create a combat system that had to be approached strategically but allowed for a lot of flexibility and a high skill cap due to its roguelike nature uh it was also important that the systems allowed for variety and replayability so i'm going to list out the pillars with a brief description of each uh and we'll come back to these throughout the talk to see how they helped guide our development first and foremost is purposeful action it's important that the player feel that their actions have consequences players need to understand their strategic options and tactically assess each situation on the fly to take deliberate action improvisational combat should feel fluid and allow room for player freedom multiple approaches to a situation can work and adaptation on the fly is encouraged tough but fair players need to feel that their fate is in their hands more so than the gods of roguelike rng this means careful consideration of how
enemies behave balancing and immediately responsive player actions that allow room for correction when mistakes are made dynamic interactions to complement our structural choice of a roguelike uh combat should feel highly dynamic many elements and systems need to overlap to create unique situations and solutions this is where we can bring replayability in at the core level and then strong feedback uh actions should have weight through sound visual effects and uh audio and animation sorry sound visual effects and animation uh players should feel uh know how they impacted the world and enjoy the stimuli which is the classic you know make it feel good so as you can see these pillars were quite high level uh but they had enough specificity so we could align around what we wanted to achieve it wasn't necessary for a pillar to be specifically about the power fantasy because that would come naturally while achieving these other pillars
so to the meat of it your players options when we talk about this generally we talk in terms of verbs what can your player do run jump shoot swim so these actions will become the building blocks for your combat system options create depth but also complexity it's important to be mindful of your player's cognitive load the more options a player has at a given time the more mental juggling they'll have to do because our core pillars included improvisational and dynamic interactions we had to make sure to support enough options that allowed for a high level of depth and flexibility with that of course comes complexity so that's why you should always consider who your core audience is what level of complexity is appropriate for them for us we were targeting a mid to hardcore market we knew that these types of players generally had familiarity with both roguelike systems and melee combat systems so we knew that we could push complexity fairly safely without overwhelming our core audience if you're avoiding complexity can you
achieve depth through further exploration of fewer options in our case we achieve more depth in combat with a high variety of swappable weapons and abilities that would interact with each other this filled our goal of creating dynamic interactions while allowing players to become experts of the fundamentals of the game through experimentation with different loadouts for example a player always had their melee attack combo and an alternative attack that set enemies into one of three states which we'll talk about that meant that players always they knew they had those options regardless of which weapon they had so adaptation to new weapons gave the system a feeling of depth with very little ad complexity which was important considering how many fundamental options the player has in dreamscaper so consider your pillars how do these options move you towards your design target in dreamscaper we had a lot of attack options like i mentioned uh two types of melee attacks ranged attack two magic attacks uh this spread was important to make sure the player felt they had flexibility in how they approach combat additionally each of these attacks leverage layered systems we're going to talk about that created
satisfying interactions between each other finally with these options players felt that they had enough of an arsenal that they could take thought out actions in any given moment and they didn't have to approach combat the same way each time so how do your pillars inform how the option is implemented as an example we designed our dodge to have immediate invincibility and be fairly generous in length it felt more improvisational and it felt more fair if players could break out of actions and save themselves from a tough situation and finally consider your scope can you achieve your quality bar for this option given the resources you have are you trying to support too many options given the resources you have as another example we set a stake in the ground early on that jumping wouldn't be one of our verbs for our team jumping in combat would have greatly blown scope now all those previous actions like your melee attack your alt attack your range attack your magic attack could potentially be accessible while jumping so outside of combat there were also you know traversal considerations and
considerations on art design and engineering so at the end of the day jumping didn't move us in a meaningful way towards our pillars as at least as much as some of the other options that we were exploring so ultimately player options will make up that core of your combat system so plan to spend some time uh iterating and refining on the basics of your system before starting to add additional layers so let's talk about camera and framing because it's a critical part of the combat experience that when done right is mostly undetectable but when done wrong it can have a really huge impact on player experience and it also happens to be one of the very first things that players will pick up on when they're playing the game so camera is a huge driver for genre make sure to think about what that communicates to your player when you think of real-time strategy what game comes to mind your player will also carry those notions of genre convention into the game with them as an example from dreamscaper because our camera is relatively static far back
and top down players expected a certain speed and snappiness to the combat that mirrored other similarly framed games distance interactivity and scope so a player controlled closer camera which is very common in a third person action game will add more weight and impact but it will require much higher fidelity the camera is closer to the action also it's important to note that they require a higher degree of iteration players hate nothing more than having to wrangle a frustrating camera that just won't frame action properly so farther cameras on the other hand reduce the weight and impact and they feel less cinematic but the macro view provides the player with more information additionally if a player is not controlling the camera now there's a ton of variables that you just don't have to deal with equally important is that a further fixed camera removes the need for fidelity as well since more fine details will get lost at a further distance so as you're thinking about what camera might be right for your pillars also think about how the camera will impact scope okay now that it's said uh there are a
ton of uh examples that do the complete opposite of it and very successfully but in general the closer your camera is and the more interactive your camera is the higher the scope is going to be so in dreamscaper like i was saying we used a fixed var camera during combat interestingly this reduced the impact of player feedback which went against one of our goals but going into the project we knew that we had to cut scope in some areas and using a distant fixed camera would be much more achievable for our team to mitigate that we arrived at a hybrid solution we put a lot of time into the dynamic framing of the player and enemies this was important to both the pillars purposeful action tough but fair players had an almost complete view of the battlefield at all times which gave them the necessary information that they needed to make an informed combat decision when players had a cluster of enemies around them the camera could pull in to emphasize the immediacy of combat
so ultimately we had to move away from one of our goals in order to stay within scope but it moved us closer toward two of our other pillars this happened a lot in the project the reality is not every decision you make is going to move you towards all your goals at once so we ended up focusing instead on other ways that we could achieve our strong feedback pillar which we'll discuss in the field section so i'd also like to talk about how we stacked systems to create richer feeling combat one thing we found effective was giving ourselves the design space to let systems grow organically over the project this working style allowed for three things it kept scope low so many of our interlinking systems were designed and implemented at various stages of the project we didn't have to have all the answers right from the outset because we didn't have to do everything at once we created contained portions of work that felt manageable over the course of development features could be more easily analyzed as additive pieces rather than a
component of the of a hole that would be uh that would suffer if stripped away iterative testing so building in this way allowed us to fully vet combat earlier with continuous user feedback so there was a much lower risk in losing a lot of time to a feature that we kind of worked in the dark on only to find out that it just wasn't working it needed to be cut and finally it allowed ideas to soak so having time to sit with the current system and re-evaluate before committing to a new layer allowed us to hone in on effective ideas simply because we had so much exposure to the already working pieces so how do you add depth with less complexity as an example in the middle of the project we had a very solid foundation in place we had released into early access and we had a community of players who were providing us with feedback and data one thing that we felt that we hadn't delivered on though was that pillar of dynamic interactions we had some combat systems in place such as an item modifier system and a status effect system but they felt incomplete at the
same time we were also mindful of overloading our players with too many options so our solution was to later on an elemental system assigning elements to items and that elemental system linked into the status effect system so fire to damage over time ice rose enemies water slowed enemies down like pretty standard stuff but we elevated that uh now that we had these pieces speaking to each other by uh encouraging the mixing of elemental attacks on the same enemy by rewarding the player with an automatic critical hit that did double damage so then we went and built on that system by creating a set of passive items that would boost things like your multiplier to critical hits or the strength of elemental status effects so it's important to note though that these systems that we built like you know you're seeing this at the end of the project this was done over the course of many many many months the result was higher player engagement the feedback we received from our community was very positive and it added a multiplicative layer of depth to the game without actually modifying the underlying options each option just had added ways of interacting with each other
and best of all for a team of our size it was really manageable we didn't have to balloon scope going super wide on content creation we could focus on systems that would leverage what we already had so we would continue to use this approach in all areas of the game we layered on a fairly robust meta progression system towards the end of development that greatly improved the stickiness of the game which was reflected in a a large increase in average playtime that wasn't even something really we were considering doing uh at the start of the project or even in the middle of a project it really came in at the end but we gave ourselves that flexibility in our early designs to add those layers down the road um so enemies there is uh far more than enough to say on any design that could be its own talk by much more qualified people so i'm gonna focus instead on a high impact area that is often overlooked in uh indie titles that has a major effect on your overall design and that is hit reactions and enemy states so why design elaborate enemy states that and devote resources to
creating hit reactions aside from increasing interactivity as the player has more ways to impact the enemy they also provide really critical utility during combat how you want your enemies to respond to your player's input becomes the building blocks for the structure and the pacing of combat so let's walk through some enemy hit states we use in dreamscaper so first up uh stun stagger stun is you know your default state it has a weaker hit that will temporarily set the uh enemy off balance stagger being a heightened version of that it helps with target prioritization enemies take longer to recover from hits and it also helps sell the weight the the difference in weight between different strikes flyback is a very strong reaction that sells big impact this is a really important state for combat pacing ending chains with flyback puts space between the player and the enemy which resets the offensive situation it forces them to reapproach it from another angle uh papa so a pop-up aside from demonstrating you know the
vertical strength of a hit it also sets the enemy into a juggle state this is really great to encourage players to take offensive action if you're finding your player is playing too defensively something like this is great because it encourages them to press their advantage when they know that the enemy is not going to be able to react uh knockdown state that doesn't allow the same leeway uh with juggling and it doesn't put the enemy as far away so it uh there's quicker counter counter attacks and follow-ups that you can do it also helps with shifting focus between enemies and of course it emphasizes the downward strength of the hit so as another example of layering systems after we created our base hit states we added additional utility to key hit states with flyback enemies in the way would take damage when uh the hit enemy would collide with them and push them out of the way and when the hit enemy would collide with the wall they would also take uh additional damage and rebound for pop-up each hit that juggled the enemy would increase the
damage that they received when they made contact with the ground and then finally for uh knockdown enemies in the surrounding area would receive splash damage and they get pushed aside so all this added extra utility and depth to our hit reaction system without adding too much more complexity for the player in reality this can be a large amount of work but the payoff for the player is really high for us despite our constraints on animation i was the sole animator on the project and on engineering rob was our sole engineer we made time to invest and hit reactions they were critical to almost all of our pillars as they affected each of them in different ways so with that in mind let's go through some high level considerations for your states so how does the enemy change state based on my attacks does one reaction contain multiple states do any states loop if an enemy is hit within a specific state what happens so you work through the state machine and figure out how these interactions will work for your system this can add a lot of work on game play
and gameplay programming and animation so stage can be as simple as like a light hit or a heavy hit the reason we ended up with so many states in dreamscaper is to allow for player improvisation and of course because it creates that really visceral feedback that we wanted can my player interrupt actions when and why how long does it take for an enemy to recover from a light attack a heavy attack special attack recovery timings will be largely driven by the speed and pacing of your combat so should my player be able to stun lock an enemy this uh control via enemy hit states was really important for dreamscaper as it meant players had to adapt on the fly and properly stun and stagger enemies to deal with larger groups this greatly assisted with target prioritization which encouraged purposeful player action because players had to learn how to manage the enemies around them and then finally for challenge uh how are these state considerations augmented by increased challenge do different enemies have different responses based on enemy power or game progression or player power in dreamscaper we used
different hit states to challenge the player many early game enemies could be stunned indefinitely and as the player progressed later enemies could only be staggered and eventually they might be immune to a specific hit state altogether so hit reactions not only sell the impact of a hit but they also add a functional layer of depth to your combat system in the next section i'm going to talk more about what you can do to maximize that feeling of a hit reaction speaking of which this section is going to go over a variety of areas that we focused on in dreamscaper to make sure combat was as satisfying as possible for our players first of which being responsiveness so the shortest time from a player's input to the corresponding effect on screen will feel the most responsive that said there is a balance uh balancing act between a fidelity of action and immediacy of response for a title like ours with limited resources we prioritized snappy game feel over fidelity
uh input latency that's another thing uh it's important to be mindful of uh we often take it for granted on switch our engineer rob found that there was native input latency due to how ue4's game thread would sync with the trender thread please don't ask me about that that's all i know about that so far so this resulted in a fairly high input latency uh about 130 milliseconds which is like eight frames at 60fps it's a lot so rob cut the input latency almost in half by using a low latency frame syncing option so for things like dodging and parrying that split second reaction is really really critical to the player so we went as far as increasing the input window on parrying on switch so it would feel on par with pc in terms of responsiveness we were less concerned about having a mechanical difference between the two platforms as much as we were concerned with them both feeling appropriate feeling right for the player blend times for animations so shorter blend times will feel more responsive especially with attacks
longer blend times need higher fidelity animations to sell the weight of the blend and blend times that are too long risk feeling sluggish and unresponsive so for dreamscaper we go as far as making attack startup lens instant but we have anticipation follow-through and recovery to give actions weight in the example up here you can see we're jumping right into the anticipation pose of the attack this will help it feel responsive while still allowing for those starter frames to play through allowing you to balance and make sure the attack feels believable locomotion response longer acceleration periods will lend more weight to your movement but feel less responsive as a lower fidelity title our movement has almost no acceleration period we wanted it to feel as responsive as possible and we really didn't want to over commit on animation for things like weight shifting or changes in direction and we favored player input we let players interrupt actions so we came up with a hierarchy of inputs
to determine how interrupts should work dodge and block were critical to have very low response time and high interrupt capability so we allow players to break out of almost any action with a defensive response this keeps combat feeling tough but fair because players have the maximum control of their defensive options in order to react to challenges and improvise as needed on the flip side attacks had both startup and recovery so players still had to think purposefully about the offensive actions that they were taking so it wouldn't be a talk about combat without talking about animation because uh animation and feel are so tightly coupled together so i'm going to go through some best practices for us first of which being leveraging the principles of animation quickly if you're not familiar with it it was a book that was written in the 80s by some disney animators that cataloged work from the 30s up kind of codifying what these principles of animation would be for animators
so as a sole animator i didn't have the time to create very high fidelity animation so instead i use my understanding of animation principles to try to create a higher quality feeling without the scope complexity of the fidelity so i'm going to run through this at a very very high level and touch on elements that i felt were most important to dreamscaper is asset creation first up is anticipation and follow through they're two of the most important principles to convey weight which will make your combat feel really meaty this will help actions feel like they have intuitive timing as they will follow more realistic physics you can see the example here is really exaggerated but it's that exaggeration that actually gives the animation the feeling of believability and of strength secondary and overlapping action we use secondary and overlapping action to sell realism and fidelity animations that properly utilize overlapping action will feel higher quality the human eye is really really good at uh intuitively picking up discrepancies
in natural movement and one of the most egregious things is having too many elements that are completely in sync with each other it feels unnatural and stiff and robotic one simple thing you can do to help increase the fidelity of animation is adding trailing elements to the character so things like scarves claws hair are really effective for this we added a kind of a trailing floaty scarf to our main character cassidy it gave a nice sense of secondary motion and we simmed it so it was very little at its scope for us uh slow in and slow out slow in and out is a principle uh that increases the believability of animations by providing more realistic momentum and inertia remember going back to us being highly sensitive to motion easing in and out is important to convey a believable weight of an action and then finally exaggeration and strong posing you'll have to exaggerate actions a lot more than you initially anticipate especially at smaller screen sizes you can get away with a lot in terms of
fidelity if the poses captured are strong especially for fast combat players need to be able to register action that's often obscured by many things like hit effects and screen shake so an exaggerated pose will stand out much more for players to be able to read at a glance so i highly encourage if you couldn't tell anyone that is unfamiliar with uh this to look into the 12 principles of animation for a much richer explanation uh if there's one place to spend a lot of time as a combat focus indie it's this because your combat is going to live and die with the quality of your animation sorry live or die with the quality of your animations uh and that has nothing to do with it with the detail of the animation itself these principles can be applied to animation of all fidelity so even if you're on the design side or on the engineering side uh it's valuable to develop a vocabulary on why something is or isn't working to align everyone on what is you know good
solid combat feel so adding four momentum to attacks will help them to connect more easily coming up we're going to talk about other ways that you can help player attacks connect but one thing to be mindful of is that baking a certain amount of translation right into the animation will help any additive procedural translation feel much more natural so players are more likely to miss an attack that doesn't move them towards their target and a misattack in that way is uh player error but it's often a source of frustration at the system because the output does not match their intention let's talk a bit about enemy animation so if you're a single player title or creating ai um it's important to think about enemy animation differently than player for players our goal is to make the output of their action as satisfying as possible for enemies our goal is to make the output of their action as readable as possible by players this leads us to telegraphing enemy intention telegraphing doesn't necessarily mean long attack wind-ups as much as it means
clear attack wind-ups it gives the player the ability to read and learn enemy attack patterns so the characteristics of good telegraphing are clear poses exaggerated poses will create the bookmark in a player's mind that they need to remember the purpose hierarchy and timing of an attack strong anticipation you know once again leveraging those principles we talked about giving an attack startup frames is just is not enough it needs to follow natural physical motion at higher difficulties this can be used to subvert player expectation uh catching players with faints and variations in speed and timing and if you've been playing any elder ring you know how incredibly tricky it can get so sound indication uh sound cues before attacks are really critical to giving players another piece of the pattern to latch on to they become especially valuable for off-screen enemies and obscured enemies visual effects offered as a complement to the animation itself and within reason you'd be mindful of creating too much visual
noise on the screen and then making something less readable and finally proper hierarchy so this means that there are three different enemies on the screen and they're doing three different attacks at the same time it needs to be clear to the player which is most dangerous this can be really challenging but it will help them prioritize their focus for dreamscaper we use telegraphing to make uh sure that players can take purposeful action by providing them with the needed information to make an informed choice in combat ultimately it keeps combat feeling fair as players realize they had the information they needed to avoid a mistake and then finally recovery timing build enemy recovery time right into the animation when recovery time is baked in it will feel much more natural and fluid clear recoveries can help players gauge how much time they have before an enemy can attack again so we talked in the design portion about hit reactions and how critical they are to polish combat so let's walk through some ways we created really satisfying hit reactions in dreamscaper
so instant reaction we avoided blending into a reaction we found that reactions uh will feel much stronger if they instantly play when an attack connects the player will fill in the missing gap uh between the previous state and the hit state in their own mind which will create this impression of a very powerful impulse this sort of thing of course works best at lower fidelity uh with our far camera we need to emphasize hits with big deltas between the poses a closer camera might need a more moderate approach it might need some degree of blending so it doesn't feel too awkward or unnatural we also jump right into the middle of a hit reaction this ensures that the delta between the previous state and the hit state can really be felt and you don't need blending because the hit itself creates a natural transition between the enemy's previous state and their current state in fact you'd be surprised how much you can get away with if you don't have
resources or time to do reactions from the front and the back and the sides rotate the enemy towards the player at the moment of hit and it'll feel a lot more natural for that hit reaction to play than you might think so on paper then hit reactions cell strength this may seem obvious but it's important to note that the perception of strength of the player's actions will live and die with the scale of the impact a strong straight punch might send an enemy reeling but it could also launch them 30 feet back we used hit reactions to communicate the variety of attack power and then with the above example it might make sense for a small enemy to fly back after a straight punch but a large enemy might only be slightly knocked off balance once again utilizing believable motion physics to convey weight and impact here's an example where the same attack affects enemies differently so in order to fulfill our pillar of dynamic interactions we needed to introduce variety we found that enemies
when they have varied reactions to your attacks the system as a whole will feel much more responsive and interactive and it's just a lot more fun so let's also talk about some ways that you can create an invisible guiding hand that will assist your player and make sure that the output of the system is as close as possible to their intention aim assist in dreamscaper we utilize both a melee aim assist and arranged aim assist the goal here is to balance challenge while rewarding player intention if a player wants to attack an enemy but is slightly off target we correct for that because it just feels better it's more fun for those hits to connect with melee aim assist many titles not only rotate the player towards the enemy but they also translate them which we're going to talk about in a second um you can see we're fairly generous uh with it you can see the the amount of leeway that we give players before things start to snap into place for accessibility purposes i'd also highly recommend that you allow these to be configurable many players might
prefer or need a stronger aim assist to enjoy your title this is quite common in action uh titles you know magnetism uh so during the startup of attack the player will automatically translate to an enemy range to make sure it hit connects you'll see the most extreme examples of these and things like spider-man and arkham series and shadow of mordor for dreamscaper we chose a different option because of our purposeful action pillar we wanted players to be to carefully consider positioning so instead of magnetizing the player to the enemy we had data-driven hit translation system on a per attack basis we scaled the natural root motion of the hit reaction to translate the enemy away or towards the player by a specified amount of units so this had two purposes one is of course to add or reduce the impact on a per hit basis without exploding animation budget having to animate different distances of hit reactions uh the other purpose but its
primary purpose is to set the enemy up at the appropriate distance for the player for a clean follow-up attack during a combo this sort of thing was important to align player intention with the result while not sacrificing too much on the core experience that we wanted to provide them and then input buffering we provide very generous input windows in dreamscaper players have fairly long periods of time to chain combos out of chain combos during an attack or attack out of a dodge we register early inputs and buffer that into the next action when the system is ready for uh for those inputs so the player doesn't feel like their inputs are getting dropped on the flip side we are also careful about uh making sure that a player who's matching their inputs aren't over registered like that's another source of frustration at the system so we provide assistance as well by modifying hitboxes and hurt boxes in a variety of ways that are beneficial to the player
you can see here how the hit like doesn't even connect but we're okay with that because we're prioritizing feel over fidelity so along with the basics like giving player attacks really generous hitboxes and enemies precise hitboxes we also have multiple hitboxes that we offer per attack so for example on our projectiles we have separate enemy collision environment collision and breakable object collision we can make enemy collision quite generous for the player while ensuring that projectiles don't get caught on environmental obstacles it just it doesn't feel very fun game feel game feel is really the culmination of so many components many of which we discussed so in this section i want to focus on some additive elements that you can implement that will improve the intangible sensation that a game just feels right this can be this was especially important for us we wanted to satisfy our pillars providing strong feedback that i said we'd come back to so here is an attack without any of its visual registration components of course
it looks like nothing is happening so if we add a hip flash complement to all the other impact related effects highlighting the affected character within tension grabbing flash of color we'll emphasize the impact we also i threw in some damage numbers here as well the more information in this way that you can give to the player the stronger that feedback will be as long as it's not overwhelming then let's also layer in those hit reactions we talked about you can see here for such a strong uh swing an equally extreme reaction is warranted to dial in the effect we are also adding that data-driven hit translation that we talked about which can really emphasize or de-emphasize the hit the strength of a hit as necessary hit stop and time dilation so hit stop was first popularized with fighting games the most common form of hit stop is when action freezes for a few frames at the moment when an attack connects this has been widely adopted by many single player games as well because it helps emphasize the weight and strength of an attack at the moment of impact
with that really clear pose we use a simple hit stop that only applies for player attacks we freeze the attacker and hit character at the moment of impact for about 115 milliseconds like seven frames uh we found that it was the least disruptive to freeze just the characters while allowing uh visual components and uh camera other polish elements to continue to play during that period we also use an authored curve to ease in and out of that hit stop we experimented early on with stopping everything dead but we found it less disruptive and more fluid to be careful about that transition in and out of hit stop so when creating that hit stop system it also comes with an added benefit we made sure to extend its utility to allow adjustment of game speed on the fly so this allowed us to do like time slowing for things like the anticipation of attacks or during dodges and hit effects this is a really critical component to selling that hit that corresponding visual
effect this topic again just like the enemy stuff is its own talk but the key consideration within the framework of enhancing game feel is uh carefully considering the relationship between the visualization of the hit and the attack itself a natural link between the power type and style of attack with a corresponding visual reaction will enhance the feeling of responsiveness critical to satisfying game feel another common practice is screen shake during the hits and animations in an additive way to sell impact and weight we utilize different classifications of attacks we talked about those before like our stun our stagger knockdown to apply corresponding screen shake we also differentiate enemy uh player impacts and uh enemy impacts for more flexibility in applying appropriate camera shake for example if a player is hit by an enemy they're very rarely expecting it because if they were expecting it they probably would have dodged the attack so when hit occurs the camera shake
feels especially disruptive to them so our rule of thumb was that shake applied to the player should be much less than any applied to an enemy and then force feedback it's a really powerful tool that you have in your arsenal to connect the player with the game response in almost all instances we play screen shake we also play a force feedback so if you're supporting gamepad or even a percentage of your users are on gamepad it's worthwhile to invest some time into force feedback as well and then really beefy sounds so sound design and combat is often the x factor and whether a hit feels juicy or not often times when a player is not able to communicate properly why combat feels off to them a lack of gravity and sound design can be at fault because there's an intuitive link between the sound of an impact and the impact itself so missing uh that stimulus will sound like will cause the whole experience to suffer
pay careful attention to the strength depth and application of your sounds tinny light sounds without proper body will actively detract from the impact of an attack as well and a procedural enemy shape so here you can see a larger enemy that we don't want the player to be able to unlock a simple procedural shake applied on a root or a specific bone in the silicon can reinforce the impact of an attack we implemented this in dreamscaper with larger enemies like bosses in mind as they lacked the exaggerated hit reactions of smaller enemies since we wanted to make sure to keep the challenge level up for players so let's add a procedural shake so we adapted a simplified version of the practice of applying procedural shake to specific bones with directional impulses when they're affected by an attack which was just out of scope for us on this project instead we apply shake on the root of the enemy specifically to the yaw and the x and y axes see that's not
actually playing sorry about that um but yeah it's just a small uh shake to on the root of the enemy so this helps reinforce uh play that the player is actually physically affecting the enemy they're attacking uh even if the enemy is not providing a massive hit reaction um and then one closing thought about all these enhancements uh while they're important to improving the overall game feel of your title you should always allow for some degree of personalization it's important to allow the player at a minimum to turn these off and ideally adjust them to their desired level especially for things like controller feedback and screen shake it's a simple way to make sure that the game is as accessible as possible to as many people as possible okay so i'm also going to go through uh in this section keys to success some of the learnings that i had on this project that i'll be carrying forward to the next project hopefully that can is valuable to you guys so being ruthless with scope i mean this is a common one but it's important we
were ambitious but because we had experience on other projects we could tell to some degree when we were biting off more than we could chew uh it was a pretty delicate balance but what i found most helpful was giving myself a little mental distance from the project i worked to compartmentalize a bit and view a scope of a feature through a more neutral lens and what i really mean by that is i was trying to divorce my personal attachment and my the value that i was giving to a feature from the value that a player might give to the feature oftentimes we found that there were ways to trim scope and retain the core of a feature other times we had to make the hard decision to cut something entirely but ultimately ultimately it made for a better game because we weren't too precious about it so i spent uh well speaking of focusing on a goal rather than a solution i spent quite a bit of time on dreamscaper designing a feature around uh chatting with characters that would function as a procedural minigame we hope the procedural nature of the minigame
would help complement the procedural nature of combat keeping non-combat interactions fresh for many hours especially considering the roguelike structure of the game and the repetition therein ultimately it was a complicated task that was a black hole of time resulting in a large amount of work or it could result in a large amount of work for our team especially at our size so despite many hours of work we cut the feature entirely in favor of a more simplified chatting system what we landed on was not the best solution but it was a solution that allowed us to de-risk the project to some degree we decided to focus on meta-progression as a way to keep the non-combat systems engaging which turned out to be incredibly valuable to all parts of the game and was much less of an unknown for us to develop and that way we were able to achieve our goal of keeping the non-combat systems engaging while working within scope because we weren't tied to that solution uh testing often and iterating cheaply so
one of the most important workflows that helped improve dreamscaper's combat was a feedback loop from players we began going wide with feedback as early as eight months as an example early in the project an alpha tester sent us a video of the game sped up by 25 he thought it just might be more fun like that so then after i put aside my panic in the sheer amount of work that that would entail uh i agreed that it just looked more fun so instead of making sweeping changes we went wanted to test the hypothesis as cheaply as possible so our engineer rob he put in a hack uh sped the whole game up by 25 i'm pretty sure it uh killed his soul a little bit because it broke a lot of things um but it allowed us to test what we needed to test so we immediately put up a test build for our players and asked them for their input the majority of feedback was really positive and we agreed as a team it was the right direction so then we moved forward with adjusting all the individual elements at the appropriate speeds separately the game was much better for it so there
are hundreds of stories like that throughout the development and i credit our community with doing a lot of work to help refine the feel of the game so consider bringing in outside perspectives early and set up a workflow that allows for a continuous feedback loop as you iterate on your title so throughout the project my goal was always to do things as efficiently as possible because i had to juggle multiple disciplines i often had to view my workflow through a very specific lens i was always looking for ways that i could put the smallest amount of time in for the largest result this boiled down to three things uh building on the learnings of others leveraging outside assets and utilizing workflows that prioritize my knowledge in many cases i made sure to see if someone else has already done the heavy lifting for instance all of dreamscaper's controller icons were purchased from an asset store i utilized a variety of vfx packs to help me get started in generating a specific effect or learning and then we
also purchase models that could be repurposed for props and things and then as you'd guess these are rarely used wholesale uh often they would be a learning tool or a building block to create something new as i want to make sure that the outside asset would conform with our styling in terms of tools rob and i took some time to develop a workflow that utilized ue4's sequencer system to spawn attacks dynamically while in combat if you're unfamiliar quickly sequencer is a cinematic tool and ue that allows you to place things on a timeline and spawn them in and play that sequence at any time during the game but we adapted that specifically to spawn these combat related things so this workflow became really important because it was fast immediately previewable and required very little coding emphasizing an artist-friendly approach for me so you can see in the example a visual timeline of an attack to be built but that sequence itself was abstracted so it could be repurposed and mixed and matched as necessary throughout the project on other attacks so remember if you're hitting a wall or feeling overwhelmed
someone has probably solved the problem you're approaching or a similar one what can you learn from them in terms of both solutions and workflows and i wouldn't be able to take on some of the new areas that i uh approached for this project without leveraging my own existing skill set when i started dreamscaper i had never done character animation before but i felt confident that i could tackle it and besides my own inflated ego uh the reason i felt confident is because i had a lot of experience in a tangential space so i was previously a motion graphics animator like i mentioned before working in both 2d and 3d so despite the lack of understanding of character animation i had animation fundamentals and tool exposure to make the transition smooth so when i talk about things like leveraging your existing skill set it's not about staying in your wheelhouse as much as it is about finding ways to expand out from your comfort zone successfully especially if you're looking at this as a business and looking to maximize your chances of success by de-risking the project and the truth is dreamscaper would never
be finished if i tried to do my very best in every single area and i know as artists and crafts people that sounds sacrilegious but the reality is on a small team with limited resources trying to bring every single thing that i did up to 120 was not only incredibly draining but an unrealistic goal to have it was really important to know when to stop because in many cases uh for the player 100 is as good as the 120 we often shoot for and as we know that last 10 or 20 percent can take almost as much time as the rest of the effort i can see that looks like the video stopped playing but i'll quickly describe it so as an example in dreamscaper i de-prioritized animating characters back to an idol state in this example i uh the blend of the animation is really ugly so once the player attacks they just kind of rotate into place i found that the vast majority of time players were continuously providing the system with inputs players don't attack and then wait for the attack to finish and return to idle and then attack or run or dodge right
after they're almost constantly entering inputs so due to how responsive we wanted the game to feel and how low fidelity it was the blend between player actions is very fast so for the most part i let ue4 handle animations to blending to idle despite it looking pretty rough this may seem like a small thing but animating hundreds of attacks back to idle didn't make sense for the fidelity of the project and that five percent of animation time that i saved could be put into a higher visibility area so for those of you who have been used to in any mindset this probably seems like a no-brainer but for me coming from a larger studio where my area of focus was much more narrow it was a really good lesson to learn to know when good is good enough and the best way to know when something is good enough is to look at it through your player's perspective so working a small team can be incredibly empowering but it can also lead to a lot of conflict especially if
you're as stubborn and opinionated as i am so something that i learned that helped my mental state over the course of the project was to be protective of my emotional energy i care i care a lot i care too much about things that i shouldn't and uh if you're a game developer chances are you do too uh so to help recontextualize it i began asking myself how much do i actually care about this when approaching a specific feature or approaching a discussion and that choice to step back and put my energy where it was most needed meant the difference between feeling refreshed or drained it also helped alleviate conflict on a team like ours that has a flat hierarchy decisions that might have sat at a standstill because they just didn't have consensus between the three of us could move forward to be tested and reapproached later okay we have come to the end of it to summarize
create pillars with specificity be considerate of your combat options layer your systems over time invest in animation and hit reactions establish responsiveness choices that suit your project prioritize strong feedback for more satisfying and visceral combat and finally kill your darlings take calculated risks and protect your emotional investment so thank you all so much really appreciate it for for you guys coming to this talk i hope there are some learnings and that are valuable for you that you can take back to your team to improve your combat i'm also very happy to continue discussions uh dreamscaper or otherwise so if you don't have a chance to grab me here i can be reached at any of these places and i think we have time for for questions as well if anyone has any [Applause]
oh yeah what's the deal here yes yeah please so with a game like this uh metrics they're kind of all like how far do we dodge how far do attacks go did you find you guys sort of tried to nail down metrics first or were you kind of evolving those throughout production yeah uh that's a good question so we had a very strange working style because a lot of us we came from larger studios but we also were so tired of it so uh for things like that it was most of it was completely intuitive so we would try things and try things and try things and uh something wasn't working we cut it so we weren't because we were moving pretty fast there's three of us we could test things out very quickly and establish if something was or wasn't working so for instance like a dodge metric we would just refine kind
of a core dodge we started with our uh core kind of roll dodge i don't know if we actually saw it here but uh we started with that and then all the other dodges that we would the player could potentially use because the roguelike they could pick up different dodges we kind of tuned around that and we we tried very different versions of things where some might be very short and have very long invincibility in terms of distance very short in distance some might have really long distance but recovery after so we were pretty liberal with with that type of thing we didn't worry too much about specific metrics because we just had a very fast and loose working style yeah um follow-up question uh similarly did you guys try to nail down um like frames for when the attack input would happen like do all the attacks have like they hit on frame five or did you nail that down too or was that also similarly like just kind of experimental yeah as uh you might be surprised it was also very loose so
one of the things that we did do though is we tried to make sure that uh almost all player attacks were faster than enemy attacks we wanted to feel like you could cut an enemy off in the middle of their uh their startup so we had some basic rules like that in place but we weren't too precious about having a specific amount of frames and it was kind of the same idea where over the top over time as we were developing more and more attacks across different weapons we started to refine kind of what the general range was of things and a big part of this also i should mention is because i'm like the person that's responsible for concept two execution for a lot of this stuff so i could have it in my own head you know if you are on a larger team that doesn't fly the same way because you need to be able to communicate to other people especially if they're touching different assets uh how long like these how about what these metrics should be but yeah for me working alone i was uh fly by the seat of my pants for sure very cool hey hello in respect to the player feel um you spent a great deal of time in
your talk dwelling on the importance of sort of the player's ability to impact what the enemy is doing and interrupt or stun or knock them around i suspect especially since you showed those larger enemies that things like bosses or you know like the big guy when he shows up are supposed to be these kind of big crunchy encounters where the player feels like the actions that they do are kind of more important than the normal actions that they take throughout their run however you can't exactly allow a player to stun lock a boss because then it's trivial um so you've taken something away which is their ability to kind of you know stun lock or juggle um what do you give them back to make that feel you know just as crunchy or more as the rest of combat yeah a good question um the just to quickly reiterate how do we [Music] accommodate for pulling away hit reactions when uh fighting bosses or
larger enemies so a few things the the part of it is the player's arsenal so they have a lot of other options besides uh uh stunning uh enemies or staggering enemies to help deal with crowd control or help deal with a larger enemy specifically like those those magic attacks we really didn't touch much on that but they have a set of special abilities that help augment their normal attacks and the other thing about the bosses themselves is i tried to link we also didn't have a lot of time to talk about that but the thing i tried to do when creating a boss was uh figure out ways that a player could uh kind of sneak in during their patterns and their attacks so that it felt fair to them that they could read and learn their attacks over time and slowly adapt and have the space to counter attack because we wanted to create like a almost choreographed dance some bosses were more extreme than others where they had like basically split phases where they could be attacked here they or they could attack here and as the game got harder we made those phases smaller and smaller and
smaller to the point where it was like they would attack have recovery and it can attack again and the player had to start to learn at those higher difficulties uh when they could weave in and when they could go on the offensive does that uh answer it yes it does and then a final follow-up on that is in terms of difficulty scaling a very common solution in our industry is to just pump the numbers right these guys have more hp you deal less damage whatever you make that disparity wider um did you feel tempted to go down that road i don't know if your game features a difficulty slider um but like how do you address that or would you recommend addressing that if not you know relying on number pump basically sure yeah uh we did a hybrid approach so we actually did have you know the kind of classic like scaling we had a curve that we set up for enemy power and also for player power um so we had a curve for their health and for their um their attack strength but to your point um my philosophy there is it's much more interesting to the player if they have to adapt to changes over time over the
course of the game and over difficulty so we actually had a set of difficulty sliders that were accessible later in the game where you could kind of increase the difficulty of different components of the game and one of them was enemies and the way that we pushed the difficulty and challenge without just making uh making so the player had to get hit less was new attacks new attack patterns um and new ways that the players the enemy could take defensive response to the player so there's way more scope increase with that but we wanted to make sure that at higher difficulties players were still really engaged because they're seeing new things and they're having to adapt to new things thank you anything else so expanding on the um enemies that you were talking about how for higher difficulties you would introduce new attacks for the player to react to were there any core principles you had in mind whenever you were designing like the enemies and how
you would advance them yeah um the the question was about what are some of our core principles for advancing uh challenge and enemies uh so there are a couple of things that we in terms of defensive options that the player has you know i talked about that block the parry the dodge so we have a system in place that the enemy attacks can override one of those so the player gets a digital notification uh over their head of what the type of attack is when they're attacked and at higher difficulties we start to take some of those options away from the player so for instance just standing there and blocking that goes first so enemies at higher difficulties can break through their block uh and eventually attacks have to be parried uh and finally at the highest difficulty you can no longer parry to get that counter attack on the enemy you can only dodge from certain attacks so there are certain things that we did in terms of creating defensive options for the player in order to help accommodate that thank you yeah sure
hey uh so like you had said earlier there's tons of different weapons and abilities that you can mix and match and that they all actually uh interact with each other so how did you go about balancing the numbers so that all of the different routes players could go kind of felt different in a flavor perspective but similar in a strength perspective or was that something you weren't actually kind of thinking about we uh we did think about that i'll answer this quickly that's last question um yeah so we did think about that i think uh the way uh one of the ways that we did that is we we came up with a set of kind of early attacks and we balanced around that so once we had a set of things that felt good or balanced against each other then we started pushing and pulling on either side so we might have an attack that had longer startup but um dealt more damage to an enemy and we could kind of push the extremes against what we had already to compare so we started to look at different ways to uh kind of move the variables around so it
felt really satisfying for players to try out different things that had really different effects but then we would try to balance that on the opposite side by pulling in some of those things that we've already established like you know whatever the recovery time is or the start of time cool thank you all right thanks guys that's all the time we have really appreciate you coming thanks [Music] you
Auto-generated captions from YouTube — names and numbers may be misheard.
Game Developers Conference · 2026
Game Developers Conference · 2026
Jonas Tyroller · 2025
Comments