Earlier this year, we told you about the Techority 48-Hour Challenge app contest organized by our very own Peach Pellen. Although it has long been done, winner Mike Lorenz of Pixani Games now decided to give us an in-depth, hour-by-hour look at how he made the winning game Princess Pixani with Corona SDK.
This past February, Ansca Mobile sponsored The Techority 48 Hour Challenge, a competition to use Corona to produce a fully functional game in 48 hours. I was lucky enough to win the competition, and was honored when Carlos asked me to share my experiences on Corona’s blog.
The Challenge was the brainchild of Peach Pellen, a fellow Corona programmer and an active participant in the Corona forums (and now active member of Team Corona!). She organized and ran the whole thing, gathered a panel of judges, and procured all the prizes for the winners.
When it began, four themes were announced: Princess, Jungle, Monkey, Moon. Every game in the competition had to incorporate at least two of those themes.
For my time zone (Pennsylvania, as Peach is based out of Australia), the competition started at 3:00AM, so I went to bed early and woke up around 5:00AM to begin. I kept a brief journal during those 48 hours, jotting down notes as they came to me…
05:05 – Booted up and saw the 4 themes: jungle, moon, monkey, princess.
05:10 – I wish I had done some more prep work, brainstorming some possible game ideas beforehand.
05:14 – A monkey??? Holy crap, I can’t draw a monkey! I can’t find any public domain monkey drawings either.
05:19 – Princess might be easier. Ha, right!
06:48 – I’ve gone over about 437 “save the princess” ideas in my head. I don’t like any of them.
07:11 – What if instead of saving the princess, it’s the princess doing the saving?
07:26 – I’m liking the idea of a side parallax scroller. Princess in a helicopter over the jungle, saving monkeys, with the moon in the background. Got all four themes!
07:31 – Helicopter doesn’t feel right. Maybe a hot air balloon.
07:34 – Now that I have a basic idea, I need to think of the game play. What’s the limiting factor? Time? Is there a jungle fire?
07:41 – Maybe it’s man encroaching on the jungle with bulldozers. You have to beat them to it.
07:52 – Sick monkeys! Triage: red/yellow/green indicators on a long-range map. You have to decide where to go & when.
07:54 – Small island: limited playing field.
07:59 – Drag/touch anywhere on screen to give thrust to the balloon. It has momentum/interia you need to deal with.
08:01 – Random birds you have to avoid.
08:02 – Random rainclouds.
08:03 – Limited by fuel for balloon, and how much serum you have. Power-ups for fuel. Pick flowers to get more serum?
08:04 – Every flower you pick, every fuel canister you pick up, might cost a life, in terms of the time you spend on it.
08:09 – I want this to be relatively non-violent, so no shooting things. Besides, all touches are for controlling the aircraft, so where would I put a shooting button?
08:10 – Do I need more obstacles?
08:12 – Land obstacles so you can’t just skim over the surface. Rocks, trees, huts, totems, fires, rainclouds.
08:13 – What obstacles would force you down? A cave? Don’t know how to draw that.
08:14 – A flock of high-flying birds.
08:16 – Damn, I’m tired already. Wish I had slept better.
08:28 – Told Barb (my wife) my idea so far. She likes it. Woot!
08:29 – One thing I like about this game: no AI. I just set up the chaos, and the player has to make order out of it.
08:51 – Trying to figure out the look of the game. Go with Jungle Scene sample art or get my own?
08:55 – Jungle scene art is photos. I’m not sure I want that for a game. But I don’t have Photoshop to make the photos look like art.
08:56 – Curse you, Photoshop for being so expensive!
08:57 – Curse you, Pixelmator for not having decent artsy filters!
09:46 – Still looking around the net for public domain artwork I can use. Too bad I’m not doing a 19th century black & white game.
10:27 – This is crazy. I don’t know what I’m going to do for artwork.
10:44 – Trying to draw a few things in Pixelmator, but I don’t have a pen tablet, and the mouse is wonky.
11:03 – Barb suggested I draw everything myself on paper, scan each sheet, load it into Pixelmator and color it in.
11:09 – Yep, that’s what I’m going to do.
15:40 – First version. Got most of the art done. Showing balloon on black background. Balloon is way too big compared to the basket. I need to draw an impossibly small balloon.
17:20 – Included grasses and mountains. My mountains suck.
18:03 – Got basic parallax scrolling working! Hey, this looks OK! I’m doing it differently than the Corona sample program. I was worried about that, but it seems to work fine.
19:17 – Scrolling back and forth. Scroll limits work properly.
20:35 – Added director & text modules. Added foliage. About to reduce foliage PNG sizes.
21:06 – Got the foliage right. Spreading it around randomly. Looks good.
21:53 – Y thrust works, sort of, but I need to get my units straight, and I need to account for momentum/inertia.
22:24 – X & Y thrust work!
23:45 – Friction is working better. Tried rotating the balloon, but I can’t get it to look right in every case. Maybe I’ll just have it rock randomly if I have time.
06:15 – Back to work! (cue whipping sound)
08:12 – Fixed friction, finally. Added rainbow. So girly! In for a penny…
11:03 – Tried physics module. No good for me. I don’t really understand it, and I should have started my game using it. Adding it now is just way too complicated considering I’ve never used it before. So I got collision detection working manually with totems.
11:31 – Bouncing off totems correctly.
11:42 – Correction. THIS version works.
14:05 – Long range map works; tracks balloon.
15:03 – Got monkeys on the map. Also added percent displays above each monkey, which I like, even though it was just for debugging. Leaving it in!
15:31 – Now healing.
17:38 – Added hearts animation to healing. Another throwaway graphic I came up with on the spur of the moment, but now I love it.
18:52 – Added main menu. Tweaked level parameters. Fixed infinite bug loop in creating monkeys.
21:44 – Have a nice main menu now with animated balloon.
23:40 – Lots of little changes. Added help screen.
00:28 – Created and loaded some sounds, but I don’t have time to implement them all, plus a setting for it; so I stripped out all sounds.
01:30 – SUBMITTED!!!!!!!!!!!
Here’s a video I made after I won:
What went right
I didn’t try to take on too much: I came up with a pretty simple game idea that did not require any AI at all. No matter how rudimentary, AI is always painful for me.
I prioritized what I wanted to put in the game. My goal was to get a basic version working by 8 hours before the deadline, so with the idea I had, I asked myself, What is the smallest possible version of the game I can create that’s still interesting? I had no way of knowing how tired I would be by T minus 8 hours, so I tried to manage my time so if I were about to drop dead at that point, I’d still have something to submit.
The artwork. I’m not talented at drawing, but somehow this game’s art came together pretty well. The colors all work, and with everything scrolling around, you’re not paying too much attention to the details anyway. Basically I’d Google something like “palm tree”, find one that looked good, then try to draw that on a piece of paper while using the picture on the screen as a reference.
The main menu screen. I did this very late in the game, just a few hours before submitting it. I had a few hours to spare, so I figured I’d make the screen look nice. I added two little animations to it, and although they were super easy to do, I’m really glad I did them. They give the game a slightly more polished look.
I managed my sleep pretty well. I have enough late night coding sessions under my belt that I know I just don’t code as fast when I’m tired, so I made sure to go to bed early Friday night, and I got a decent amount of sleep Saturday night too.
My breaks worked out well too. I work best in spurts of 60-90 minutes, followed by a short break, then back to work. I’d walk our dog, shower, talk to my wife, make a meal, or anything that required me to get up off my butt.
What went wrong
I wish I had compiled the app early and had a friend or two try it out on their devices. I still can’t believe the thought never occurred to me.
After the competition was over and a few friends played it, they all told me it was very hard to control the balloon. Weird, I thought it was too easy! So I wish I had included easy/medium/hard modes to accommodate everyone.
I wish I had had more prior experience with the Corona physics module. I wasted two hours fiddling with trying to incorporate it, and then another two hours after giving up, trying to get all the equations and collisions right. It wasn’t fun. If I had worked on a couple of sample physics programs before the competition, I would have had a lot more time to add cool features to the game. Also, because the physics module is native code (not Lua) it would probably have improved my game’s performance.
I wasted several hours looking for public domain artwork on the web. I should have just decided from the outset that I was going to draw everything myself. Would have saved me about two hours.
I didn’t have time to add sound to the game. I tried near the end, but all I was finding was a bunch of crappy sound effects. Between those and the ones I could create using cfxr, I wasn’t happy at all. In the end, I figured it’s better to have a silent game than one with sounds I didn’t like.
Now that it’s over…
I found this entire experience to be truly eye-opening. I’d been using Corona for a couple of months prior to the competition, but I was shocked at how much I was able to accomplish in such a short time. I’m a good programmer, but I wouldn’t call myself fast. Yet somehow, using Corona, I was able to achieve “superhuman” speed.
This was such an important experience to me that I named my software company after the main character I created.
A few days ago I finally finished my first game, Reflection Connection, and submitted it to Apple for approval. Now I’d like to see if I can flesh out Princess Pixani and turn it into a real game.
I’m trying to incorporate short, intense bursts of programming into my regular development schedule to see if it helps me in the long run. I don’t have enough data on that yet, but hopefully one day I’ll have more to say about that.
I’d like to raise my bottle of beer and offer a toast to Carlos & Walter for their amazing programming platform, and for giving me the opportunity to share my experience on their blog. You guys are ever in Philly, the drinks are on me. Thanks to Peach for coming up with the Challenge and following through so brilliantly. And finally, thanks to all the individuals and companies who were generous enough to provide their time and/or products as prizes for the competition. (Graham Ranson, Biffy Beebe, Game Dev Nation, uDESIGN.me, Digitap)
I hope the 48-Hour Challenge becomes a tradition at Corona!
If you have any comments, please feel free to contact me via my website.