Pathfinding and Collision [Megathread]
Do units get where you want them to go?
When providing feedback, please use the following format:
- X happened
- It made me feel Y (or I’d like to feel Y)
- (optional) Here’s a suggestion to improve it
Our Pathing and Collision Goals (written by Day)
Ahoy all! I want to talk a bit about our goals for pathing/collision/steering of units since it's one of the more unusual goals with our design. My hope is that this can provide a framework for you to understand what you're seeing in the game and where we might be headed. That said, feel free to continue to use the "I felt X when Y" happened because your experience is always true regardless of our goals.
Before we step into the design goals, I want to talk about pathing function vs pathing aesthetic.
Pathing function is pretty intuitive -- do units roughly do the right thing. If I tell a unit to move forward, does he go backwards? If so, the pathing functionality is b0rked! This is bad. There a long list of functional pieces to pathing that we want to achieve -- flocks of units moving correctly, units moving around buildings/units etc. Many of you have written about functional oddities (ie units going in crazy directions or getting stuck).
Pathing aesthetic is the more subjective side to pathing. First of all, by aesthetic I mean the gameplay aesthetic rather than the artistic "does the pathing look pretty." We made the decision very early on that we did not want hyper efficient pathing. With extremely efficient pathing, flocks of units always move perfectly, like beads of water sliding to their destination. The result is that all armies achieve essentially one shape -- "circular blob." Each player moves their blob around, engaging in blob on blob combat. In our earlier tests with hyper efficient pathing, combat had little variety, essentially boiling down to army size/composition. So, we opted to explore something more Brood War esque, where similar army vs army fights can have wildly different outcomes due to mid-battle re-positioning/micro/consideration.
I believe a player should be able to glance at the shape of an army (moving or still) and be able to make clear statements about it. Something like "there's a straggler at the bottom" or "I should attack this from the left side because his melee units are on the right side" or "his units aren't clustered enough to use my AoE yet." If units smoothly and continuously changing the shape of the army (as with more "liquid" pathfinding), it's very hard for those judgments to be as strong, or as sharp.
And so, we created some pathing aesthetic goals as follows
1. To have units be able to block and occupy space in a very "solid" way
2. To generate varying army shapes for more interesting battles
3. To hold shapes/formations for longer periods of time
First, lets talk solidness! "Solidness" is a very loosely used term, so some examples will be better. In Atlas, units don't go through friendly clumps of units, but rather go around. The clump is a "solid shape." If I have a pair of units in the way of an enemy unit, the enemy unit will rarely be able to "slip through" because these units occupy space in a "solid way." We are trying to minimize pushing of some units to other units to emphasize static shapes. The result is that things like "oh his melee units are in the back!" become stronger/sharper statements. Surrounding is easier. Blocking chokes is easier and more effective.
Second, lets talk shape! I'm a big believer in the idea of varied army shapes to create skill and in-game judgement. Suppose you and I each have 10 units. With efficient pathing, it will always be a blob of 10 vs a blob of 10. Our skill differential essentially boils down to target firing and retreating weakened units. AoE spells will always try to target the center of the blob. However, with shape variety, we greatly increase the number of possible battles. Sometimes, you'll have two stragglers at the bottom of your force, so I'll try to engage from that angle. Or, if you have three clumps of 3, 3, and 4 units each, I might wait a moment to see if a large clump will form to cast an AoE spell. These moments of continuous judgment of the battle made for super interesting battles in Brood War. The subtle variation in your & your enemy's army shape results in continuous re-engagement and re-evaluation. So, in Atlas, we want flocks of units to spread themselves out in slightly un-even ways.
Third, formations! As I stated before, a player should be able to judge a shape and make a strong, sharp analysis of it. Goal #2 helps to generate shapes, and Goal #3 helps preserve it! If you have units in formation and you tell them to move somewhere, we want the units to arrive in formation. While in transit, that shape might adjust and change, but we don't want it to do so in a smooth, continuous way. Rather, we want the shapes in-transit to often hold for several seconds so that players can make more concrete judgements about them.
COMING DOWN THE LINE
Unfortunately, our aesthetic pathing goals sometimes bump against some of the functional pathing bits. I firmly believe that our battles benefit greatly from the pathing that we've introduced. BUT, we have a ways to go before it's excellent. Some notable issues that we're focusing on coming down the pipeline
- Because units "solidly" occupy space, sometimes if you attack-move in a corridor, a unit will walk AWAY from the fight! He's doing so because he can see that he's "blocked" by the units in front of him. So, he's going ALL THE WAY AROUND to the other edge of the fight so he can begin to participate. Even though the unit is technically "doing a good thing" (making his way to the fight), in context the unit looks to be behaving incorrectly. We're going to implement some contextual logic to approach these situations.
- Allied pathing can be a real drag. It's GREAT when you are readjusting your own army shape and adjusting to/exploiting your enemy's army shape. BUT it SUCKS to feel like you're fighting against your ally. So, we're also exploring contextual logic to make things nicer when colliding with an ally. We want the game to punish you SOME for not positioning correctly relative to your ally, but you shouldn't be frequently boxed in.
- Units occasionally look like they can fit through a space when they actually can't. We need much better visual indicators for selection/collision radius so that, if looks like you can fit, you can fit.
- Units still get stuck. Especially the bots. Just look at them. Poor bots. Running into walls.
SOME THINGS WE WONT DO
- Allow your units to path through allied units. This results in the literal worst battles we've ever had. All those units stacked on top of each other wrecks any readability or battle clarity on both sides. Infrequent "walk over" units (ie Colossus from SC2 or Bramblethorn Goliath in Atlas) can be ok, but our Goliath is a chief offender for battle readability.
This is about all I can think of for now! Please post extra questions/thoughts in the thread for me to address! I'll update this MEGA post as time goes on
THEMES IN THIS THREAD
- Random pushing w/ allies -- We will be removing the random "pushing" feeling
- Units seeming to spread out like they're repelling eachother (ie like mutalisk clumps) -- We want to remove the pushing force eventually. This was originally implemented to create more "white space" during fights, but eventually our goal #2 above should be the solution to this rather than an arbitrary electron force.
- General frustration around allies -- Definitely will be addressed as per above.
- The circle around units doesn't seem to match their radius -- Will be address as per above!