Tuesday, February 2, 2010

Global Game Jam 2010

Befuddled Game I had the unique opportunity to participate in the Global Game Jam this past weekend, January 29-31. The GGJ is a 48-hour, world-wide game creation marathon. Creating a game is no easy task, let alone doing it in such a shortened timeframe. But we did create games, many of us in small groups across the world, and it was truly an amazing experience to be part of this global event!

The Triangle Game Developers division of the Global Game Jam started off at Icarus game studio in Cary, NC on Friday the 29th at 4:30pm. Unfortunately, due to snowy weather we were not able to remain at the studio location for the entire weekend as planned. We had just a few hours to get together, meet our peers, view the keynote speech, and then get started by discussing game ideas and forming teams. After a short period of discussing our game with our new team members, we left for the evening with everyone's contact information in hand, and that's when the real fun began.

This year's theme was Deception. We had to think up game ideas incorporating some means of deception and, as an additional requirement, had to include one of the following three items in the game: a pet, a set, or a net. The idea our group settled on was a type of Bejeweled clone where players secretly choose the gems they use to score points and can also sabotage each other! Our game is called Befuddled and can be downloaded here, along with other games from the Triangle Game Developers.

One thing I learned from this event is that it takes a LOT of work to complete a game. And a lot of communication. In fact, I think that's one of the things my group did particularly well. One of our team members set up an IRC channel so we could all communicate real-time, and we were mostly connected the entire 48 hours for making design decisions, asking questions, and just chatting in general. Another thing we did really well was picking a simple game idea. It started very basic, but we were able to add on to it, giving it new visual styles and gameplay features as we went along.

One problem we had throughout was, with a basic game, trying to add the right things to make it fun. We know it still needs more playtesting and iteration to figure out the missing "fun" factor. But the best and most exciting part of it all is having something we can call a complete working game. Of course nobody stayed up the full 48 hours, but some of sure did try, and we're all very proud of our successes on this project!

Be sure to check out Befuddled and a ton of other Global Game Jam games by visiting the Global Game Jam website. You can also search Twitter for #GGJ to see posts about GGJ games.

Sunday, January 17, 2010

More Exciting Events in NC!

So I've already mentioned the Global Game Jam, occurring January 29-31, in my previous post. Since then I've learned of two more exciting events coming quickly, so if you live in NC be sure to mark your calendar!

FEB 6: Carolina Games Summit
This one-day event, sponsored in part by The Escapist, takes place on Saturday, February 6th, at Wayne Community College in Goldsboro, NC. The day includes a number of lectures on programming, art, hiring processes, and more. Numerous game tournaments will take place throughout the day. Online registration is highly recommended; you may not be able to get a ticket just by showing up, so check out the website for ticket information.

APR 7-8: Triangle Game Conference
The second annual Triangle Game Conference takes place April 7-8 at the Raleigh Marriott City Center in Raleigh, NC. Dubbed the "leading East Coast event for developers and professionals working in the interactive entertainment and serious game industries," TGC is sure to be the area's top educational and networking event for those interested in the business of game development. This event was established by the Triangle Game Initiative to focus the Triangle area as a major hub of game development. If you live in the area, this is the event this year you don't want to miss!

Are you coming to one of these events??? Let me know in the comments! I'm more than happy to meet new people and look forward to making new friends. See you there!

Wednesday, January 6, 2010

Register for the Triangle Global Game Jam!!!

I just checked the Triangle Global Game Jam website and am excited to see this year's Triangle game jam will be hosted at Icarus Studios in Cary, NC! I have no doubt this will be a very exciting event. The Global Game Jam, hosted at over 100 locations across the world, is a 48-hour game-creation event designed to promote creativity, innovation, and community. The jam will take place January 29-31, 2010.

We need more participants, so make sure to SIGN UP!

Monday, January 4, 2010

Current Project: Tower Defense Game

I've noticed the guys over at Vortix Games occasionally take a hiatus from posting on their blog when busy with a given project. I think this is certainly understandable when you're part of a small team and would like to point out they have done a terrific job on their blog - definitely one to check out for some game development insights. And so I begin this post by admitting I've been doing the same... but hey, it's not so bad because I'm not the only one, right?!

At any rate, I would like to briefly mention the new game project I've been working on. A couple months ago I had the great pleasure of meeting a couple artists in my area, and we've since been working to design and build a Tower Defense game. For the uninitiated, gameplay consists primarily of setting up a series of defenses such as turrets or guns and then watching a flood of enemies attempt to navigate from their start position to a given destination. This is an entirely new game genre to me, but after having played a few games online (such as Whiteboard Tower Defense) and working on our current prototype, I'm excited to see how it will turn out. One thing is sure: with professional artwork it will definitely look better than my basic Pong clone!

This project has some interesting challenges. For example, it is entirely a 2D game; I've been learning 3D development for so long that it is a welcome switch of gears. It is also being developed for the XBox 360 using XNA Game Studio 3.0, which allows me to put my existing C# skills to use, just in a new way. I use C# every day for web development but this is my first experience with XNA. Even though the target platform is the XBox 360, I plan to make it playable on the PC as well.

I hope to reveal more about the game as our agile design/implementation/testing rounds progress. Keep an eye out for future posts, even if they're not terribly frequent. With any luck, the completed game will appear here for your enjoyment!

Wednesday, December 9, 2009

Game Deployment Woes (Just Make It Flash!)

In one of my previous posts I released a Pong clone game that, albeit not polished, was a fully working game and I was quite proud of it. Of course, as sometimes happens with the deployment of Windows-based games, I was dismayed when I learned nobody who actually took an interest (thanks to you faithful few!) was able to run the game :(

That's when the fun began. I asked one friend to make sure he had the DirectX runtime installed and even to reinstall it - no luck. I then learned the C++ runtime was required and had the same friend perform that install - no luck. I tried two different machines with the same installations - no luck. Finally I learned it was not just requirements on the target systems; it turns out I had included a debug version of a DirectX library in my project, which allowed the program to be created and executed, just not in a way that it would work!

You see, as a developer, I have all of the tools required to run any program I create. But other machines don't necessarily have these tools/environments. So I think I'll use the following plan for deploying my next game.
  1. Create a game, coding and testing in DEBUG mode
  2. Change the project from DEBUG to RELEASE mode
  3. Replace DEBUG libraries with RELEASE libraries
  4. Build the project in RELEASE mode
  5. Create an installer project to install the game, the C++ runtime, and the DirectX runtime
  1. Create a Flash game that can be played from a web page in any browser!
Now all I need to do is learn to program a game in Flash...

Wednesday, December 2, 2009

Triangle IGDA Chapter Meeting

Just a quick update, I'm excited to attend my first IGDA chapter meeting and extend a big thank you to my buddy Wes for making me aware of it! Event details can be found here and I've posted the basics below.
Date:  December 3rd, 2009
Time:  7-9pm
Place: Buckhead Saloon
       411 W. Morgan Street
       Raleigh, NC 27603

More info can be found on the Triangle IGDA chapter page, which dubs this event a "holiday mixer" and encourages attendees to bring non-perishable food items to support the Food Bank of Central & Eastern North Carolina.

Hope to meet you there!

Tuesday, November 3, 2009

Pong Postmortem: Completing a Game in 24 Hours!

For the uninitiated (or techno-illiterate), a "postmortem" is a wrap-up discussion summarizing the good, bad, and ugly of a project following its development. What follows is a summary of the creation of my first completed game, a clone of the Atari classic Pong.

My Pong clone was created in 24 hours, though not in the type of all-nighter hack-a-thon you might expect or even a typical three work days. I have a full-time day job, so development is typically done late evenings, but fortunately I kept track of the amount of time spent on specific components. Note that I started with a working Direct3D application from Luna's book Introduction to 3D Game Programming with DirectX 9.0c: A Shader Approach. Here is the hours-to-effort breakdown:

  • 10 Hours - I dedicated the first 10 hours to rendering the basics of the game: the board, two paddles, and the ball. This included creation of graphical "placeholders"; I'm not an artist but I realized I could come back and make the art fancy after everything worked. Getting the ball in motion and then allowing it to bounce off the walls and paddles (Collision Detection) was the second major focus. Finally, the simple mechanic of allowing the player to move a paddle up/down brought the game into a playable state.

  • 4 Hours - The primary effort of the next stretch was to implement a basic computer opponent (Artificial Intelligence), and I started with a perfect opponent whose vertical position matched the ball's position at every moment. When adding different game modes, this perfect opponent became part of the game's Practice Mode. I added the ball's motion blur effect just to improve aesthetics and moved hard-coded values to an include file for easier maintenance and testing.

  • 4 Hours - In this phase I worked on creating a computer opponent that moved more realistically but was also fallible; a perfect opponent gets boring to play against! I added different difficulty levels (easy/medium/hard), which works by choosing a random "reaction time delay" between when the player hits the ball and the computer opponent is allowed to hit the ball. Obviously, as difficulty increases, the computer's reaction time improves to make it a more formidable opponent.

  • 4 Hours - At this point the game was playable with differing levels of difficulty but no clear way of selecting game settings. I created the menu system and added scoring to determine the winner.

  • 2 Hours - The last step before I considered the game completed was to work on the art, which could clearly still use some work! :)

Final Thoughts:
I knew this project would be relatively simple because there are only four game objects to keep track of: two paddles, one ball, and one board. However, due to its simple nature, I was inclined to hack it together quickly and did not follow strict OOP (object-oriented programming) principles. The majority of the game code is in a single monolithic file. I also resorted to reusing an existing class designed to output simple statistics to display text-based menus. But worse, the same class used to show all menus and text became my game state manager since I needed to know which menus had been processed. I then extended it to display current score values and to show which player had won the game. Although I could have put a lot of time into doing it the right way, the purpose of this effort was to get something done. In future endeavors I plan to follow better OOP design.

The best part of this project is that I actually completed a working game! I am proud of the subtle but effective motion blur effect. The game doesn't have all the bells and whistles (seriously, no sounds or music yet) but it is playable, implements Collision Detection and Artificial Intelligence, and has a clearly defined winner at the end. Some may even consider it fun :)