This last weekend was a Ludum Dare weekend! I had a blast in the previous edition and of course decided to participate again. The goal: create a game from scratch in 48 hours. Solo. That means that code, graphics, audio, etc. must be created at competition's time (i.e. no using pre-existing free / open-source art). I repeat, solo.
You can play the game here. Or if you are participating in the compo and want to rate, this is the Ludum Dare's entry for it.
I live in Europe, so the compo starts at Saturday 3 AM and the theme is revealed. The deadline is Monday's 3 AM. I took Monday off on work so I could really work in the game until 3 AM.
I woke up super early (6:45 AM) to see the theme: "Unconventional weapon". My idea was to head off to a run, but it was still dark outside and there was nobody in the street. So I browsed some blog posts about Ludum Dare for motivation, and half an hour later headed for a 45-minutes run.
Then I showered, had a good breakfast and did some house cleaning. Why the hell would I want to clean my place during a hackathon? Well, 1) I didn't have enough time to finish cleaning the previous night; and 2) I wanted to minimise stress, and environment is important for that. Plus, I usually have lots of ideas while doing menial tasks!
At around 10 AM I decided what I was going to do. A (in theory) simple, one-screen arcade game about a metal fan with an in-flames guitar facing a horde of hipsters. The core mechanich is not very original (there are plenty of mobile and flash games like that) but I had the hope of adding a twist. My initial idea was to add collecting certain items to be able to beat the game. And maybe having a variety of enemies. And… –well, you get the gist.
As in my latest jams, I opted for an HTML 5 game so more people could have the chance to try it. One of the big mistakes is that I didn't prepared a game template beforehand, and had to adapt the
gulpfile of my gamejam Yeoman generator to have other features like live reload.
I started coding the main character and jumps. Instead of a more "traditional" approach, I used Phaser's
Arcade physics engine to accelerate development.
All praise my coder art! Then I added the first hipsters (it turns out they were the only ones at the end):
And then a flying enemy that throws bombs… I had no idea of what it would end up being, but I really wanted something going on above the player so jumping makes more sense:
At this point I had the sense of starting to worry about sounds. Audio really makes a difference in gameplay. I've been convinced that audio >>> graphics, so I'll definitely try to improve my audio skills (currently one of my weak points) for the next edition. So I added some basic sound effects for hitting enemies and jumping and went to sleep around 2 AM.
Not too much progress on the first day and I was a bit worried that I wouldn't be able to make it on time.
I woke up late, around 9 AM and really wished I could stay more time sleeping (I'm a 8h+ hours of sleep person). I didn't feel like working out today and settled for a walk outside. I grabbed an iced coffee and really enjoyed the sunshine (outdoors and sun do wonders for game jam morale).
And then it was art time! I wasn't sure about the style I should pursue. Last time I went for pixel art and people loved it. Also, pixel art is quick to produce and not-so-complicated to animate. But somehow I envisioned a comic style, so I decided to give it a try:
I really liked it, but I wasn't optimistic about my ability to produce animations for the main character and the enemies. But I kind of fell in love with this character and couldn't "downgrade" to pixel art…
Then I drew the sprites for the enemies. It was about time to decide about what the flying enemy would be. I asked on Twitter something on the lines of "Quick! What's hipster and can fly?" but I wasn't happy about the feedback. So… What's hipster? A muffin. What's hipster and can fly? A muffin with wings. There you go.
I also added a bit of in-game tweening for the hands / wings, because having static graphics all along can really kill the game experience.
It was around 16:30 PM, I was running late, but I still needed to draw the background. It took me a while, but I think it truly made a difference in the atmosphere of the game:
I tried to make it look a bit like London's Shoreditch, which is probably the place in the world with most hipsters per square mile. I think I should have added a bit of street art as well. But the clock was ticking…
It was around 18 PM and I switched priorities: I needed to make this playable enough (i.e. info about controls, gameover / victory states, etc.) so I could submit the entry.
I looked for a comic-style webfont and found Bangers by Google. Unfortunately there was not an easy way to preload webfonts in Phaser (there was a hack posted on the forums but I couldn't make it work properly) so I had to find a workaround.
The quickest solution I could think of was to create a regular HTML splash screen that used that font, so it would be already loaded when the game started.
And then I stumbled upon some nasty bugs due to my code being more sophisticated (read: complicated) that it needed to for a game jam. It's sad to write bad code, but when you're in a hackathon or prototyping there is no time –and no need– for refactor, DRY principles, etc. This is a lesson I need to interiorise.
So I created game over and victory conditions, plus added some controls info to the splash screen. I also designed some of the "levels" of the game. The idea was to have a bare minimum of enemy waves to play against, and add more if I had time (in the end I hadn't).
It was 23 PM, I still had 4 hours to go and I needed to fix small bugs and add some eye candy. Maybe I could even draw another sprite for the character jumping… –again, wishful thinking.
But first things first, and as I said, audio was a priority and I went on to create the main song for the game. I grabbed some samples and tweaked them with distortion / frequency so they had more like a heavy metal feel. I tried to compose a melody over them and failed miserably so it didn't make it to the final version.
A bit of fine tune (speed, gravity, etc.) and more minor bug fixing. After that… particles time! I wanted fire and blood splashing.
At the end Phaser's particles gave me a bit of a headache (there weren't many examples in the docs and I was way too tired by this time). But I really wanted to have the guitar with fire. Plus it would be more obvious to the player that she could kill enemies with the guitar.
At 2 AM I managed to set the guitar on flames }:)
Then I spent the last hour fixing yet more bugs, preparing the submission, etc.
What went well
- No junk food or energy drinks. Also, clean and tidy environment (I was cleaning up on the go, so no dishes piling up in the sink, etc.).
- Went for a more simple idea that last time (still not simple enough).
- Achieved a consistent graphic style in the game. People seem to like it!
- Took Monday off. This allowed me some extra 4 hours, and the game got so much better in these 4 hours…
- Capture some GIF's of the game and tweeted the whole process. This allowed my friends to give me lots of encouragement! And also it made much easier to compile the log here.
- I was tired, but I managed to be stress-free the whole time. I credit this to the food / environment / workouts.
What went wrong
- I lost almost an hour setting up the code environment! I should have done this in advance.
- The idea was not simple enough. Well, the gameplay itself is simple, but it isn't much juicy. It really needed more stuff, and I didn't have the time for it. I should have thought on just one core mechanic that didn't need anything else to be fun.
- Lack of proper audio skills! It really showed up in this competition. I need to learn how to create music.
- Complicated art. This lead to non-animated sprites. Always bad choice :(
Tools and tech
This is a very inexpensive setup. If you've never done game dev before, please consider give it a try!
- Regular HTML 5 game. I used the Phaser game framework and I'm pretty happy with it. Great performance, great documentation. It even runs in mobile browsers.
- JS libs and tools: Gulp for automation (live reload, local server, deployment, etc.). Browserify for modules.
- BXFR for sound effects and Garageband for the main song.
- A small Wacom tablet and Pixelmator for the art.
- LICEcap to capture the animated GIF's <3
- Atom with vi key-bindings as text editor.
And tons of heavy metal! \m/