Gamasutra liam mcdonald’s blog – sunless skies – ai development the strings we pull cirugia lumbar

Hello everyone, this is liam mcdonald . I’m one of the developers at failbetter games. I’m taking a brief moment to share some of the exciting combat redesign work I’ve been doing with paul arendt . We’ve been looking over all the enemies (agents) in sunless skies to update them with some of the new features that are being introduced in the latest build. We’ve just completed the fleshiest part of that work. So cast your eyes downward for a look at how exactly we go about bringing horror to your screens.

I’m also going to nod quickly in the direction of a crucial bit of underlying tech, the node graph. The node graph specifies the points in a scene where an actor can move – areas without terrain, basically. The logic which controls how agents move around our world begins with the selection of a node; we determine what node to select by weighting all of the nodes near the agent. Dolor lumbar izquierdo tratamiento I’m going to look at how we manipulate the rules behind the node weighting in order to achieve our design goals.

I am not going to discuss movement. We have a wide range of parameters available to control agent movement and it is an important part of the look and feel of an agent. However it is too complicated to get into in this blog. Ultimately, the goal behind our manipulation of the movement parameters is to produce an agent that can perform the manoeuvers we’ve assigned it and that has fluid movement appropriate to their nature. For this blog, movement can be considered a tool that helps improve the quality of the other areas I’ll be discussing.

This is a concept that helps convey how a designer works to achieve their vision. The ‘strings of design’ can be individually adjusted by a designer to pull a design into shape. Each string is an individual piece of tech work or a game feature. I’ve already mentioned some of these strings above: movement parameters, passions, tactics. But we can also use some more common strings, such as agent health, weapon damage and wrath (aggro). So, let’s go through these sunless skies strings to see how they’re used to improve combat in game!

We don’t want combat to feel static – it should be fluid,encouraging constant assessment of your position, taking into account your opponents’ movement and behaviour. To create this need for the player to move, we’ve created areas of denial – areas in which it would be undesirable for a player to remain. Dolor lumbar lado izquierdo these are created through a combination of the agent’s ability to reposition itself relative to the player and the agent’s choice of attacks.

Wrath is a simple numerical value. It measures how wrathful an agent is towards another actor in the game. Agents are capable of gaining wrath toward any other actor – the player or other agents. We do prevent agents of the same type attacking each other. When an agent exceeds the wrath threshold with regards to an actor, that actor becomes the agent’s opponent. Here is the wrath indicator in action:

When an agent has no opponent, their movement will be dictated by a passion, selected from their list of passions. Hernia discal lumbar cie 10 when an agent is spawned, the node they were spawned on is stored as their ‘home node’. We have designed two sets of passions: the first allows an agent to wander a certain distance around their home area – if they exceed this distance, they return to the home node. The second set of passions move the agent towards the player – if this exceeds a set distance, they return to their home node before trying to move towards the player again. Below shows the wander passion in effect:

Once an agent has an opponent, they will stop using passions for their movement and start using tactics. Rx de columna lumbar normal provocations will still add or subtract wrath when the right conditions are met. So, if you are able to flee from the agent, wrath will go down until you are no longer their opponent. But while the agent has an opponent, its movement will rely on the tactics.

We score all tactics using their base weight and a multiplier. This weighting dictates how likely a tactic is to be selected. We use the multipliers to increase the likelihood of a specific tactic being chosen. If we wanted to create a tactic that allows the firing of the agent’s primary weapon – perhaps a shotgun – when the agent is close to the player, we’d add a large multiplier to the primary weapon when the distance to the player is small.

Next up is node weighting, which governs where the agent is trying to go when they are executing a tactic. The agent needs to select a node from our node graph, so we have to score the nodes so that the agent can decide which they should pick. In the screenshot of the close range flank tactic, above, we’re saying that nodes which are at a particular angle from the opponent (in this case behind the opponent) are weighted at, let’s say, 8. We also weight nodes within 300-100 units from the opponent at 6. So if a node is both behind the opponent and between 100-300 from them, it’ll benefit from the weighting of both conditions and therefore will be the most likely to be selected. Dolor lumbar tratamiento the result of these weightings helps us to achieve the flanking behaviour that this tactic is named after.

Finally, we have some optional parameters. We can, for example, have a completion condition. Maybe I want a tactic to finish when the agent gets within 400 units from the opponent, so that it can transition to a ramming attack. We can also add a timeout. Perhaps a tactic is hard to achieve when the player is always moving. In this case, we want the agent to try to achieve it for x seconds, then to move on to another tactic.

Chaining tactics allows us to layer the complexity of the design. We may want to have a tactic where an agent starts by using ‘approach player’, then, after completing this, it goes straight into ‘ram player’. After the ram completes, we may want it to then ‘create distance from player’. The design might dictate that the agent is only able to ram when it follows that particular chain of tactics. Other times it makes more sense to have many tactics available and let the agent select between them to create a more unpredictable flow to the fight. Cirugia lumbar which approach is best depends largely on the behaviour we’re trying to achieve and the movement abilities of the specific agent.

Those are just some of the strings we pull to determine an agent’s behaviour. But how do we decide what behaviour to choose for an agent? It starts with our agent’s personality – we have wealth of information from sunless skies’ narrative. If we need more information, we can speak directly to the writers to get a better sense of the agent we’re designing. Then we boil this information down to touch stones that we can work with. Here’s the scrive spinster:

This is step one of the design. We lay out the core pillars that should be present in order to translate the narrative ideas into the agent’s behaviour. When we’re happy with that base, we keep layering, keep pulling the design strings to add complexity to the design until we reach a point where we know that the initial ideas are strongly present in both the movement and attacks.