Headline:Conservation of Detail
Date:Friday, January 31, 2020
Posted By:Plaid Hatter Games

The Iliad is huge. Not just in mass, or volume, there are thousands of compartments. There is a large population, that is going to get larger. I have been struggling with a chicken-and-theropod problem.

You may be familiar with a chicken-and-egg problem. Which came first? If the chicken was first what did it hatch from? If the egg came first, who laid it. The answer is that some common ancestor came WAY before either the chicken or the egg. I'm just trying to avoid inventing the entire natural history in between.

Ok, I think you probably need a bit more explanation than that.

Classic text adventures have a finite number of rooms. Part of the puzzle is navigating through those rooms, finding all of the puzzle peices, unlocking all of the chests, slaying the princesses and rescuing the dragons. The details in an old text adventure are pretty spartan. I could blame storage limitations, but honestly, a lot of early text adventures were side projects and hobbies.

On the opposite extreme would be a AAA game today. Massive worlds. Levels stocked with monsters, towns stocked with NPCs. Every bit of scenery, every doorway, every floor tile produced by artists. And usually to the tune of $100 Million dollars plus.

Somewhere in between are survival games like Minecraft , and No Man's Sky. They provide little in the way of direct story, but they have massive, immersive worlds to explore. They provide these worlds by procedurally generating them. Most of the game play, though, is the game trying to kill the player at every turn.

But there is a subtle trick that Minecraft does to keep the processing down to something that will fit on a phone's processor. The game only generates the parts of the world that the player has actually explored. Mobs only spawn and interact within a certain radius of the player. This provides an illusion that the world is chock full of monsters, and that there is an entire planet to explore in any direction. Keep going, and the generator will just make more.

The Iliad-07 itself, structure wise, is very mathematical. I actually do have a script I use to generate maps of it algorithmically. I event have spreadheets that implement population models and estimate agricultural output. Unlike an open world, there are finite limits to the ship that are known ahead of time. The problem I have is level of detail.

I could also sit down and hammer out an entire camera ready model of the Iliad-07. Every hatch, bolt and switch. Long story short, I'd end up on youtube 10 years from now like the guy who makes an airliner model out of paper. Entertaining. For me. For you, it's like a car crash. You slow down a minute, stare out the window, and mutter "Thank god that wasn't me."

To make the model "live" I have to provide something for players to interact with. And what game after game has found is that people most like interacting with people. People are not structure. They move. They act. They have arguments. They eat. They make more people. They die. They alter their surroundings.

Even if I scuffed up the model, and made it look lived in, it would still be scarcely more than a museum. I need people alive in it.

Not just a plucky ensemble. To pull off a plausible colony, the ship would need at hundreds, more likely thousands, of people.

But now we get to an interesting phenomena. I don't have to actually model 1000 persons. Players would never be able to keep track of that many characters. An Army Company is 100 soldiers. That size was selected because 100 or so is the limit of how many other people one person can keep track of day-to-day. And this concept goes back to the Romans.

Instead, I need to model 1000 people. Tracking people is a little easier than modeling persons. I just need to create the behaviors of the aggregate that the player would notice. Births, Deaths, and Marriage notices in the newspaper. Traffic jams. Crop usage. Toy sales. Concert crowds. Lines in the mess hall.

People are used to lumping large populations together as a single concept. You step onto a bus. There are 40 souls aboard. You look past all of those people to find an open seat, or failing that, a strap to hang on. You may interact with a few select individuals to strike up a conversation, or ask someone to step aside or pull the "Stop" cord you can't reach. But you won't remember anyone who you interacted with. Unless they really stood out for some reason.

Well, at least on a public bus. A school bus is a little different. The same 40 people, but day after day strangers become friends and rivals. People start carving out "turf", and seats get saved. The population divides itself into cliques. There are popular kids and unpopular kids.

In essence: people transition into persons only after day-to-day interaction.

I will have to identify key people in the story I want to tell, and those will be implemented as individual characters. The player will also be a character. But in the background will be a nebulous population. Every so often a soul rises above the surface, becomes a temporary character to facilitate an interaction, and if the player or principles don't interact with them after a certain amount of time, they recede back into the chorus.

Imagine if you will the game has a newspaper, and that paper has a section for Births, Wedding announcements, and Obits. I know from population models, how many of those will happen for a population of given size per unit of time. Let's say we print the newsletter every month. If the player is interacting with a pair of NPCs acting as a couple, and they are getting to the part of the story where they are ready to tie the knot, they would be listed as one of the couples. If my population model calls out for more weddings than that, I can pull names out of a hat of people who are roughly the right age and plausibly compatible.

I can't invent people out of whole cloth. I'll need at least a database with names, sexes, and ages. But that's the only details I need. Basically what you would find on a census form.

Now let us say our player decides to read the article on a random wedding, and crash the party. We could actually assemble the entire a wedding party and a roomful of guests. Again, pulling from our basic census data, and adding a few notes about what we assembled with a roll of the dice. People at occasions like this are pretty polite (read bland), and until the drinks start flowing at the reception, they are usually not doing anything but exchanging pleasantries. Mostly with people who they already know.

Unless the player hits it off with a random guest, we can actually forget the whole thing happened later. They arrive. They know nobody there. Nobody there knows them. Things are awkward. Life moves on.

If the player checks out the cake, well, we all know what wedding cakes look like. If you are crashing a random NPC's wedding, pretty. And pretty generic. I just have to elude to the ornately pedestrian nature and a reader will fill the details in with their own mind.

Small talk with random party goers is also something that can be built on the fly, and forgotten just as easily.

We come now to another point. Players don't just interact with "people". What makes people love a game are PERSONS. Attending a wedding where you know the people involved is far more enjoyable. And usually you remember little about the actual wedding, or the food, you remember what So-and-so was doing, or the crazy thing that Whozisname's Uncle Whatisface said after having too much to drink.

Well, unless you attend a Pirate Wedding. People will talk about that for years. Ask me how I know 😉

So, to review where we have gotten so far: I don't have to create a perfect reality to create a convincing game. I need to keep only a few more details than a player would otherwise be able to keep track of on their own straight. If I expect the player to pass through 4 doors, I really only need to have a 5th door on offer. People will think the world goes on forever after that.

If a player strays away from the "hero" portions of the ship, I actually don't need for those regions to make much sense at all. Machinery spaces. Agricultural fields. Warehouses of parts. So much "detail" that it's all just noise. Now that I think about it, there could be a mechanism whereby wandering too long in those areas will render the player's character "lost". A special state that requires stumbling around until they randomly find their way back to the normal parts of the ship, or are rescued by the ship's first responders.

The vessel has hundreds of miles of corridors. Odds are management has had to develop specialist teams to find people who wander off and can't wander back.

Ok... back on track...

Most of the simulation for the game is going to be a population model. I'm at 750 people, in the first year, given the ages of the people, I expect X weddings. Find two random compatible people, BOOM we have a wedding. We also record the new state of these two individuals, so we keep our story straight. We know for however many married couples, a subset of them (a random probability) will have children. Randomly select he couples (based on plausible criteria), randomly select if they rolled twins, randomly select the gender of the children. And we could even randomly generate names for the children. Record the children in the database as new records. As the children age, they venture into the range to be old enough to marry, and the cycle continues.

From this system we can also get a pretty cheap an cheerful social structure based on family. Pull any random record, and you can find out who their parents are, or who their children are. Assuming the ship started out with 750 singles in their 20s picked at random, and we are now on mission year 20, our family trees don't extend too far yet. People are still largely organizing themselves by vocation and by leisure time activity.

Need 200 people for the engineering division? Heck, just have a field on the census form for that. I don't need to break them down into departments, divisions, etc, unless the story calls for it. Pick people out of a hat. Add just enough detail to be able to generate a plausible story. Stop until the story demands more detail.

In the end, I don't really need to support more than 100 or so NPCs. More than that, and the player is going to lose track. Actually, even at that number the player is going to lose track. There will be a few leads, a few secondaries, a few incidentals to act as spouses and relations to the leads and secondaries, and everyone else is a random face in a crowd. I can even give them name tags, but it won't matter if the player doesn't interact with them on a regular basis.

Our agriculture model is driven by our population model. 750 people will consume, on average, so much grain, so many cows, so many tons of coffee, per year. To support that I need to have so many hectares under cultivation. To support so many hectares I need so many kilowatt hours of power, so many man-hours of labor, so many gallons of fresh water. As the population crows, those numbers rise. As the population declines, those numbers drop. And you always grow and can/store/preserve a little extra to account for slippage, screwed up estimates, and crop failure.

Note I didn't provide any numbers. Players won't care. I just have to make them believe those numbers exist. (Ok, I'll admit, the DO exist.) And they way I do that is by having compartments on the map with labels for "GRAIN CULTIVATION", "CATTLE RANGE", and "COFFEE PLANTATION" in plausible quantities. (If they decided to look at a map.)

I can also roll up disasters sim-city style. A fire damages a grain store. The pool closes because some asshole accidentally filled it with heavy water. Subpar reactor maintenance leads to power rationing, and the person in charge being fired. All of the details of these stories can be cooked up, and so long as I have a system that lets me tag records with all of these zany happenings, a player will rightfully believe this is a real world.

Now, if you'll excuse me, I have to sit down and develop a hell of a lot of probability tables...