Oh man are we ever busy with a bunch of awesome stuff. There are a still a few fundamental engine issues that are being worked out (last I checked we can still accidentally spawn 10,000 Lua instances and destroy the world), but the biomes are starting to really look great, the art team is cranking out fantastic looking machines, people, and now particles (woo!), and the characters in the game are starting to get really upset whenever we start the game up to test a new feature and neglect to feed them.

Characters will start telling anyone nearby who will listen that they’re really, really hungry. They start thinking about hunger instead of doing work, and then they keel over. That is, unless there’s *some* food available, but not enough. Then they subsist for a while being generally grumpy as they go about filling steam balls and farming cabbages. Could be worse, they could not have beds. If they’re not sleeping on beds (which you need to make for them) they start sleeping outside. They really don’t like that. It makes them angry and depressed. Eventually the sleep deprivation will get to them and, uh, well currently they only have one terrible option — We’ll talk over some feature by the whiteboard for a while, look back at the screen, and there are just … bodies everywhere.

We looked for some kind of struggle. Are there any dead monsters? Where is the military? Did everyone die of starvation? Slowly the truth dawns.

The framework that we use for this is a history system that lives within our FSM model. Jobs and scripts have the capacity to add historical events to a Lua object aka “a person”. These can be anything from “Rupert Cogburn has felt hungry recently” to characters forming relationships with each other. Here’s an example of a historical event:

addHistory("Feelin Hungry", 100, {description = "SUBJECTIVE_PERSONAL_PRONOUN felt hungry recently."}, {character = SELF})

Each historical event is given a name, an importance, a description, and list of owners of that event, and any number of additional data such as descriptions for the character windows, tags, and so forth.

We can then poll any character for a historical entry that matches any criterion. We can search for whether a character is married or whether they have any other associations with another character. We can poll them to see if they have witnessed any serious events recently by having an event add an event to all nearby characters, and we can even have knowledge of particular events spread by way of gossip.

For instance, Say Alice forms a strong positive relationship with Bob, then Bob dies in a horrible mining accident. Alice isn’t nearby at the time, but Carol is nearby and witnesses the event. Later on, Carol is gossiping with Alice and wants to give her the most important news of the day. She tells Alice about Bob, and then Alice needs to decide how to cope with this news.

The possibilities for this system are sufficiently vast that we’re just kind of swimming around in it, putting in the stuff that we think will lead to fairly interesting and emotional stories, but we could spend $265 million on this database if we had, I dunno, like a thousand people working on it. Like certain recently released games. Not naming names. Not that we’re jealous or anything, just commenting on the news. Yeah.