20 August 2011

The issue of Infinite Worlds

We've decide for our game to make a finite world even though "infinite worlds" and "procedurally generated content" are all the rage these days. Here's the rationale behind this decision, using most of the examples from Minecraft (the simplest and clearest game which gives the impression of an infinite world):
 
1. Infinite worlds need infinite time for playing
There's one thing knowing the world you play in is "infinite" (which isn't, technically) and another thing to have the time to explore it and play in it.
One could argue that since most of the people don't really explore one single world for the rest of their lives but generate new random "levels", this is not too far from any RTS game from 10 years ago which could generate random maps, say AOE2. Generate an infinite number of maps and, there you have it, infinite worlds. You spend some time in one level and then move on to the next because your time for playing is fragmented too.

2. Infinite worlds would require infinite content
I have yet to see a game which really implements procedurally generated content in a meaningful way. A big world, mostly void of purpose, is good for sandbox games in which the player is the one filling the world with content (his own goals, creations, ideas). Even so, as nobody has infinite time, there's only so much "content" you can put in as a player before moving on (to the next randomly generated world, or another game).
You could imagine a content generation algorithm to have randomly generated quests; in theory, this looks like such a good idea. The implementation could be somewhere along the lines "the player has the following operations available: kill, pick up, bring to, avoid, etc.; pick a random combination of operations, pick random points for each operation and name all that a quest". The problem with that is that nobody plays a quest for the operations, they play it for an external purpose; the quest is just a guide or a way to get to the player's own destination.
In Everquest 1 almost all people who started in Freeport (one of the game's starting towns) had to smack rats just in front of city's gate; and you had to kill quite a few before leveling up enough to get out of that zone. The question is why people did it? The player's real purpose was "I want to level up" because even if you could say "the player kills rats because he's mad on the rat-kind" that could hold true only for the first 100 rats. The purpose is not in the quest steps, the player does a quest because he has a personal purpose.
That's the thing which prevents procedural content to be meaningful, at least for now. In time, the players see the patterns and that's the moment everything start to fall apart.

3. You can't have any kind of simulations on an "infinite" scale
There's a reason why mine carts don't work in Minecraft if the chunk they're in is offloaded to disk; or why the crops don't grow if you're far away from them. Put simply, if the data is on disk it doesn't change.
We have evaluated some tricks that could make a simulation of any (reasonably big) scale work. There's many ways to approach this but they all have a stopping point: multiplayer.
For instance, the very old game Elite managed to cram data for an extremely big world and the game code in a few kilobytes of RAM and still give the illusion of a living universe but there was no multi-player at the time.
  • You could offload the world but run all the simulation code in memory. That could work if you know how much "content" each player would put in the world. Sooner or later you'll hit physical limits (memory space or computing speed) and the illusion of infinity will end. Also, multiple players changing the world will complicate things beyond any reasonable way of managing them (synchronizing states, for one).
  • You could simulate the expected behavior and state of each piece of content. In a single player minecraft world, if I'm not near a mine cart, it doesn't matter for me where it's at, it only matters where I expect it to be.
    Lets say I've started a cart on a 2km line; you know the speed of it so let's assume it will reach the other side in 5 minutes. If I go in the opposite direction, you could offload the cart's current chunk saving the cart's state with it (position and speed) and next time you load the chunk, recompute the actual states (3 minutes have passed since cart was saved, so it's current position should be saved position + speed * 3 minutes). For reasonably simple simulations, this could work except when other players are around that cart, in their own instance of the world. In that case, you still have to simulate everything step by step.

4. In fact, players don't care about infinite worlds; they just want a surprising, reasonably big world around them
In Dwarf Fortress, you can create a very big world with all its history. Yet you still pick a very small part of it to play in, and that's OK. I haven't seen anyone complaining yet that "I can't make a 2 million by 2 million squares fortress". Same for Spore's galaxy, it's enough to know "it's there, I could go visit it if I felt like it".

No comments:

Post a Comment