Hi everyone, about a year ago I moved to Amsterdam and started a company Spotted Zebra. Since then I’ve released versions of Adlib and Petunk for Windows 8 and am hard at work on a third game titled Scramble Legends!
I’ve finally gotten back into blogging about game development. However this time my posts will be on my new blog: Spotted Zebra’s blog. I’d like to invite you to join me as I explore the design and development of Scramble Legends in a series of blog posts: Making of Scramble Legends. Please be sure to update your RSS feeds as well!
I hope you’re all creating awesome games and look forward to sharing more details about my experiences.
Hey everyone, I hope you’ve been busy working on your projects. As for me, I’ve been helping my friend Jason Lust over at Stellar Games port Petunk to the iOS platforms. I honestly can’t take much credit here. Jason has put a ton of work into this project and as a result I feel that the iOS version of the Petunk is the best one yet. Anyway, if you have an iPhone, iPod Touch, or iPad please check out our game! If not, well, please share Petunk with your friends. And of course, there’s always the web version of Petunk, too.
Over the weekend I locked myself away at the Art Institute of Seattle with the hopes of creating a compelling game in 48 hours. Now that the Global Game Jam is over I’d like to share the fruit of my labor and some parting thoughts.
Eat, Prey, Love
The event’s theme was “Extinction” so we all had to come up with game ideas around that concept. My team settled on a puzzle game where you match different links in a food chain to balance your ecosystem. We call the game Eat, Prey, Love. Click on the screenshot below to try it out!
Rather than telling you all about Eat, Prey, Love I thought I’d take a step back and reflect on the process of making it. After all, you can always click the play the game and see it for yourself.
What Went Well
This year, I’m happy to say that I think a lot went well with this project:
- I found an excellent set of teammates. Justin, Luke, and Nicole were all very talented and contributed a ton. What’s even better is they were a blast to work with. Thanks guys!
- We picked an achievable idea. Instead of trying to create a more complex simulation or go for spiffy 3D graphics we settled on an idea that was pretty well understood and easy to execute. It helped that I have experience making match-3′s, too.
- The tools. We decided to use C# and XNA. Both Justin and I are experts in the language and have made several games with XNA, so we didn’t waste time learning about our tools.
Overall, my main goal for the game jam was to make a polished game I could take pride in. Thanks to everyone’s hard work I think I achieved that goal.
What Went Wrong
I really don’t think a lot went wrong during the weekend. Still, in the interest of balance here are a few bullet points:
- The gameplay didn’t turn out as fun as I had hoped. I thought that a bejeweled-like match-3 mechanic would mix well with our ecosystem idea. In the end, it proved too difficult to remember what things match and not clear enough how matches impact your ecosystem.
- Getting feedback. We didn’t ask other people to play our game often enough throughout the jam. I think if we had gathered more feedback — especially from non-jammers — our game would have been more fun.
- Not designed for web. This is a pretty small complaint, but as we wrote the game Justin and I did not think about porting it to Silverlight. As a result when it came time to do so a fair amount of code needed to be rewritten. We should have researched the constraints sooner and built our game with them in mind.
Overall I’m really happy with what our team was able to accomplish during Global Game Jam. I think our game is really well polished considering it was made in under 48 hours, and I believe that the underlying idea — a game where you have to balance different species in order to preserve the natural order — holds a lot of potential. In addition, I am really happy to have gotten a chance to work with such talented and friendly people!
So, what were your experiences like?
Recently, while working with XNA I came across a few classes I hadn’t noticed before. It turns out that interfaces I often write myself, IUpdateable and IDrawable, already exist. When I found them I wanted to know more. They rarely appear in the MSDN code samples I’ve seen, and searching online, it appears most people are as perplexed as I am about what to do with them. So after playing around with these interfaces and their sibling the GameComponent here are some thoughts on what they are and how they fit into a larger project.
The GoodThe starting point for a game in XNA is the Game class. It so happens that this class has a collection of GameComponents which manages updating and drawing each GameComponent. Because of this making your game objects GameComponents seems like a good way to hook directly into the XNA game loop.
In fact, it almost feels like adding DisplayObjects to the stage in Flash as GameComponents have a lifecycle which the Game will follow. What this means in practice is that as long as you’re dealing with GameComponents it’s really easy to add things to the game. Want to add a tween? Just create one and add it to the list of GameComponents. No need to hold a reference or manage its life cycle.
The BadIn my book those are some pretty compelling features. So what’s not to like? In my opinion there are three main problems with the GameComponent class which make me recommend against adopting it throughout your code.
1. Inheriting from the GameComponent class requires taking a dependency on the Game objectIn practice, your game objects will likely need some means to communicate to the game in order to add or remove other game objects, and it would be fair to solve this problem by holding a direct reference to the Game object. However, by using GameComponents you are forced into this decision. This means no event mode or interfaces — no indirection between your game objects and the game.
2. GameComponents need services; Services lead to questionable design choicesGameComponents will often query the Game’s list of registered services in order to function. Due to their fancy name, services sounds rather innocuous. In truth, a service is really nothing more than a global object with a thin layer of indirection wrapped around it. So while I believe it’s possible to write against services without tightly coupling your code to, say, the SpriteBatch. In practice I’ve found services let me be lazy at the expense of good design.
3. Your classes will be hard or impossible to unit testIt follows from the above that in order to instantiate one of your game objects you will need an instance of the Game class. Unfortunately, the game class is sealed meaning that you cannot subclass it or swap out its implementation. In my opinion, if you have to create an instance of the Game class in order to test your game object’s AI then you’ve failed at unit testing. In effect you’re having to fly the plane to test its coffee maker!
ConclusionSo I wouldn’t recommend writing against the GameComponent class, but what about the IUpdateable and IDrawable interfaces I mentioned above? As it turns out both those interfaces are free from references of the Game class. So if they make sense for your project I’d go for it. However in practice, I’ve found that I don’t really need all of the behavior defined in these interfaces. While I feel like the XNA needs something akin to the Stage in Flash I’m not ready to make a deal with the devil quite yet.
Guys, it’s that time of the year again! The days are shorter, the air is colder, and we’re still getting back into the swing of things after the holidays. Of course, that can only mean it’s time for a game jam, and not just any jam but the Global Game Jam! If you’re unfamiliar with the Global Game Jam, it is a 48 hour event wherein game developers break into teams of four or five and try to whip together a working game. Even if you are an experienced game developer, I encourage you to join us; when else do you get to enter this type of high energy, passion fueled environment? To get a sense of what you can accomplish in a weekend check out The Cleaner, a game my team and I created for the last game jam.
If you’re in the Seattle area I hope to see you at the Art Institute of Seattle. Either way, I hope you’ll share what you’ve created! The jam is happening around the world on January 28-30, 2011.