What does "Finished" Mean Anyway ?
Wed, Sep 21, 2011At the start of August I started a snakes game and had the mechanics up and running in a few hours, you can see them in action in the original article. I wanted to take those raw mechanics and polish the game until it was ‘finished’, by working on things like:
- a title screen
- a nice menu system
- a nice rendering technique for the snake, food and walls
- a particle system for effects when you eat food, or crash into a wall
- a useful high score table
- a game credits scroll
- make it fun (the .a miracle occurs. step!)
- lots of playtesting and tuning
- perhaps multiple game modes (longest snake, longest survival, collecting stars, multi-snake battles etc)
- sound effects
- music
About 8 weeks have passed since I started, during which time I have played DragonAge2, had the Flu, taken a Vacation, and managed to keep the Day Job. Somewhere in there, I spent about 60 hours total on Snakes - thats not too bad, averaging about 8-10 hours a week, here and there, is pretty good for a spare time project.
But is it finished? - is it bo****ks! (it’s a british thing).
In October, I’m starting a new extra-curricular activity that will take up a lot of my free time, and now I have a hard deadline so this coming weekend (9/25), I’m pushing the final game, ready or not.
At work, especially in a startup, shipping is everything. Finished typically means ‘good enough to ship by our standards’ - that last part is important because different companies obviously have different standards.
When its a personal project, shipping is not so critical, and having high standards can mean you never ship, you polish and polish until you get so bored with it you can’t stand to look at the code anymore.
Polishing Takes Time
Boy, does it take a lot of time!
What Got Cut
For Snakes, I’m disappointed to have to completely cut some of the things I was really looking forward to doing:
- Special Items (speedup, slowdown, shrink, immunity)
- 2 Player
- 1 Player vs AI
- Touch Support
- A Friendly “Game Over” Message
- Replay Last Game (in semi-transparent background) while menu is displayed
What Made It In
… but when I think about all the little touches that did make it, I don’t feel too bad:
- core game mechanics
- custom logo
- custom font
- background graphic
- custom menu with mouse and keyboard support
- menu selection glow effect
- menu transition fade effect
- high score table - including inline player name prompt & local persistence
- high score table - highlight (glow) all entries by current user
- high score table - ability to reset entries
- credits screen - links to all 3rd party resources
- support for having walls on the game court
- food covers multiple cells to help players with weaker hand-eye coordination
- smart food placement to ensure it never overlaps the snake or a wall
- variety of food graphics
- render custom snake head shape
- render custom corner segments
- render subtle shading/sizing effect on snake segments
- display score and high score above game court
- increase current score display incrementally (like a slot machine)
- change high score styles when current player has high score.
- keep current and high score in sync when current game has high score.
- pause game with ESC key
- pause menu with Abandon and Continue options
- additional styles on Abandon/Continue menu so its obvious which is selected.
- prompt for player name at end game if current score is in the top 10
- background menu music
- background game music
- subtle sound fx as you navigate the menu items
- sound fx when you eat food
- sound fx when you reach the high score
- sound fx when you die
- subtle sound fx when you make a turn
- mute on/off feature
- performance work to keep the frame rate at 60fps
- 3 difficulties (Slow, Normal and Fast)
- some play testing and fine tuning (but not nearly enough)
- cross browser support (Chrome13+, FF5+, IE9+, Safari5+, Opera11+)
- sensible resizing to support variety of screen sizes
- integrated FPS counter
- build system to unify and minify javascript and css assets
- a Rack server to automatically rebuild when source files change
- generating CSS sprites for food and snake (using sprite-factory)
- abstracted out audio-fx library for HTML5 audio support
- extended javascript-state-machine with async support
- abstracted resource loading (for sounds and images)
- abstracted boilerplate code into a (potential) game library
- …
- …
- … and more
What Didn’t Work Out
Some things I tried but didn’t work out
- Multiple Levels - it turns out having complex maze like levels makes a Snakes game almost impossible to play. Having a few walls around the boundary is fun, but beyond that it becomes frustrating. So the idea of multiple levels was thrown out, but the internal support for custom levels is still implemented.
What Might Sneak In
And some things I hope to do in this last week before I finally push it.
- Particle Effects - when the snake eats food or dies
Final Thoughts
So, 60+ hours for a Snakes game, spread out over 8 weeks! - I guess I’ve got a lot more practice to do before I think about entering a LudumDare 48 hour Competition.
Better get back to it…
Come back again next Monday (9/26) to play the final game!