WOWZAPP 2012 was a worldwide hackathon where developers all around the world got together in specified places and developed Windows 8, Windows Phone 8 and Windows Azure apps. Thanks to Microsoft Macedonia, we also had the chance to participate in the first hackathon to ever be organized in Macedonia. Macedonia hosted one of the best WOWZAPP events with over 200 prizes for the participants. I would also like to thank the awesome sponsors like Domino’s Pizza, Neotel and Seavus Education and Development Center for not leaving us hungry or without internet connection. Domino’s Pizza for lunch and dinner for two days? Hell yeah!
My team created a 2D top-down shooter game that won ‘Awesome Windows Phone 8 Application’ and ‘Best Hackathon Application’. I also won the ‘Perpetum Coder’ prize for being crazy enough to spend the most time coding at the event. In this post, I will detail the epic journey where we started from zilch, and ended up going home with 2 Windows RT tablets.
Before the event
The hackathon was announced around the beginning of October so there was plenty of time to prepare the tools and experiment with them until the event started. From the start, I was sure that I wanted to create a game during the hackathon, but the main problem was finding a designer. Unfortunately, two of my teammates, including the designer, left the team to pursue other goals in life (get a job, concentrate on academic work etc.). Infinite Loop was now left with two programmers, me and Rahim Islamoski. Two weeks before the hackathon, Abdullah Alioski, agreed on joining the team and taking care of the sprite work that we would need for our game.
We decided that we will make a Windows 8 game with MonoGame. MonoGame is an open-source XNA port that works on many platforms, including Android and iOS. While Rahim worked on porting the Game State Management sample to MonoGame, I was working on a simple shooter prototype to refresh my XNA memory, because I hadn’t done any game development during the summer. I ended up with the prototype shown on the picture below within 4 hours, and Rahim managed to port the Game State Management within a day which solved a huge problem, menu transitions and tombstoning.
What does a black hole and my drawing skills have in common? They both suck.
After creating this prototype, we stopped working on the project until the hackathon. Where is the fun in attending a hackathon with a complete app or game?
Few days before the event I came across an interesting book – ‘Game Jam Survival Guide’ by Christer Kaitila. It was a fun read, and most of the things mentioned there happened to our team. If you plan to attend a 24 or 48 hour hackathon/gamejam/appathon, give it a read.
Two days before the hackathon, the organizers announced that two Windows RT tablets will be awarded at the event. This is where everything changed for us, the stakes were very high now. It wasn’t just fame, there was fortune as well. I created a Trello board and invited Rahim and Abdullah so we can finalize the features we planned to have in our playable demo for the event.Offtopic, Trello is a great, free web based tool for organizing your projects. Check it out at www.trello.com . Once we finalized the outline of the game, we were ready for the event. We really needed a tablet for our future game/app development.
We were so excited while on the road to Skopje that the three hour ride felt like 30 minutes. We reached our destination about 1 hour before kickoff. We set up our computer equipment and started counting down to the start. 15 minutes before kickoff the venue was almost full.
The event hadn’t started yet and we already were getting cool badges and stickers.
18:00 local time, the event kicked off with the first presentation by Dejan Dimitrovski, Microsoft Technical Evangelist. After putting the ground rules, all the teams got their first task, the marshmallow challenge. Out of 15 teams, only a few managed to build a tower from the provided materials. My team shared the, lowest tower height prize with several other teams, 0.00cm. After this challenge, everyone started wondering, ‘When are we going to start coding?’. That is when the first batch of Domino’s Pizzas arrived and the previous question was gone until we filled our stomachs with delicious pizza awesomeness.
After reducing our hunger level to zero, it was time to start doing the thing that people at a hackathon are supposed to do, develop apps and games. After seeing that the organizers brought a couple of Windows Phone 8 devices (the HTC 8X and 8S are gorgeous pieces of hardware), we immediately modified our plans. We decided to also create our game for Windows Phone. I started working on my first prototype while Rahim set up XNA and started working on the Game State Management for Windows Phone. During this time, Abdullah started working on the aircraft sprites and the background textures.
Few hours passed and at 23:30 we had our first prototype running on both Windows 8 and Windows Phone 8 with temporary sprites.
My code was a total mess that only I could understand. But, on events like these, the final product matters and not the code behind. Luckily, MonoGame and XNA use the same namespaces, class names and method names. Rahim did not have to spend too much time modifying or analyzing my code. I’m sure I would’ve spent the whole event explaining the code to him and end up with a crappy prototype if I had to explain how everything worked. The game logic was the same on both platforms, so Rahim started working on the input for the Windows Phone. We decided that using touch input would not be the best choice, so he started working on accelerometer input to navigate the player aircraft on the screen. During this time, I was tuning the Enemy superclass to make it easier for me to create various enemy types.
Around 5:20, zombie mode started kicking in. My concentration was slowly decreasing, but I decided to not drink any coffee or energy drinks. I hadn’t used coffee or energy drinks to stay awake until now, I wasn’t planning on changing that. Finally, after exactly 12 hours from kickoff we ended up with the following screenshot:
The organizers appeared in the morning with new prizes and breakfast. I unlocked my first Wowzapp achievement at 7:35.
After the quality breakfast, it was time to continue working on the game. Since we had not slept for over 24 hours now, our concentration was almost nonexistent. We spent this time to do simple things like animating the afterburners of the planes, fixing minor enemy aircraft bugs and the projectile placement on the player aircraft. I also wrote some randomization code for the background element to make the game more appealing. Moving the clouds and background elements immediately increased the quality of the game. With such minor changes, the game was much more exciting now. Abdullah started working on menu screens and buttons because he was extremely tired. We left the final power up animations for the last 12 hours, first we had to get some sleep.
In the afternoon, there was a fun ZAPP activity (the activities that did not involve developing apps were called ZAPP activities) where each team got in front of the others and created a short story based on a given image. After this activity, the organizers announced that there will be an app showcase around 19:00.
This is the part where I did a terrible mistake. I decided to work on implementing new weapons for the player. You shouldn’t do something like this when you are uber tired. The mistake was even bigger because I started thinking about writing more flexible code by using inheritance and what not so I can have some reusable code at my disposal. After the first hour spent on this, I removed everything I had and started over, forgetting everything about OOP principles, and spent another hour debugging the new weapon that I added. Even worse than this, Rahim was also having trouble tracking a bug in the menus and he also spent a lot of time until he finally fixed it. This was a huge warning sign –> “Get some damn sleep!”
At the end of the second 12 hours, we were ready to present our progress on our game to all the other teams.
After the presentation, many other participants congratulated us for doing a great job on the game. Many people liked what we showed on the projector. This boosted our morale that we needed for the upcoming 24 hours.
Now, it was definitely time to get some sleep. Abdullah’s hands started shaking, my brain was going nuts, and Rahim’s back was killing him. We had to miss some cool ZAPP activities like Pictionary and some Kinect action, but hey, 2 Windows RT tablets are at stake here. We went to Bojan Veljanovski’s apartment (kudos for the invitation mate) that was about 5 minutes from the hackathon venue. We decided to sleep for 6 hours and then carry on with development until the end of the event without more sleep. That did not turn out so well because I and Rahim ended up with 1 hour of sleep due to excitement. Luckily Abdullah slept about 3 hours, because he was the one that needed to drive us 180km back home after the event ended. I couldn’t help but keep thinking on how to complete the prototype in the next few hours before the final app showcase that was at 14:00 Sunday. We had 12 hours until then. Here is a list of what I needed to implement:
Weapons for enemy aircraft
Power up system
Sounds and music
Bonus: Make the enemies move sideways/diagonally on screen instead of disappearing at the bottom of the screen.
When we got back to the event venue, I was feeling really fresh, like I had slept for 8 hours. I started with the weapons for the enemies. I already had a shooting logic for the player so I used 90% of the same code. I had to add some randomization code to determine the time when an enemy fired. At this time, Abdullah kept giving me new sprites (power ups, UI icons, animated barrier etc.) so I kept going back and forth with the tasks just so he can see if it looks good in-game.
Next it was time for the power ups which was quite simple to implement. First we added static icons for them, but Abdullah decided it will be better if we animated them (scale up and down until player picks it up). When this was done, it was time to change the annoying ‘Fire’ sound I had used for the weapons. I feel lucky for not getting punched by some other participant during the test runs of the game because it was damn irritating. We did not have a sound engineer in the team, so I had to use some sound generator to quickly create some sounds. I used SFXR, a free 8-bit sound generator. Rahim was taking care of the music, and that is when we noticed that MonoGame still does not support the Song class, so we did not bother in putting music on the Windows 8 version of the game. When we entered the final 12 hours, we only had small tasks to complete and some overall polishing to do.
When I looked at the clock, it was already 9:00 and breakfast had arrived. I hadn’t moved from my chair for 5 straight hours. Time passes fast when you don’t encounter any major bugs or get stuck somewhere. I implemented the bonus feature mentioned above, but after Hajan Selmani, mentor at the event, play tested the game, he didn’t like it that much and suggested we change it back the way it was. We listened to the feedback and changed it back (apparently this move was rewarded by extra points for listening to user feedback when our app was judged).
Around 12:00, I was droopy again and I couldn’t look at code anymore. I decided to do some test runs, fix some minor animation drawing bugs on screen and around 13:00 we finished working on our game. We started counting down to the final app showcase that was going to take place in front of all the mentors (judges).
There were a total of 15 teams, which meant 15 apps. I was really surprised to see all the cool apps the other teams had developed. The judges definitely had hard choices to make when choosing the winner.
Our presentation went quite well. We had the final version installed on the Windows Phone devices, and that made us the only team with a fully working demo that was given to the judges to test. One of the best choices we did at the event was to develop for two platforms at the same time, Windows 8 and Windows Phone.
The presentations ended around 16:00 and now it was time to wait for the final results. The judges went to a different room to analyze all the apps and choose the winners. Many participants started congratulating us for winning the event, but I really liked what some of the other teams had made and I couldn’t say for sure that we won.
By the time the results came, I kept having frequent blackouts and I had almost no peripheral vision due to being awake for such a long time. The others where doing the usual gangnam style dance. They first started giving the minor prizes, and that is when I won the ‘Perpetum Coder’ prize for being the longest coder at the event. After getting the prize I realized I had coded for over 35 hours.
Next, it was time for the serious awards. The first one was ‘Awesome Windows Phone Application’ which we won. Things looked good, we had a chance to win the 1st prize. But right after this, another team won the “Best Hackathon Game’ award, and this is when I thought we will not be the winners of the event. The folks that created a point and click adventure game deserved to win the event as much as we did. The ‘Awesome Windows 8 Application’ was won by an app for journalists created by Bojan Veljanovski, Jasna Trengoska (former Infinite Loop designer) and William Asiama Nyako. Finally, it was time to announce the 1st prize. One team would win 2 Windows RT tablets for their effort at the Wowzapp 2012 event. While announcing Dejan Dimitrovski kept looking back and forth to the teams that won the other major awards. While thinking about the game and whether we had messed something up, I kept thinking that we won’t be the winners. And then, I heard Dejan say “Sparrow!”