It's Just a Jump to the Left

One of the many side projects I have going is a MUD written in Python. I want to incorporate some sort of semi-realistic concept of time into this game; activities, like crafting, should take time, billboards and announcements in the game world should expire after some time, time-limited festivals should be held, etc. However, having in-game time correspond exactly to real life time would be undesirable. So, we have a problem.

Let's look into what I have in mind for the game in greater detail, first. There are really two separate problems we need to tackle: short timespans and long timespans. In the end I would like these two to be consistent, and one might argue about whether they are truly qualitatively different or not, but for now we will assume that they are. As a matter of fact, many if not most existing games make this distinction anyway.

Short timespans are for things like combat, spellcasting, and some forms of crafting. Many classic role-playing systems, such as d20, use a combat turn system for these timespans. You generally don't want to specify that "an attack takes 3.2 seconds" or "casting that spell takes 4.5 seconds" in a setting where most of the calculations are being made by humans on graph paper. That sort of heavy book-keeping leads to errors and will quickly drain any fun out of the game.

Instead, you have combat turns, and easy to remember rules like "you get one attack per round unless you're too busy doing other things", and then the turns just proceed in more or less the same way. Finally we decide that a round is about 6 seconds of game time, and we're good to go. Of course, this doesn't work for longer timescales; you wouldn't want to measure the time the travelling circus is in town in combat rounds.

So in addition to a short timespan, we have to consider longer timespans. Now, in traditional pen and paper games, this is straightforward, since you can pretty much accelerate or slow down time as the game master chooses, generally with the consent of the play group. It's simply enough to say that the circus will be in town for a week and be done with it. There is no real correlation between real time and game time in tabletop games.

Of course, we're dealing with computers. A computer can easily work out the details of one attack taking 3.2 seconds and another taking 4.5 without resorting to combat rounds. Many computer games still use them, especially d20 adaptations, for various reasons; maybe because that's what people are used to, or because it makes the math easier for humans to follow, or in order to stay true to the source material. For whatever reason, we don't have to, and I'm going to opt not to.

But here's where our problems begin. It's easy enough to say that an attack takes, say, 3 seconds. It's an arbitrarily chosen number, but it's in the ballpark. But... are we talking real-life seconds or in-game seconds? Presumably, we mean in-game seconds, because that's how long the attack is going to take. But as already alluded to, in-game seconds don't correspond to real-life seconds.

This may not be immediately obvious, so let's explain why. Imagine that one second in-game corresponds to one second in real life. Thus, a day in the game is a day in real life; a year in the game is a year in real life. It doesn't sound that bad until you consider the implications.

Perhaps most problematic is travel time. Moving between locations in a game world like a MUD is generally done by just entering "north", "west", or whatever other direction you want to go, which takes you to another "room" nearby. This process is generally instantaneous, because, well, no one wants to wait the 10 seconds of real time it would take to actually walk over to their destination. In other words, we ignore the time it would actually take to travel between rooms for convenience purposes. This is especially important if you want to implement ship travel, for instance; no one in their right mind would stand for waiting several real life months to travel somewhere by ship.

Another problem arises with activities like crafting. Say, for instance, that we want to try out our brand new Cooking skill and bake a cake. In real life, a simple cake is about half an hour of work plus half an hour or so of oven time, for a total of about an hour. Can you imagine spending an hour in-game just waiting for a single damn cake to finish? I know I wouldn't; that's just not fun, and thus not good game design.

So, maybe we shouldn't be pretending like an hour in game is an hour in real life. Maybe we can compress time, so that an hour in game time is only a few minutes in real life, making the process a lot more bearable; in essence, we're linearly scaling down how long things take to make things more comfortable for the players. An hour in real life can be six hours in the game, making a day four real-life hours. A few days in real life might correspond to a month in the game. Or indeed, any other scaling we like can be made to work.

Disaster strikes; this doesn't work either. Remember our combat rules? Those 3 seconds (game time) it takes to make an attack against a foe has now been compressed down to a mere 0.5 seconds (real time), meaning battle is going to be over way before the player even has a chance to react. But hey, maybe we can get away with it anyway; perhaps people's suspension of disbelief is enough to allow for an attack to take 3 seconds (real time). Maybe 3 seconds isn't that realistic anyway.

Of course, there's still the problem of indicating time to the players. Say that we're petitioning a priest for a blessing in the game, and he tells you to come back in 5 days (a holy day, you see) for the blessing. He means 5 days of in-game time, of course... which is about 20 hours from now in reality. Making this conversion is quickly going to confuse people; not to mention it's nothing but meaningless rote work which should not be imposed on players in the first place. And once you get to bigger timescales, like months or years of game time, it's only going to get worse.

All right, so maybe compressing time isn't the answer either. But what is? Can we find some lucky middle ground? Should we discard notions of having consistent timescales at all, and hope that people's suspension of disbelief will always be enough to cover any discrepancies? After all, any player would already have to exercise it thoroughly to believe many of the things that take place, such as instant room travel.

Thoughts?

Comments

1
Nebet On March 30 2008 (March 30 2008 05:57)

Well, if you look at a game as a story, I'd say that it makes the most sense to do it the way stories do: Accelerate time (and indicate that you are doing so - "Three days pass") when appropriate, and slow time down for things like combat. Our subjective perception of time is variable, anyway, isn't it? We're used to books skipping to the interesting parts, and less time is given, in terms of reading time, to a three-day here-to-there trip than to a three-minute swordfight.

So do you want your game to be like a narrative, or like a step-by-step manual (reality)?

A lot of the complication comes in when you have multiple people playing at the same time, but not necessarily together, because then if you accelerate or decelerate time for one person (as opposed to simply having things happen unnaturally quickly or slowly while time continues unaltered) it puts them at a different point in time from the rest of the players. With this game, would that be an issue? Or would each player (or party) be on their own timeline?

Appropriate CAPTCHA: wingmen

2
Peter C O Johansson On March 30 2008 (March 30 2008 10:30)

Since this is all about a MUD, the fact that we have multiple people playing at the same time was kind of implied, I thought. Both timescales have to work at the same time.

3
Dan On May 2 2008 (May 2 2008 01:19)

You seem to want a time system that applies to everyone equally (is consistent), and yet allows a player to skip, or fast foward, the boring stuff (for variable definitions of boring). That's inconsistent, unfortunately. It's the same reason that real-time multi-player "Matrix" games don't work. Slowing down or speeding up the game mechanics works fine if I don't have to share my timeline, but as soon as multiple players come in timelines get out of sync. Game makers are reduced to letting you move faster than others for a while (see "force speed" in the Jedi Knight games), but that doesn't get you the equivalent of bullet-time (unfortunately).

The only alternative I can think of is non-linear time. Summary: Don't use a time-line, use a time-curve.

Specifically, some flavor of the power law. Here, the further out in time an event is, the quicker it approaches. As the event (chosen time) approaches, it does so more slowly until, at a threshold you choose, game time and real time can "meet", and things happen just when you would expect them to.

There are a couple of nice features you get if you try this. First of all, the power law and related functions are scale invariant, which means that you don't get any sudden "jumps" in the passage of time (except possibly near that threshold where game time and real time meet). So time doesn't behave quite as you're used to, but things are at least predictable.

The second, and related benefit is the computer can help out with the heavy lifting here by translating for the user. Indeed, you almost have to do this, as we're not built to keep track of non-linear time

For example: the priest says, "Come back for your blessing in 5 days." Then, your Personal Demonic Assistant says (privately), "That's 7 hours, 14 min from now, boss. Want me to remind you when it gets closer?". Or some such.

To put it another way, when we say that something is going to happen one (real) hour from now, we mean that it will happen in 3600 seconds, each of which refers to the same amount of (real) time. If we start using a time curve instead, only the current second takes one full (real) second. Future seconds refer to smaller amounts of time.

So, combat will take place at approximately real-time, but travel (seen in terms of when your arrival happens) gets accelerated.

4
Anonymous On May 2 2008 (May 2 2008 11:45)

If you actually want to keep multiple users interacting, conducting activities which take anywhere from 3 seconds to 5 days, the best option you have is (as mentioned by Dan) a non-linear scaling of time.

On the other hand, if you want to grant the user a "free ride" of sorts, you could take an approach similar to Neverwinter Nights and others (presumably, resting takes 8 hours...but you don't stop everyone's action by making them wait 8 hours while one player rests in PvP). Split actions into real-time actions and non-real time actions. Non-real time actions are interrupted whenever someone interacts with the player in a real-time action (attacking someone while they sleep). If not interrupted, they proceed at a highly accelerated pace. You're free to specify the pace. If the time scaling is done correctly, players will still interact at a level of real-time interactions. When two players are in the same area but not interacting, or there is only one player in an area, time essentially passes much more swiftly for them.

A simple implementation might be thus - User A cooks a cake, which takes 100 minutes real time. Instead, it will take 1 minute game time. User B comes up to User A during this minute (say, 40 seconds later). B swings his sword at A. A's non-real time action is interrupted, and he is put in a "combat mode" or some such in which he has a more limited set of choices (you can't bake a cake while someone's attacking you). For the duration of this, 1 second real-time is 1 second game-time. A smites B with great justice, and is once again left alone. He now resumes baking his cake, which has ~33 minutes real-time remaining, or 20 seconds game time. Alternatively - A smites B with great justice. A has lost progress on his cake, however, and must start over.

There are benefits and negative to both these approaches (Dan's, and the one I just outlined); depends on what sort of players you expect which you think will work better.

Interesting post though; made me think about how various games I've played have approached this problem.

Add comment

Markdown may be used.
You may enter a name for yourself. If left blank, the comment will be signed “Anonymous.”
Optionally, you may enter an URL to appear alongside your name.
Enter the word shown in the picture above.