Planning for the Parking Garage


Probably the biggest lesson learned from Venture the Void is to make a game accessible. The gameplay itself can be complex and varied but the player needs to feel they can interact with the game in a natural way. I guess you can think of it in terms of the "third wall"; you want the player to mentally be in front of the third wall, i.e., on the stage. For that to happen the third wall itself (game controls and interface) should be as transparent as possible.So I'm creating a tutorial area! A bit artificial in some ways, but by doing this I can be certain that the player understands and is aware of the main game controls.This fits naturally into the scheme of things, as I had a parking garage laid out in maps and in the story but not in the game. It's the first area you encounter and you can't return to it once you leave so it's a natural place to start. First I design the area:Once I've implemented the area visually and put some of the more obvious objects in, so that I can see how it will "feel", how do I plan the gameplay for it?I make a dotfile, which is input for GraphViz. I start by laying out some of the things I want the player to learn, without connecting them:learn_walk [shape=invtriangle color=red]; // learn about walkinglearn_click_objects [shape=invtriangle color=red]; // learn to click things to interact with themlearn_click_keyword [shape=invtriangle color=red]; // learn to click on a keyword...The shape=invtriangle is visual language for "motivation" which is the most abstract sort of node. In this case I've used it for what I want the player to learn.Next I put And I put lines for objects you can interact with, that I know will be in the parkade:explore_parkade [color=red];interact_samscar [color=red];interact_glovebox [color=red];interact_vendor [color=red];pay_vendor [color=red];In brief, you can explore your surroundings, interact with Sam's car, check his glove box, and interact with a ticket vendor. These are just unconnected ideas I have surrounding the parkade and is a natural enough place to start.Next, though, I can start to connect them. For instance, you'll see Sam's car quite conspicuously as you explore the parkade, and in order to interact with it you'll need to learn toclick objects:interact_samscar -> { learn_click_objects; explore_parkade };Later on, I introduce elements in order to fulfill a purpose: for instance I need the player to learn that in addition to clickable keywords, they can try stuff by typing. My idea then is after you insert change (found in the glovebox) into the vendor, it refuses your ticket. A window pops up suggesting you "kick" it, which you do by typing kick while you're interacting with it. At that point, it gives you a ticket (item_ticket):pay_vendor -> learn_insert_item; kick_vendor -> learn_type_keyword; learn_type_keyword -> pay_vendor;item_ticket -> { kick_vendor; pay_vendor }In short, to pay the vendor you have to learn to insert an item into it (there is a drag-and-drop interface for this). To get your ticket, you have to kick it, which involves learning to type a keyword in. The arrow from learn_type_keyword to pay_vendor may seem mysterious, but all that it means is once you pay the vendor, I trigger the tutorial window explaining that you can "try sum'm" by typing a keyword in. Finally, if you've paid the vendor and you've kicked it, you get your ticket.The final dependency graph looks like this:

2009-01-27


◀ Back