The best definition I’ve ever seen of what makes a good (computer) game comes from someone whose name I’ve forgotten at Electronic Arts, and it is: “Some kind of enjoyable activity combined with an excuse for doing it repeatedly.” I’ve been working on a game in my spare time with the working title of Project Weasel. (The link is not very exciting.)
When I first came up with the game idea I was working on several other games and actually being paid to do so. Most of the games were for children and while they were occasionally technically interesting, I wasn’t terribly engaged. (Luckily my role on those games was not as designer.) The main game I was involved with started out as, in essence, a Tomb Raider clone (Tomb Raider was the new hotness at the time) with the idea that the emphasis would be on the underwater parts (keeping track of air).
Being underwater is intrinsically different and intense in a way that being in a cave or tomb isn’t. I actually still think this is a very good idea for both gameplay and that I had a good storyline (which if anything is even more topical now than it was then, since it involved climate change), but it’s more than I can handle on my own.
After we turned down Electronic Arts’ development contract because it was insufficiently risk free for my employer (hint: don’t be risk averse if you’re trying to start a game development company) we spent nearly two years trying to get better deals from rival game companies by mutating our project into whatever idiotic thing they were into. And failing. (When we told other people in the industry about the EA offer we’d turned down, their jaws dropped. Ah, we were idiots.)
“Eco Guerillas Underwater with Tomb Raider Game Play” (our elevator pitch) eventually turned into something like “Carrier Command style Real Time Strategy, but with Submarines”. (The latter was a completely rewritten game design document with the same title as the first for contractual reasons. Also, in my opinion, a great game idea and a solid design. Oh well.)
Anyhoo, the company gave up trying to break into the game business, sold itself to a consulting company that had been bought by one of Australia’s few successful web startups and then taken it over from within (actually, the developer of the ridiculously bad “Hot Dog” HTML editor), and pretty much disappeared. I don’t even have copies of most of the design documents, although I could probably rewrite them from memory in a couple of weeks.
One day while the lead programmer, the owner of the company, and I were shooting the breeze, I came up with the idea for a game I called “Weasel”. It was inspired by a term used by Jack Vance in his Demon Princes novels. The basic idea is this: an interstellar society will always have a “beyond” — a region of space where people live but the law doesn’t reach. Assuming criminals have access to spaceships, the beyond will be a haven for criminals. “Weasels” were agents of civilization’s police force who would try to apprehend particularly nasty criminals in the beyond.
Of course, somewhere along the line I thought it would be cute if the “weasels” were in fact weasels.
So the idea was, essentially, a “casual” game with variable length missions (you would pick the scope of a mission based on how long you planned to play, and the game would dynamically insert the mission into the sandbox world). This is a ridiculously idealistic game design and the underlying idea (of a sandbox universe which dynamically generated “plot”) has been in the back (or front) of my mind in one shape or another since I was in college. But this time I had an insight would make the the basic idea much more practical than my previous designs (which weren’t much more practical than “Implement an interesting universe. Place player inside. Enjoy.”
Here’s the insight. I think it’s pretty clever. I also think a lot of other game designers have had it. I hope someone takes it and runs with it. Runs a really long way. OK, ready? It’s coming…
The universe is stateless. All the state you need is either attached to the player, or discarded when “out of sight”.
What does this mean? And why is it even worth stating as an idea?
Well, let’s suppose we want to give the player a simple mission, of the form “Find X who we think is in Y. Kill X. Bring back proof.” This is pretty much a bog standard World of Warcraft quest. But in WoW, X is a predetermined NPC placed manually in the game world in advance in Y. The quest is statically designed. If two players take the quest, they both have to kill the same X. To solve this, we’ll have X respawn constantly. So you can kill X (1) inadvertently. Get the quest. Kill X (2) again. And bump into X (3) while looting X (2)’s corpse. This isn’t some freakishly rare thing that occasionally happens and you can ignore. This is something that happens all the time in World of Warcraft.
Now take my idea. The quest is part of the player state, not the world state. So when I get to Y, the game engine, knowing I am supposed to meet and kill X in Y, spawns X — uniquely — for me. If another person gets the “same” quest, it will be to kill Q in R.
If we just implement a dynamic universe without my idea, then once I have the quest the game engine needs to start spawning X in Y hoping that I go there. (Or pick a pre-existing X who is already in Y for me to kill.) X can be killed by another player (or, in a truly dynamic universe, another NPC). Or I may have previously killed X, which is just stupid. This isn’t going to produce very enjoyable play experiences.
Let’s take a slightly more complex example. “Go kill a bunch of Ys and get me a rare and valuable pelt P. You may find them in Q or R.” Another typical WoW quest, generally implemented by giving monsters of type Y some smallish chance of dropping pelt P. So one person goes and kills a Y and gets a pelt first time. Another goes and kills them for days and leaves frustrated. But, because we put the state in the player, we can design the quest so that you must kill at least five Ys in both Q and R to get the pelt, but there’s a set limit to the frustration (the probability of getting the pelt increases by 10% for every Y after the 10th that you kill, say). Or, after you’ve killed five in each place an NPC pops up who tells you about a particularly fierce Y that can be found in S. When you go there, there he is. (And someone else doing the quest might have been sent to D and E and then F.)
But it gets better.
One of the huge problems with creating dynamic universes is building mechanisms for propagating knowledge about the (dynamic) universe through the (dynamic) universe. I’m talking about NPC knowledge. If I want to know where some randomly generated X is in the Universe, who the heck is going to know? Everyone? That’s just silly. No-one? That’s silly too. But if the quest contains the information (ask about X in location Y and you will find Z who knows about X) the problem is solved.
Let’s suppose you’ve killed 1,000 orcs and earned the title “Orc Slayer”. How do people know to call you “Orc Slayer”? Well, that’s pretty easy. Your title is part of your player state. Plenty of games handle trivial stuff like this already. (Hey look, that NPC called me “elf”.)
But let’s suppose you’re doing a murder mystery quest (pointless in WoW since it will be on spoiler sites) where you are sent to talk to A who is supposed to be in B, but when you get to B you are told to go to C. When you get to C, you find A there, dead. But wait, there’s a clue pointing to D as the murderer, a known associate of E who may be found in F. You go to F, beat up E, and get told D is in G. You go to G, kill D, and return to the quest giver for a reward. This is all perfectly easy to build in a completely static way, but put the state in the player and not only can you do this all dynamically, but you can even make things kind of realistic. When you find A, dead, you can talk to random NPCs in the area and the engine would be able to assign knowledge of the crime to them because the game engine knows which quests you’re doing and what stage you’re at. In an MMORPG you could even imagine that the crime might take place in front of other players as you were approaching the area, and you could interview them as witnesses.
I’ve seen this kind of thing implemented in two places. In Arena and Daggerfall missions were randomly generated. It was very crude, but it kind of worked. If you were told to go to Random Building and kill a bunch of Random Monsters when you entered the building, there were the Random Monsters. Moreover, if you were told to kill Random Randomson in Randomtown, you would go to Randomtown and everyone in the town had a chance to know where Random Randomson was…
It’s also kind of implemented in the Grand Theft Auto games in a very simple way. If you commit crimes in front of police you get a wanted level. That wanted level is part of your player state … no matter where you go you’re wanted. Police are spawned (kind of pathologically) based on your wantedness where-ever you are. If you’re swimming in the ocean, police boats appear and shoot at you. If you’re hidden in grass under a pier, police appear and start shooting at you. It’s very crude, but — in a nutshell — this is the idea I’m talking about. Imagine if quests worked like your wanted level and followed you around the sandbox.
* Well, some crimes — like colliding with a police car or carjacking someone right in front of them — running over people or knocking over lamp posts or ignoring red lights or driving at 120mph in a built up area are all perfectly OK)
The title of this post was “Game Designer’s Block”
Here’s my problem. Weasel was conceived as “the simplest non-trivial game engine that would support The Idea”. Then the usual things happened. First, I got interested in aesthetics. (Originally I was determined to use crude sketch graphics for everything, but I just couldn’t do it.) Next, I got bogged down in the hard slog of building a not particularly interesting game engine to support my interesting idea, which I can’t really get to until the game engine is done. (In fact, to prevent feature creep, I planned to completely omit The Idea from the initial game.)
But here’s what really got me bogged down. I got the basics of the gameplay working and, damn it, it’s just not fun. The basic activity has to be fun or all the other crap — The Idea — the stuff that gives you an excuse to do it over and over — well it’s a waste of time. My game needs two basic gameplay components: fly around in space and shoot stuff, walk around on the ground and shoot stuff. And, well, it’s just not fun.
Grand Theft Auto’s basic activity (stealing cars, driving around a city like a complete nutjob, and killing people — either by shooting them or running them over or getting their cars to explode) is a lot of fun. The main reason it’s fun (in my opinion) is that
- The cityscape is sufficiently immersive and real to give you a real rush when you careen around at insane speeds, driving against traffic, weaving between cars, etc.
- The cars handle just realistically enough to be challenging and yet are forgiving enough that you can do crazy stuff in them.
But the problem with space is that it’s basically empty. Flying a spaceship fast is easy. Space is empty. Filling space with asteroids is an option but asteroids are boring. You need to be able to duck and weave around things, and occasionally screw up and explode.
The problem with planets is that they’re really big. I don’t have the manpower to build a bunch of really interesting detailed environments, and randomly generated content is boring. Well, unless it’s very cleverly randomly generated.
So my problem is that I want flying around in a spaceship and blowing stuff up to be fun, and/or walking around on a planet and blowing stuff up to be fun. If I can only make one fun, I’m prepared to minimize or eliminate the other. But so far, neither is fun.
And so I’m blocked and writing way too many blog entries.