Bullfrog 2 Update

Just thought I would update anyone who is still subscribed to this feed here at MakeMacGames.com.

I’ve moved my active blogging about game development to my company’s blog to keep everything together. It’s become easier over time to maintain only one blog.

On that note, I just posted a small Bullfrog 2 development update and teaser screencast to share our progress. So, if you’re interested in following along, you may want to head over to the Outer Level Blog and subscribe to the news feed there.

GBGames On Object-Oriented Game Design

GBGames has a nice introduction to object oriented design for game development.

GB does a nice job of summarizing some basic concepts that can be incredibly powerful for simplifying your object model as well as future-proofing your design.

I’ve used these techniques extensively for application development in my day job as a C# developer. As GB mentions, it’s very easy and tempting to fall into the deep class design mode, but if you can resist and take the time to turn your classes sideways, your classes will grow in power and flexibility right before your eyes.

Thanks to GB’s reminder, I’ll now remember to use these techniques in my games.

Bullfrog: Next Release

I started work on the next release of Bullfrog this weekend.

There was a short list of bugs and features that I didn’t have time for prior to the OMG Cup deadline. So, while I’m brainstorming on what the next project will be I thought I may as well try and knock some of the items off the list.

One of the top items on my list was to build Bullfrog as a Universal Binary. This turned out to be pretty easy to do, but the hard part is getting my hands on an Intel Mac so I can test the build prior to releasing it.

I’m considering the “big upgrade” from my 800Mhz Titanium PowerBook to the new MacBook Pro. But, the financially prudent approach would be to head over to the local Mac retail store and give Bullfrog a test run on a display model.

I’m also considering making the jump to submitting the game to VersionTracker and similar download sites. I’m very interested in what kind of traffic this would pull in, especially for a simple freeware game. It seems like this would be a good test and learning experience.

Bullfrog: A Postmortem

When iDevGames.com announced the 2005 OMG Cup in October I immediately considered entering. A contest was just the right motivation for me to actually start and hopefully finish a game project.

Aside from needing an idea, there were a few hurdles to tackle. Not only was this my first game project in almost fifteen years, it was also to be my first Mac project, written in Objective-C and Cocoa. I was also aware that most games for the platform are written in OpenGL because of the sub-optimal performance of CoreGraphics and Quartz Extreme. Though I have been a professional software developer for twelve years, I felt that learning OpenGL in addition to Cocoa was too much to tackle in such a short time frame. So I had to make do with what Apple’s API would provide.

Budget was the next hurdle to tackle. Money was limited, I had to operate on a very small budget. I would either need to create all my own artwork and sound or acquire what I needed for free or very cheap. To help limit the amount of artwork I would need, the game would have to take place entirely in one location.

Once I decided upon the basic game idea, I put together a very rough prototype to get a feel of how the game would play and whether it was something I could finish inside the six week deadline. Armed with my prototype and a rough project plan, I dove in.

Here is what went right and what went wrong:

The Good

Cocoa

Apple’s Cocoa framework is amazing. It does have a steep learning curve, but once I got a feel for how things fit together work became a pleasure. CoreGraphics may be slow, but it has some great functionality built in. There were many times where I feared having to write a very complicated set of routines to get something done, but a quick search through documentation lead me to a class or method that did exactly what I needed. While I did have performance issues to work around, especially on older machines, I wouldn’t hesitate to use CoreGraphics for simple games that don’t have intense animation requirements.

Collaboration

I’ve written extensively about my experience working with my graphic designer. While I was very happy with the quality of work and the timeliness of delivery, the best part of working with someone else is the additional input an objective observer can provide. My designer provided many ideas and suggestions that had very real and positive impacts on the game’s design.

Bullfrog was originally going to have a simple black background. Jordan would have nothing of it. Before I knew it he’d sent me a very nice background image with some ideas on how to use it. Ultimately, the background changed a bit and ended up being a simple window dressing for the game; but, I ended up with some very cool ideas for the next version.

The Bad

Sound

There were two significant disappointments on the sound front for Bullfrog. First and most significant was my decision to go cheap (read free) for all my sounds. When selecting the sounds, each one sounded adequate. When put together and repeated many times during game play they became annoying rather quickly. Even if they don’t annoy, the overall sound mix does not meet my standards. Next time, I pay for quality tracks. In hindsight, I would have been better off with no sound than bad sound.

The second issue was technical. While Cocoa’s sound support is adequate for playing simple audio, performance and functionality is the pits for game development. I would consistently see significant frame-rate drops when more than a couple of sounds were played concurrently and the API provides very limited access for controlling how the audio tracks are played. There is no support for fading or panning. Next time I’ll definitely look into alternatives for my audio needs.

Tiger Only

Unfortunately, somewhere along the line I boxed myself into only being able to support the latest version of Mac OS X (Tiger). The game would execute just fine on 10.3.9 (Panther), but something with my handling of images caused graphics to disappear when animated. Since I don’t have a long history with Mac development, I have no frame of reference for what could have changed from 10.3.9 to 10.4 in the graphics handling. I suspect it was the png support changes I read about somewhere, but I didn’t have the time or the experience to hunt down the problem within the contest timeframe. Thankfully, the OMG Cup only required Tiger (10.4) so I settled for having to fix the problem after the contest. Since the game was targeting simple game play for casual and young players, I need to target older OS X versions since this audience is more likely to fall behind in operating system versions.

General Observations and Lessons Learned

Play Testing

Play testing is critical. I don’t mean testing for bugs, that goes with out saying. I mean testing game play. Is the game fun? Is it easy to learn? Do the controls work as designed? Is your game “user friendly”?

It was fascinating to watch someone play my game for the first time. Especially people who are not hard-core game players. One of the first things that jumped out was my choice of control keys. I had gone with the first-person-shooter standard of ADWS for left, right, forward, back. Bad choice. Simply choosing the more obvious arrow keys made a world of difference. Get as many people to play test your game as you can. Do this early. Do this often.

Everyone found the game more difficult to play than I do. What I thought would be challenging, others found frustrating. What I designed to be easy, was often just right. This probably varies between games, genres, and target audience to some extent, but I would bet that there is some of this for all games.

Polish is Important

Games that are not polished aren’t done. Developer graphics and sound won’t cut it. No matter how “fun” the game is, if the presentation isn’t professional and polished then the game will disappoint. Cutting corners will only serve to pull the overall feel or value down. See my experience on using free sounds above for reference.

Deadlines are Good

One of the things that excited me about working on my own development projects was the lack of artificial deadlines. I was looking forward to the ideal of only releasing my software when it was done. The reality was indecision and procrastination. Before the OMG Cup announcement, I spent months flailing about without choosing a game idea or creating a final design. I started and abandoned several prototypes and never committed to moving forward.

The OMG deadline motivated me and got me moving. It also kept me working through to completion. It forced me to decide on a game design even if it wasn’t my “ideal” or favorite idea. A finished game is better than a great idea that isn’t even started.

Conclusion

Bullfrog was an incredible experience. I gained confidence in both game development and Mac programming and I learned a lot about myself in the process. Six weeks seemed like a very short time to write a complete game, but I surprised myself with what I was able to accomplish starting from scratch.

The OMG Cup was a ton of fun to participate in and the people at iDevGames.com were an inspiration and invaluable support network. I look forward to trying again next year.

Technorati Tags: , , , ,

Bullfrog Alpha v0.60 Released

A new version of Bullfrog is now available with tons of enhancements. Though a majority of the work went into the refactoring of the cocoa and objective-c code.

These were important changes that allow for adding new bugs in future versions. It also allows me to move away from procedurally built levels to designed levels to allow for better play balancing.

Below is a list of changes that went into this build.

  • fixed high scores bug for adding ties
  • added title to main menu
  • added copyright to main menu
  • added high scores
  • added main menu screen
  • added options menu
  • added round starting screen
  • added round completed screen
  • added game over screen
  • added ‘esc’ to quit game, leave options, leave high scores
  • player can now toggle sound effects
  • player can now toggle ambient sound
  • major code refactor
  • added floating time bonus indicator
  • added floating point bonus indicator

Update: 11/16/2005 — Bullfrog updated to Alpha v0.80

Download Bullfrog

Blogging About Mac Programming

Carlos Camacho, owner and editor of the Mac game developers’ site iDevGames and application developer’s site iDevApps, has posted a nice bit on blogging about Mac programming. He points out two great blogs on general mac programming I have not seen before and gives Make Mac Games a nice little plug.

He also requests that if there are any other blogs out there on Mac programming, that they be submitted to the article’s comments section so everyone can benefit.

Thanks, Carlos!

Bitmaps and Dragonflies

More updates on the game development front. The game is turning out to be pretty fun and challenging. With the new bug types, it makes it very challenging to predict the bugs movement. I have a few more bug type ideas that I’ll be experimenting with that could prove to be quite challenging and interesting.

List of New Features:

  • The game is now fully playable (rounds, score, etc)
  • The frog is now drawn with a bitmap image instead of circles and lines
  • Now has two bug types: gnats (small red circles) and dragonflies (large green circles)
  • Jumping distance has been increased
  • Round time is now set at 30 sec
  • Dragonflies give a time bonus when eaten

Bullfrog Progress

More game development progress updates:

  • Water has been added (though it doesn’t affect game play yet)
  • The frog’s tongue now has a recharge rate, so you can’t simply hold down the attack key
  • Tongue Attack ready indicator via the tongue tip gets drawn
  • Score Board keeps track of bugs, rounds, and time
  • Frame Rate display
  • Game Over and Round Over messages have been added at appropriate times

Latest Screen Shot: