Thursday, December 19, 2013

Holiday Slowdown

Version 0.4 Released:

GumBall Fall v0.4: Web Player | Android

With Thanksgiving rolling right into Christmas coupled with end-of-the-year duties at work and home, development has been a bit sluggish as of late.  However, I feel that I've finally pieced enough together to warrant a new release and blog update.

While still a work-in-progress, I think it's actually starting to look a lot more like a real game!

Major Changes from v0.3:
  • Stat Tracking:
    • High scores will be reset in future releases... don't become attached to them ;-)
    • High scores for each game mode/type are now being tracked individually
      • The top 10 of each mode/type are being saved
    • Total gum balls collected being tracked
    • Totals for each color gum ball being tracked
  • In-Game Graphic Improvements:
    • No more BLACK gum balls... welcome PINK into the world
    • First attempt to get the gum balls to actually look more like gum balls and less like simple spheres
    • First attempt at generating EXPLOSIONS when clearing gum balls from the screen
  • User Interface Improvements:
    •  Scores & Stats screen expanded upon
    • Interface reworked to be more modular and scalable to more easily support various resolutions
  • Sound Effects:
    • Chain creation now generates aural feedback
    • Falling gum balls create noise when colliding with objects (if they hit hard enough)
    • Clearing gum balls generates EXPLOSION noises

This Period's Highlights:

Early Feedback Continues to Focus Development:

As always, the latest player feedback to be quite useful. Reddit continues to be the most popular source for Feedback. Most feedback comes from posts in /r/unity, /r/unity3d, /r/indiecode or /r/gamedev's Feedback Friday and it's always enlightening.  This go round, most folks were asking for 'cooler effects and explosions.'  While I certainly agree that things need to eventually get ratcheted up a few notches, I think the key word is eventually.

With that said, and with the game play mechanic being better pinned down, this iteration does see the introduction of several 'pretty' effects.

Internal Restructuring:

I don't know about you, but, more often than not in the software development world, there's always an ever present force urging you to "make more!" "go faster!" and "add these new features!"  Whether that force is your boss or your own desire to proceed, it's always a good idea to take a moment to stop and reflect on what you've accomplished... then improve upon it.

Knowing that I kicked off this project in a hurry (and knowing that I'm still learning C#), I knew that I'd have to tackle its internal shortcomings at some point. I've started that process. A good chunk of my code was reused from Bouncing Bombs!. Many of the internal data structures I was using back then were simply C# structs with all sorts of public members... not necessarily evil, but, not all that wonderful either. Slowly but surely, these structs are being transformed into more fleshed out full-fledged C# classes.  With just the few that I've converted, I can already see the benefits I'm getting. My code is better organized. My data is less spaghettified (yeah, I'm making up that word!). My life is getting easier.

There will always be that siren's song of "just hack something together to get the job done" calling to me. And, I'm sure I'll fall prey to it from time to time. But, if you find yourself being called by that song, when the dust settles, just remember to take a few minutes and revisit that code you've written and figure out how you can make it better!

Introducing Bells and Whistles:

A little bit of polish goes a long way. Don't believe me? Take a moment and check out this video to see how some simple bling can transform a dull 'breakout' clone into something far more epic looking.  Of course, if the game play, itself, is boring or broken, no amount of bling can save your game ;-)   ( Note to self: make sure game play in GumBall Fall is neither boring nor broken ).

Visual Art isn't my strong suit, but, thanks to Unity's powerful particle effects system, I've been able to at least create a few effects that make the game pop a little. Hopefully, as things progress, I can improve (and add more) to these game play effects.

Along with visual art, comes sonic art. aka sound effects and music. When bringing sound to my game, I had a major decision to make: Roll my own audio solution or farm it out to a 3rd party library.  For Bouncing Bombs!, I simply rolled my own simple solution. Unity provides all the basic building blocks you need to integrate simple sounds into your game. It wasn't very elegant nor very reusable in other projects, but, it got the job done.

This time around, I decided to opt for a 3rd party solution. Why, because, I don't want to reinvent the wheel. As a lone wolf developer, I don't have time, knowledge or resources to make everything from scratch. Heck, that's the major reason why I'm using Unity to begin with rather than writing my own engine from scratch. Much like I didn't want to write a full-featured GUI library (thus, I'm using NGUI), I don't want to write a full-featured audio library.  After a bit of poking around, I've decided to give the Unity editor expansion Audio Toolkit from Clockstone Studios a try. They offer both a paid and free version of the toolkit. I'm option for the free version at the moment.

As of right now, going the 3rd party route seems like the right call. In 20 minutes time, I had the package installed and 3 initial sound effects integrated into my game: Gum ball chains explode, gum ball selection gives the player some (hopefully) fun aural feedback and falling gum balls make, lets call them interesting, noises.  Needless to say, the audio clips themselves can be quickly swapped for anything more suitable if I so deem it.

NOTE: From what I can tell, the free toolkit has the majority of the paid version's functionality. however, the free version lacks any concept of resource pooling. From my earlier blogs posts, pooling is something I've embraced during this development cycle. Not having pooling with my audio could come back to bite me. But, I'm suspecting that I'll be able to get away without it because (1) my minimal audio requirements shouldn't be that demanding and (2) if need be, I can always upgrade to the paid package.

I'd be remiss to not point out that bling works just as well on the User Interface side of things. Tweened menus look 100% cooler than static ones. Sound and visual tweaks in your UI help draw the player into your game. I've kicked off my UI creation with that in mind and plan on continuing to bling it out moving forward... but, remember, too much of anything is never a good thing. Find that balance and stick with it.  

GUI System:

NGUI is both a HUGE blessing and a curse.  There's no doubt that I'd be dead in the water without such a robust and feature packed GUI system. Its developer is quick to respond to queries and is constantly evolving the product... and there in lies the curse.  Within the few weeks I've been working this project, NGUI has been updated three times. Each time has brought with it some cool new features and refinements, but, the rapid update cycle has gobbled up much of  my development time. With every new release, there's something that doesn't quite work the way it used to which leads me to spend waaaaay too much time tweaking my GUI code to account for the new changes.

Here's an example... one that I'm on the verge of undertaking. The version of NGUI I'm using (3.0.6) has some cool concepts called anchors and stretching. Anchors let you anchor one GUI object to any other point on another GUI object you specify.  Stretching will automatically grow/shrink a GUI object to the size (or some percentage of size) of another GUI object.  I'm using these two concepts to build a modular and (hopefully) robust GUI solution. My Scores & Stats screen is a fine example. Each section of the top of it (title, last game's scores, gum bank, etc.) are all modules that are anchored to each other and dynamically stretched to fit the screen resolution. I think it's pretty slick, but...

The current NGUI release, 3.0.7, just hit the streets. According to the release notes, anchoring and stretching have been combined into a single entity. i.e. All of the work I've put into tweaking these layouts might be completely for not if I upgrade to 3.0.7... damn :-/

Anywho, I'm probably harping too much on NGUI. I'd much rather have a constantly updated library than one that's just dead code.  Just keep in mind, if you're planning on using NGUI, plan on either (1) sticking with a single NGUI version for the life of your project or (2) leave extra time in your schedule for integrating all sorts of new releases.

That's all for this post. Thanks for reading and (early) MERRY CHRISTMAS!

No comments:

Post a Comment