I've posted about graphviz in an earlier post. Basically, I find it immensely useful to sketch out gameplay ideas in terms of dependencies.
Suppose you have an idea for your game, a "flower boss". To defeat this boss, you imagine the player attacking it with a fertilizer bomb. In Graphviz:
flower_boss [shape=octagon]; // we want bosses as octagonsflower_boss -> fertilizer_bomb; // beating the flower boss depends on the f-bomb
fertilizer_bomb [shape=box]; // items will be squares
Graphviz will draw this as a octagon of the flower boss with an arrow pointing down to the fertilizer bomb:
It might not seem like much. But the important thing is you've encoded something specific about your game. Later on, you're going to have to figure out how the player will get this fertilizer bomb.
By doing this iteratively, you can organize your ideas. You will start to see how the different pieces of your game fit together. You can even see if things are getting ugly, like I did in the following diagram:
Here the problem is it's highly horizontal. A lot of players will say they value nonlinearity but too much of it is just overwhelming and confusing. As well, too much nonlinearity will destroy any sense of flow or progression within the story.
If you just have to complete 100 tasks in any order, that interrelate in unpredictable ways, you're going to feel less than compelled beforehand and less than satisfied afterwards.
The beautiful thing though, is even with an ugly graph there are parts of it that will crystallize. You immediately get ideas suggested to you for genuinely interesting events, quests, and relationships. You can spot things that seem a bit out of place or wacky.
Another thing I do is put "want" nodes. These are actually maybe the most important nodes, and represent the player's desire. A want node "deliver_letter" pointing to an npc "npc_joe" means that when the player interacts with Joe, they should end up wanting to deliver the letter. Simple as that!
I've also realized that "want" nodes map very nicely to my "notes" system. So this design document works on a few different levels.
This graph is the product of almost a week of work. It's a wonderful thing because it's specific and at the same time very "light". I jogged and jostled nodes around and could very easily imagine the gameplay flow as I did so. You can see, this one looks much more managable.
Everything flows so logically, and for the most part is balanced. It's less linear than you might expect, but there is a definite story progression.
Now I get to implement it! =)