Categories
Game Design

Quick, Easy, and Effective Paper Prototypes

In the Game Design Concepts course, I’ve found that one of the most beneficial aspects is the amount of practice with creating prototypes. Since the class is about video game design, there is a bias that any prototypes would also have to be in software, but the instructor is adamant that computers aren’t needed.

Just taking a few minutes to do a quick assignment or two, it is easy to demonstrate for yourself how useful paper prototypes can be. Right away, you can tell if the mechanics you’ve put together are dead in the water or if you have a good chance of creating a game other people would want to play. On the first day of class, for example, there was an assignment to quickly create a race-to-the-end board game. The steps seemed easy enough:

  • Draw a path and separate it into spaces.
  • Create a theme.
  • Create the rules that dictate how the players move.
  • Create ways to interact with your opponent.

Here’s the prototype I created on my first pass:
Game Design Concepts Prototype

The path winds down the page, although effectively it acts the same as a straight path. That’s Step 1.

Step 2, I decided that the two players are racing to the end to avoid a giant rolling boulder that is following them. I used some pebbles I have in a bowl on my coffee table to act as the players, and I picked a dirty one to be the boulder.

Steps 3 and 4 were interesting. The easy choice would have been to use dice to determine how far a player moves on a given turn, but I didn’t want chance to be involved in the game. I wanted the players to make interesting choices instead. I decided that the players could move 2, 3, or 4 spaces on a turn. If they move less than 4 spaces, however, they can instead place an obstacle behind them for each space they don’t move. That is, a person moving 4 spaces can place no obstacles, a person moving 3 spaces can place 1 obstacle, and a person moving 2 spaces can place 2.

After both players finishes their turns, it’s the boulder’s turn. The boulder will move 3 spaces, but it will stop early if it hits an obstacle. The obstacle is destroyed in the process of stopping the boulder.

The obstacles can be used to slow down your opponent as well. So if you move ahead and hit an obstacle, you destroy it, but have to stop moving forward to do so.

If the player is hit by the boulder, he/she is removed from the game, and the other player wins by default.

Great! That sounds cool. What’s next?

Well, let’s play it!

Ugh. This game sucks and is riddled with horribleness! What I found right away was a problem with one of the rules. If you can drop multiple obstacles…where do you put them? There is only one space behind you, so you can’t place both of them there. So does that mean you can place one behind you AND on the space you’re currently on? Sure…

But that leads us to the fundamental problem with the game. Whoever goes first, wins. The first player can move ahead and drop an obstacle. The second player will move and hit that obstacle, being behind the first player. Then the boulder moves forward and crushes the second player.

So I tried tweaking the rules of movement. Maybe you can only move 3 or 4 spaces, and if you move 3 spaces, you are allowed to drop one obstacle. Maybe the boulder can only move 2 spaces. Unfortunately, these small tweaks still had the fundamental problem. I realized that if I wanted to avoid randomness, I would need to do some bigger changes to make this game work. Perhaps change the level layout so that the players can choose where to move instead of always moving along a straight line? Maybe obstacles can only be moved around and not created?

Regardless of what gets decided, the point is that playing the paper prototype, which took mere minutes to create, made a major flaw obvious. Imagine if you were going to spend time writing code, creating art, and producing sound effects and music for this game, only to find out when it was almost finished that it is never going to be fun without major changes. That’s a lot of time and effort wasted, and it would probably take you a long time to find out that you wasted it in the first place!

Seeing these benefits again and again in the assignments for the course, I decided to apply it to my vampire game project. I already had a basic idea of how the player will interact with the game. The player’s job is to find the vampire’s coffin, hidden in one of the buildings in town.

There will be a town map, and the player could move through the streets and enter buildings. Time plays a major part of this game, so there will be a sun moving across the top of the screen to indicate when it is daytime, and a moon will pop up when it is nighttime.

When it is daytime, the vampires will be in hiding, and the player can move anywhere. At night, however, the vampires will be out and about, and they are invincible. They move much faster than the player, too. There will be a single vampire at first, but each night he survives, he will sire a victim and add to his army. Basically, the longer it takes the player to find the coffin, the harder it will be to survive.

Well, the above sounded simple enough, but what happens when I try to play it?

Prototype for Vampire Game

Above is my paper prototype. You can see the player at the northwestern part of town, and the vampire is hidden in a building at the southern end. The sun is out, and so the vampire is sleeping.

One of the first things I did was the simplest. Let the sun go down and see what happens. Right away, the player can see the vampire come out of his hiding spot. If the player can get inside a nearby building and survive until morning, he’s already won the game because now he knows where to find the coffin.

Huh. Well, that’s not what I wanted. For one thing, I want the player to seek out the coffin, searching each building in turn. If the player can simply wait for the vampire to reveal himself, there’s no tension and no fun. For another thing, I want the player to be afraid to be outside of the safety of a building at night. Staying out at night should be a good strategy for getting killed, not for winning. What could I do?

Aha! What if I limited the viewable part of the screen at night based on the player’s location?

Prototype for Vampire Game

Look at that! Now, if it is nighttime, and the player is outdoors, he can only see the immediate vicinity. If a vampire appears out of one of these buildings, the player probably won’t have time to get away since the vampires are so fast. Otherwise, the player has no idea where a vampire might come from. On top of that, the only thing a player would want to do at this point is find safety. The vampires will find you, and you won’t know where they are until you see one…and if you see one, it’s too late.

Another set of paper prototypes involved the building view, which helped me figure out what the player should be doing when hiding from the vampires. I’ve already started programming, but I’m still early enough in the project that these paper prototypes, which took me minutes to make and play, saved me a lot of pain and frustration. When I can only dedicate so much time in my week to this project, it’s nice to feel somewhat confident that what I am working towards isn’t broken in a basic way.

Categories
Game Development Personal Development

Thousander Club Update: July 20th

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 148 (current year) = 724 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
Game Design

Game Design Concepts

For the past few weeks, I’ve been participating in a free online course on game design. The Game Design Concepts course is taught by Ian Schreiber, co-author of Challenges for Game Designers.

The basic point of the book and the course is that too many people are intimidated when it comes to learning how to design a video game. Schools claim that they would love to teach game design but cannot afford enough computers. Schreiber and Brenda Brathwaite argue that teaching game design does not require expensive hardware, software, programming experience, or any technology one would normally associate with video games. Game design can be done with inexpensive pen-and-paper, dice, index cards, and coins.

The blog is freely available, so you don’t have to be one of the 1400+ participants to read it. People have taken advantage of the class wiki in order to translate the course into multiple languages, making it more accessible! The forum is great for discussing the course topics with other students and getting feedback on assignments and ideas.

From day one, we’ve been designing and prototyping games. A number of the reading assignments outside of the book were familiar to me, such as Greg Costikyan’s article on a a common vocabulary for game designers and Dough Church’s Formal Abstract Design Tools, but when all of them are put together in the context of this course, the readings provided fresh insight, especially since they were immediately applicable to an assignment.

Most recently an assignment asked us to take a video game that did not already have a board game adaptation and create one. The exercise was in determining the mechanics that were key to the game, which should help when you go from a paper prototype to a video game, too. I chose Yars’ Revenge, and while I haven’t played my assignment, the feedback I received on the rules was quite positive. Quite a few of the submitted game rules looked fantastic. One of my favorites was based on Flatspace.

The class continues until August, and it’s definitely fun and practical. I would highly recommend it to any indie game developer. Is anyone else currently participating in it?

Categories
Game Development Personal Development

Thousander Club Update: July 13th

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 147 (current year) = 723 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
Game Development Geek / Technical Personal Development

Learning How to Unit Test

I first wrote about Agile development as a lone indie years ago. I got some good comments, but it still felt like I lacked any real insight into how to be a better developer on my own. A couple of years later, after seeing someone use unit tests first-hand, I wrote about Test-Driven Game Development.

So I immediately tried to use unit tests for my next project, which was my Ludum Dare #12 entry. I stopped after encountering difficulty. I didn’t know what I was doing, and I needed to make progress. I had a deadline.

Recently, I decided to start using TDD to create a simple game. And I wanted to use it for the entire project, not just the easy parts. I created a simple design for a game involving vampires, and set to work.

And immediately I hit a problem. In order to get anything useful on the screen, I needed to use libSDL. How do you go about writing unit tests that make use of a library? I don’t want my test binary to open and close windows, manipulating hardware, and otherwise resulting in weird side effects. Ok, no problem. I’ll just create an abstraction layer between the game and libSDL. I called it HardwareLayer, but then ran into another problem. The HardwareLayer would need to use libSDL directly, so all I’ve done is put the hard-to-test code in a new class. Well, maybe I can make an interface, but how does one test-drive his way to an interface? I didn’t make anything easier for me at all. Unfortunately, my lack of experience was going to bring this TDD experiment to a standstill.

But I pushed. I checked the book Test Driven Development: By Example but couldn’t find any information specific to what I was trying to do. I tried to find a TDD-centric IRC channel, but none existed that I could find. So finally, I threw out my question on Twitter, and within moments, I had a response from an expert.

Brett Schuchert of Object Mentor took the time to write up a blog post on TDDing an Interface. While his example was in Java, it was eye-opening to see how TDD gets done in a somewhat real-world example. I was able to make some progress, but still had the problem of using libSDL at some point. My inexperience questioned whether I would be using unit tests on the code that simply delegates to libSDL calls.

And Schuchert once again spent an evening writing up another blog post about hiding global methods, and this time he even used C++ and created a working project! He claims that the effort to get everything under test was simple to do since most of the issues I was having are idiomatic and therefore pretty easy to solve.

In our discussions in email, Twitter, and the blog, I had the insight I needed. I’ve since purchased Working Effectively with Legacy Code since a number of the issues I had involved dealing with untested/untestable libraries. If it is so idiomatic, I should know it, too. The book would have been very helpful with issues I’ve tried to deal with in the past, so I look forward to applying my new knowledge going forward.

Since those posts, in the time I’ve been able to dedicate to game development, my test binary doesn’t make calls to SDL directly, and my actual game does. I might still do bizarre things when it comes to TDD and unit testing, but I’m making progress that I’m reasonably confident is correct and working at all times. It helps that I recently participated in a three day TDD workshop that the Day Job sent me to, but I found that the most beneficial part was doing exercises with someone available to say whether or not I was going about it correctly enough. In fact, even the Bowling Game Kata makes a lot more sense to me as an exercise. That is, I get it now.

Categories
Game Development Personal Development

Thousander Club Update: July 6th

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 144.25 (current year) = 720.25 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

I did minimal work on the vampire game, but it was on purpose. I had a mini-vacation to celebrate Independence Day out of town. Now that I’ve returned, I am getting back on track, although this month is filled with vacation time so I don’t expect too much game development productivity.

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
Game Development Personal Development

Thousander Club Update: June 22nd

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 142.25 (current year) = 718.25 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

I’ve been putting in some good work on my vampire game, making significant progress and writing unit tests along the way. I hope to have some screenshots in the coming weeks.

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
Game Development Personal Development

Thousander Club Update: June 15th

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 137.5 (current year) = 713.5 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

I spent more time working on the vampire game, specifically driving the development with unit tests and learning how to do so along the way. I’ll have more to say about that topic later this week.

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
Game Development Personal Development

Thousander Club: June 8th

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 133 (current year) = 709 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

I worked a bit more on my small vampire game, although I was running into trouble with unit testing. There were a couple of development sessions in which there was either no tangible result produced or it was thrown away. I initially felt as if those sessions were a waste of time, but they did provide insight into what I was trying to accomplish.

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
Game Development Personal Development

The Game Development Habit

This past week, I decided to focus specifically on the habit of doing game development, mostly programming, for an hour a day. At some point each day, I sit down with my laptop, and I refuse to allow any distractions to stop me for at least an hour. I could do more, but I should do at least that hour per day. I can easily wake up early, do my hour, and then go about getting ready for the day job. Then I also have the evening free to either work on game development or relax or focus on some other task. Successful authors will write a set number of words per day. Successful direct marketers will write an hour per day. Why not borrow this habit for game development?

Since the important thing was developing the habit of daily game development, it didn’t matter too much whether I accomplished a little or a lot in that hour. That is, if I wrote a bunch of code that I’m unhappy with and end up deleting, it’s still better than not having written it, not having learned from it, and not ever seeing a better way afterwards. I’m not hacking, of course. I’m simply saying that if one day happens to result in worse quality than others, I’m not going to see it as a setback since the important thing is that I produced something rather than nothing, which is what I usually accomplish.

The bad news: I only did 5 hours. Out of seven days, I kept the practice up on five of them. One day I woke up late, and when I thought I could do my hour in the evening, I was reminded about a charity event I planned on attending. On another day, I also woke up late, helped some friends move, and had hardly any free time that day.

The good news: since I usually do 0-2 hours per week, five hours is still an improvement. Also, these were high quality hours. I made more progress this past week than I have in the last few weeks.

So what have I learned? Regular game development means sustained focus. When you work for an hour per week, it’s easy to be distracted or feel confused when you finally do get back to working on game development. If you do it each day, however, it’s easier to remember what you were doing from the previous session. Wednesday’s hour isn’t standalone. It has the power of Monday and Tuesday’s hours behind it to give you momentum as you work. Also, if you don’t finish something in a session, you know you will tackle it tomorrow.

Duh? Yeah. But there is still something about experiencing both cases and seeing the difference to really make it clear.

A surprising benefit: I felt better about doing other things with my time. Once I got my hour in, I was at ease with taking time to read, wash dishes, talk to a friend on the phone, or go out. Normally, I’m in a constant state of unease about doing anything because I always feel like I should be working on game development. At the end of the week, I find time and time again that I’ve only worked on the act of creating a game for an hour or two at most, and the next week I just feel worse when it happens again. This past week, however, was anxiety-free for the most part. Go to a cookout and then to a birthday party later? I already did my hour this morning, so I’m good to go! I felt good about accomplishing that hour each time, too.

It would help if I could do the hour at the same time each day. Ideally, it would be first thing in the morning. I used to wake up at 5:30AM every morning, but I fell out of that habit some time ago. Relatively recently I managed to wake up at 6:30AM consistently. The problem is that the previous evening’s activities can affect my ability to wake up early, which means that if I was out late with friends on Wednesday, Thursday morning I’ll be rushing to get ready for the day job, and then I’m depending on tackling the hour of game development in the evening. Of course, the whole point of waking up early is to get a head start on the day, when no one else is up and capable of distracting you, so waking up late can cause a domino effect on at least part of the week.

I’d like to see my habit provide me with a baseline of game development hours. I should always accomplish 5-7 hours for the Thousander Club each week, and on more than one occasion I should be able to double those hours with my weekends and evenings easily.

I’d say this week was a success, and I’m looking forward to seeing what I can accomplish after a month of daily game development.