Skip to main content

Living Worlds: The Joy Of NPC Schedules

Clockwork people

Just before the Christmas break I was trying to catch up on all of the interesting games that I hadn't found time to play earlier in the year. Else Heart.Break() was right near the top of the list, even though I have zero interest in games that expect me to learn how to program in order to have fun. If I learn how to program it'll be so that I can become a megarich superstar game dev, not so that I can solve puzzles in somebody else's game.

So why play a game that is quite clearly about IFs, ELSEs and ANDs? The Store page description contains phrases that should have warned me off the game rather than encouraging me to buy it, and yet something appealed. I wanted to play the game because of a single paragraph in Brendan's review:

Apart from this compass needle of plot, the city is yours to explore. And what a city. Dorisburg is built like an intricate piece of clockwork. Characters go from place to place according to their individual schedule. They’ll go to work, head to the cafe, then off to a house party. I always knew, for example, that my supervisor at the soda job would be outside the nightclub smoking every night at about 10pm. In the early hours of the morning, he would chill out on a bench in the plaza.

I've been fascinated by NPC schedules and that clockwork intricacy of virtual worlds since I first played Ultima VII. All of the super HD post-processed anti-aliased super graphics in the world won't do as much to convince me that a world is real if the people that inhabit that world don't have jobs to do and leisure time to fill. Else Heart.Break() is a wonderful game for people-watching and I managed to while away hours without even unlocking the ability to delve into the object programming that appears to be the whole enterprise's raison d'etre.

Why would I rush to disrupt the mechanical structure of a world so intricate unless I'd first taken the time to enjoy it?

Waking up every morning, tucked in a pokey little hotel room, I trickled down to the restaurant and grabbed a coffee. There were familiar faces, including a German tourist who had become my best friend by virtue of the fact that he always remembered my name and said hello cheerfully. I was delighted to see the chef/waiter/barista emerging from the kitchen to retrieve my cup once I'd drank my fill and even more delighted when he made a new brew to pop on the counter in its place.

This, I thought to myself, is a world that continues to function even when I'm not looking at it. People go to the bar when they finish work for the day, some of them suck on a cigarette as they walk through the frequent downpours back to their lovingly modelled homes at the end of the day. During my own wandering, I occasionally see my German pal doing touristy things - taking photos, sitting on benches and watching the world go by. That's pretty much how I spend my days, although I tend to follow interesting people through the streets and back to their houses more often than he does. But we're both here, in the world of the game, purely to indulge and express our interest in that world. This NPC has more in common with me than almost any other I've ever encountered.

NPC schedules are fundamental to the credibility of a game's world. Patrols are one of the most familiar manifestations of schedules and Metal Gear Solid V recently made excellent use of guard movements and interactions to suggest AI that was reactive and alive beyond its actual function. A combination of cleverly timed barks - those declarations of intent that made Half Life's human enemies so convincing - and scheduling is the most effective form of artificial life I've ever seen.

If a knight jumps off his horse, ditches all of his knightly clobber in a cloakroom and then sits down in a tavern to quaff some ale, I'm absolutely invested in every single one of those actions. If he does exactly the same thing but declares "THE DAY'S QUESTING IS DONE NOW IT IS TIME TO DRINK AND BE MERRY MY FRIENDS" as he takes his seat, I'm going to shout a response at the screen. That was the great joy of Ultima VII's sessions of boozy (and eggy) downtime between virtuous monster-slaying - NPCs would plant themselves in the pub and bellow about the food and drink they were gorging themselves on. And then they'd go back to work and, in the case of the baker, actually make objects using systems and raw materials in the game world.

Believable NPC schedules are one of the few things Divinity: Original Sin didn't retain from the Ultima VII portions of its design documents. That's at least partly because Larian chose to tackle cooperative play, which required tracking multiple player characters in the world at any one time, each of which might enter turn-based combat independently of the other (multiple others in the upcoming sequel). That would make tracking day/night cycles and triggers for changes in a schedule impossible.

That kind of complex and simulation-shattering time management is just one example of the kind of structures that can prevent NPC scheduling, even in games where it seems desirable. GTA's citizens don't have individual lives. They spawn to act as props. In those cities, everyone except the characters in the cutscenes is an extra, shipped in to add some local flavour and occasionally fed a few lines of dialogue, but never expected to establish themselves within the narrative or even within the location itself.

That's almost certainly due to scale. GTA V doesn't even model packs of pedestrians when the player isn't in the vicinity. The same is true of Assassin's Creed: Syndicate, in which there are people who are in the pub and people who are in the street, but few people who are sometimes in the street and sometimes in the pub. Those who work are at work 24/7 and those who play never stop playing.

One of the most thrilling experiences I can remember involved S.T.A.L.K.E.R.: Call of Pripyat with the Misery mod installed. I'd turned the A-Life up to its highest setting, meaning that every living thing in the game was active with its AI fully functional no matter how far from my location it had spawned. From a hillside, through binoculars, I watched a group of three men wading through waist-high water, twitchy and nervous. When they reached the bank, they stopped, seemed to gather and converse.

Nothing in their animations had been modded but they were weary. I could tell they felt haunted and hunted, out there in the Zone, and that they wanted shelter, warmth and food. None of that was conveyed through visual flourishes, voice acting or scripted interactions. They convinced me because they were behaving just as I was behaving, and I saw my own nervous energy and anxiety in them because of that. Just as I saw it in my tourist friend in the beautiful machine of else Heart.Break() and just as I see it in every NPC whose existence has even a hint of purpose beyond his or her direct relation to the player character.

High fidelity visuals can convince me I'm looking at a beautiful series of paintings or sculptures. Believable inhabitants can convince me I'm walking through a world.

Read this next