I was working on the problem of time and navigation in a text adventure during some of my early experiments. I found myself having to constantly resort to visual maps on graph paper just to keep track of all of the paths my character could follow through a dungeon, or traveling across a system of roads from town to town, or through the streets of a town. It was a mess because I insisted on structuring a world like I would need to do for a 3d or 2d game. There are regions of space that are broke up by walls and borders and they have to physically be distinct because we have to paint all of that information on the screen.

I was running across the same problem with time. In a 3d or 2d game, you tend to work on a human time scale. A second in real time is a second of game time, because players are operating the game live. And when you warp time, you have to suspend the ability for your player to take action. I also have the dilemma of scripted game events that need to know when to fire off.

I brooded on this problem for several months. And then in the same flash of insight that produced the [Event Handling] solution, I had a vision of a world that lacked perception. Yes it's crazy, but hear me out. I am trying to design a game that reads like an interactive book. Books leave a lot of details out. (Charles Dickens not withstanding.) In between paragraphs, characters can move across continents. Time can span months. Appearance can change radically. Characters can learn how to fly an airplane. All in a few lines of text, or on the outside a few pages or chapters.

A good book only dwells on the details a reader would (or should) be interested in.

When I pondered this, I found that keeping things fuzzy until I absolutely need to cement a detail is a very powerful approach to simulation. Instead of modeling an entire town, with roads and transit systems and cops on the corner, I can just leave all of that work to the imagination of the user.

Instead of a concrete map, with every location having a X,Y, and Z location with a lot of filler in between, I just have a soup of buildings and landmarks connected by the nebulous concept of a city. If I want to generate a random encounter, well, I just generate a random encounter and cement that it happened on a street corner that I just made up with characters I've just called into being, and who exist for only as long as the story requires them to.

In this way an adventure can simply express their intent to go somewhere, and the system will carry that intent out, possibly throwing in a few impediments or interactions along the way.

> look
You are standing in the Starter Tavern Pub. The main room of the building is a
bar. There are several rooms that lead out from this room, including [Your Room]
and [The Basement]. A door leads outside to [Starter Town].
Your Uncle, the tavern keeper, is standing behind the bar. And he's looking a
little impatient.
> quest
You are currently on the [Milk Run] quest. Your [Uncle] has given you money to restock
the [Fridge] with [Milk]. A nearby supplier of Milk is [quick-e-mart]
> goto quick-e-mart
You wind your way through the streets of [Starter Town]. Along the way a dark figure
emerges from the shadows with a knife. He is demanding the money in your pocket.
> call for help
You raise a cry of alarm.
A policeman hears the commotion and blows his whistle. Your assailant runs off, with
the officer in pursuit. You give details of the encounter to his partner who
files a police report.
Would you like to [continue] on your way to [quick-e-mart]?
> continue
You continue one your way and arrive at [quick-e-mart]. You can buy things from here using the
[buy] command.
> buy milk
You take milk out of the refrigerated section, and ring up your purchase at the counter.
10 credits removed. Added [milk] to your inventory
> goto home
You wind your way through the streets to arrive at [Starter Tavern]
> put milk in fridge
You place the [milk] in the [fridge].
Mission Completed: [Milk Run]. You have earned 50xp, and [your Uncle] trusts you a little more.
Your uncle says "Oh, thank you. I was starting to worry, did you run into trouble on the way?"
>

In the background, each of these actions takes some time on the "real time" clock. But the "put the milk in the fridge" action takes nowhere as long as, say, hiking 3 blocks to the quick-e-mart. While some things will be affected by the passage of time, from a user's perspective what matters most is being able to perform the interesting actions without a lot of boring interactions in between.

The Town is just on object, and leaving the Tavern to enter the down generates an event. That event is a random mugging encounter. Arriving at the quick-e-mart allows access to all of the "buy" command. I don't make the user go through all of the motions of pulling the item from the shelf and standing in the checkout line, and forking over cash. That's just plain uninteresting. On the way back, we didn't randomly generate an event to happen.

Now, how big is quick-e-mart? How many blocks did we walk? Was it crowded along the way? Did we see a pigeon? In a 3d game, I'd have to invent all of those details. And pay a CG artists to make all of them. And probably a voice actor for the salesman, the robber, the police, the Uncle, etc. And probably a few more actors who make inane babble in the background, or play in the street. And people would expect the pigeon to do something clever. Because, hell, if they bothered to put it into the game it must be important? Right?

Here, I can get by with a handful of objects, the bulk of which can be invented on the fly. And because I've communicated intent in the actions, the computer can lead the player in the selections it offers. Not the offer to continue the journey that the mugger event so rudely interrupted. Completing the mission generates an event in the Uncle NPC which sparks a conversation.

Now the transcript above was completely made up by me for this entry. But there is nothing in there that would be impossible for the engine I'm designing now.