The first feature I worked on at Wolfeye when I came on board as (what ended up being credited as) a Systems Designer/Technical Designer was the vultures. As well as being ambiently cool, the vultures play a role a bit like the rats in Dishonored, showing up when there’s dead stuff around and conveniently disposing of corpses (which is probably noncoincidental, Wolfeye being ex-Arkane, although I don’t remember if we talked about it). This was a convenient place to climb onto the project because it was a pretty standalone system; the other systems mostly didn’t need to know about the vultures.
I always appreciate an imaginative approach to corpse disposal in a game (like the weird alien maggots in Giants: Citizen Kabuto), but like the Dishonored rats, the vultures aren’t just that, they’re also reactive NPCs you can interact with in various ways. Weird West was built systemically enough that a lot of this came “free”; you can electrocute or set fire to a vulture because of our “signals” system, or poison it because of the “statuses” system, or it can get startled and fly away because of the “distractions” system, and you can cook and eat them because of the cooking system. Because of this they end up being agents of chaos at times – you can shoot one down with a fire arrow and if it lands in dry grass, you could start a massive fire, and sometimes things like this happen by accident. But you mainly see ’em just flying around, or swooping down and eating corpses.
They also had to perch in certain places, and while it was not necessary or in the brief, I also wanted them to be able to land on the ground occasionally and walk around. So in addition to the usual stuff: fly, perch, eat, walk. This is simple enough that I didn’t think it was worth using Unreal’s Behaviour Tree system (which I hate anyway), so I just built it in the AIController out of regular Blueprint. This is the whole ai – quite messy in places, but such is shipping a game. It’s pretty simple:

The game is top-down, so we don’t need many birds – there are usually 3-5, which is enough to give an illusion of more. For idling, we just want to see one fly overhead every so often in a classic vulture curve. Each bird periodically gets a new random destination that is some distance to the other side of the player from where it is now. Each bird tries to keep to its own specific height, spaced evenly – so if there are 3 birds, you’ll have one flying right up close to the camera, one pretty low, and one in the middle, plus some random offset so there’s always a little up/down movement. Like this:
When they’re airborne, they have no real pathing; they just get a random destination they can probably reach, and if they get too close to a wall, character, or a loud noise, they “spook” – take off if landed, turn around, and get a new destination:
As you can also see there, they periodically swoop down and perch. This happens at predetermined perch points (placed as components on various actors, like trees) which use the same “Distractions” system the rest of the NPCs use for idly interacting with the environment. This means birds “call dibs” on a perch and the others will respect that, so we never get two trying to land in the same spot.
This is also the same system that lets the vultures eat people: when someone dies, I spawn distractions on the ragdoll on each hand and foot and on the head. The distraction tells them to do their EatCorpse thing, which plays an animation, applies a physics impulse to the pecked joint, and applies damage to the corpse (which deteriorates it until it becomes a “flesh pile”. Bit grim.).

As well as perching, the vultures do occasional checks for actual ground beneath them (which needs to be flattish with a few vultures-worth of empty space) and land on it. At this point, they start walking using the navmesh just like a person, and care must be taken that they don’t randomly walk indoors too often.
If they *do* find their way indoors, I don’t handle that at all, but I figure neither do real birds, so it’s fine. They just flap around a lot and get upset, eventually either getting killed or finding their way out naturally. If they hit a window, it breaks, so usually they escape on their own that way, but this is a rare case in the first place of an unlucky random wander destination. Weird West in general leans in favour of this type of chaos.
Something I really like about the vultures animation-wise is they blend between a glide and a flap depending on how far above them their destination height is. If it’s below, they glide, and they flap harder the higher they need to go:
Level designers don’t need to do anything for this to work, but if they want something nonstandard (like a location that always has vultures even if there’s no death going on, or an unusual vulture population) there’s a manager actor they can place to override some settings.

In the end, it ended up being just as well that I implemented the landing-and-walking-around behaviour for the vultures, because later we wanted chickens and there was already Flightless Bird Support – a chicken is just a flightless vulture who lays eggs, as any ornithologist will tell you.
As minor as these guys are, they’re one of the features I’m fondest of – my first task, omnipresent, occasionally chaotic, and shipping almost unchanged from their initial implementation. Good eggs.
Leave a Reply