How we made Snowman’s Christmas

Posted by (twitter: @beetracks)
January 1st, 2016 2:00 pm

We’re starting another year. 2015 was my (brupibo) first year as a real game developer, and with my best friend (kakinak) we started our humble “indie studio” called Bee Tracks. After much study and training we achieved a good game to close the year nicely: Snowman’s Christmas. We’re happy to get here, no matter the results of LD34. It was quite an accomplishment for us and we really thank you all the feedback (we’re happy we had a lot of positive feedback too). We’re doing our best too, to give valuable feedback for the games we play. We believe this is how we improve. I read some Ludum Dare posts and saw many developers sharing much good information about game development. I feel I don’t have enough knowledge to teach something new, so I decided to share our experiences with the development of our game.

For start, these were our tools:

  • Graphics: Clip Studio Paint, Inkscape, Pixeluvo
  • Audio: Zoom H1 (for recording the SFX) + Ableton Live
  • Programming: Game Maker Studio
  • Animation: Spine Essential
  • Gif Recorder: ScreenToGif – Preview 9

Now to the creative process.

It was near to the theme final selection. The last list was online. We printed it and we went to the mall for some ideas. We walked between stores while talking about every theme. Lots of ideas, few of them actually good. But then we saw something that caught our attention.

This ornament was nicely put in a corner. Kakinak said “what if something jumped around in these bulbs?”, we enjoyed the idea instantly and we decided to implement it if the “two button controls” were the theme. Coincidence? Maybe, but it worked. 😀

Now we have the theme. We will create somebody jumping in balls on a Christmas’ tree, but what will be our character? Brupibo’s sister has a snowman toy called Kevin (because nothing, just the fact she think the name fits). Our character would be a dwarf, or elf, but we decided to name him after brupibo’s sister snowman. Kakinak started to study some poses with internet references, but it would be a lot of work and we couldn’t figure out a good motivation for the dwarf doing it. We would complicate what it was supposed to be simple.
kevin_tree Then brupibo’s tree revealed a good character. What if the happy snowman’s in the bottom of the tree decided to get more attention? He indeed would have a lot of work to get to the top. Now we have our character. Let’s make it jump! Kakinak started to draw lots of faces and expressions and in the end we got the simplest one. And this time wasn’t related to the time we would spend on it. Sometimes the simple works better. Now we are ready to make our game!


Here it is the full version of the song from the game. We aimed for something fun and “christmas feeling”, of course.


Our original idea was to make Kevin need to turn on the lights too, but we knew we wouldn’t have time for it, so we kept it simple. We have two different color for the bulbs, yellow and red. Each one have a different impulse in our character. But when I was designing the level I thought it would be boring to only keep going up. So I created some rules that you character need to jump on lower bulbs too, sometimes, to get to the right way.

I used Spine to create the animation for the character. This was simple. Just a jumping animation, but I wanted to be smooth as possible. I didn’t achieved that, but it was my first time using Spine. In Game Maker I used image_xscale=1 and -1 to flip the character. That isn’t reliable in its HTML5 exporter, so, for the web version, the sprites are used the conventional way. There is another problem too: Spine sprites doesn’t work very good with precise collisions in GMS, so I created an object specifically to be the “collision guy”. To this object I attached Kevin, and that made easy to port to HTML5. It was just a matter of attach another object with the conventional sprite animations, then make the algorithm to use one or another depending if it is a browser or not.

For the tree I created different object for the leaf rows and designed the stages as the usual. But this impacted a lot when porting to Android. Actually, I was unable to do that yet. Bad planning of my part. The performance was terrible. We intend to port it when we improve it (maybe Nov, 2016) but for now, just the windows/linux/web versions are fine.

Another GMS specific issue: fonts. I’m using bitmap fonts, of course, but when you are going to map it for non-english languages, the problems start to appear (we’re Brazilians, our native language have a lot of special characters). The font_add_sprite_ext works differently in HTML5. For Windows/Linux, I needed to use font_add_sprite_ext to use special characters, but for HTML5 it needs to be the font_add_sprite. So, the solution is to create a ASCII image table and create a font map with the same sequence . Then, put a condition to detect if the game is in browser or not to switch between that. Luckly, GML uses variable to keep the fonts, so, this is not much of a trouble after you figure it out (I spent a considerable amount of time until I’ve figured that out).

The cutscenes are simple objects movements. I’m using GMS native draw functions to create the rectangles behind the text. The pause event is controlled in each object with a global variable.

I hope there is something useful for you in this text. I’m not an experienced developer, but if you want to know something specific in this game, feel free to contact me on Twitter or by e-mail.

Thanks for reading and we wish you an awesome 2016, full of happiness, accomplishments, art and games!

Leave a Reply

You must be logged in to post a comment.

[cache: storing page]