A New Year Brings a Fresh Start
I swear, I’m not going to start this post out with how disappointed I am at my lack of writing output over the last year. Oops…
A possible solution
Something I’ve seen work really well for other people who struggle with producing consistent output are what I think of as “creative challenges”. Things like the “take a picture every day for a year” challenge that a lot of people are doing to improve their photography.
I just can’t face the idea of a “blog a day” challenge, though – I like the idea of something a little more long-form, and a daily deadline would force me to cut corners to an extent I’m not ready for yet.
So instead, I signed up for the OneGameAMonth challenge. Game design is one of my non-programming passions, so I feel like I’ll be able to stay motivated and really try to see this through. A month is a long-enough deadline that I feel like I can produce something worth examining, and the practical problems and “stuff I learned along the way” should provide ample material for *at least* one blog entry a month.
I haven’t planned the whole 12 months out yet, but here’s what I do know my plans:
- I will create a variety of games in different formats, including video games, board games, and card games
- I will explore different genres in each format
- Everything I do will be open-source on my Github account
- I will write at least one blog entry every month, about the current game
- If I don’t finish a game in a particular month, I will not give up – I’ll just do something less ambitious for the next month
It’s named Rocks!
What I’ve learned on this project so far
This first version is very limited, and frankly pretty buggy:
- There’s no proper collision detection – it’s hard to die, unless you try to hit a rock with the ship
- The asteroids don’t start larger and break up into smaller ones
- There’s no level progression, and no game-over when you die 3 times
- No enemy UFOs yet
- There are missing sound & visual effects
And the code is, frankly, a mess. But on the other side, there’s a lot I’ve learned over the last two days:
- All of the rendering is done using the Canvas line-drawing primitives
- The sounds are synthesized on-the-fly using Web Audio units instead of sampled sounds
- The animation is driven using requestAnimationFrame, so it should throttle back when in the background