Leap 4 Blue

I started Leap 4 Blue way back in May or something, for the Winnipeg TIGJam. Create platforms to leap your way to blue, avoiding lasers, enemies, and an assortment of hazards and puzzles.

Liam Berry and Alec Holowka wrote the music in the game, and Broxter gave it its name.

Leap 4 Blue – Complete

Hey everyone, I recently finished Leap 4 Blue, and it is now playable on bored.com. Check it out, right now (and give me as much feedback as you like!)

 

The game has been under development for quite a while: from when I first started it, on May 30th, all the way to today, October 14th. In fact, I’m pretty sure it’s the most time I’ve ever spent on one game, from the time of starting to actual completion. But, I think, it was definitely worth the wait, and believe it should, and will, live up to everyone’s expectations (or at least I sure hope so). The extra time I spent polishing and revising this game was definitely well spent, in my opinion, as it really makes the overall experience a whole lot more fun and enjoyable.

 

But anyhow, enough of me going on about why I’m so proud of the game. The other purpose of this blog post, besides telling everyone that it’s out and you should play it now, is how the development process of this game went, from the first day, to when I sent the final version off to the sponsor.

 

One of the biggest questions I’ve been asked is, how I came up with the general idea for Leap 4 Blue. To be honest, the mechanic, though fun and interesting, isn’t that unique or amazing. True, it hasn’t been done in (many) platformers in such a way as this, but it’s not like revolutionizing platformers or anything. Anyhow, when I went to the Winnipeg TIGJam, I didn’t know anyone there. I’m a really shy person, so instead of trying to socialize at first, I sat down, and started making random mockups. None of these mockups were anything like leap 4 blue. When I was bored and finished with making a few of those, I decided I should start working on something. I had no idea what to work on, so I went ahead and made a simple platform engine – basically what I do when I have no ideas. At this point I thought it would be cool to add more than walking and jumping, so added walljumping to the little green character (who you still see in the final game today). Still pretty boring.
At this point, I stop for a bit, and went to check out what other people were doing. I saw someone playing Cactus’ Tuning, and thought it looked really interesting. I began to think that maybe I could make the graphical style in my simple little platformer similar to that, with the blocks twisting and spinning as you run through the strange levels. So, I went back to my computer, and started messing around with that (with some awesome help from Chevy Ray, who was really interested in helping me get the game going). Somewhere along the line, I thought it’d be fun to shoot blocks, and added that in. Originally, you literally just shot blocks in a direction and they’d eventually slow down. This turned into the block-placing you see in the current Leap 4 Blue, after Chevy said that it’d probably be easier for the player to be able to place blocks exactly where your cursor/block-placer-thing is. And it definitely was, because without that precision, the game really wouldn’t have worked.

 

So, if you couldn’t already tell, I had absolutely no idea where Leap 4 Blue was coming from, or where I wanted to head with it. I got the basic idea working, and just developed it from there, adding things that felt right, and skipping things that didn’t seem to work.

 

After the Game Jam, I went home and worked on the game like crazy for about a week. I reprogrammed the entire thing, as my current method for displaying the moving blocks was extremely slow. During that time I made about 20 levels.
However, after about 2 weeks of hard work on the game, I got generally bored with working on it. As many of you will know (or if you don’t, you’re about to find out), I’m not really the type of person who can concentrate on one project for months at a time. Maybe it’s just because I’m really not that old, and haven’t learned how to stay focused very well. Either way, the development on Leap 4 Blue stopped for almost an entire month.

 

Suddenly, however, I had the urge to get the game done. By this time it had been featured on indiegames.com/blog, and gamesetwatch.com, and there was quite a bit of hype on Twitter. I basically said to myself that I couldn’t stop working on the game; It would be utterly sad to stop working on the game of mine that got the most recognition of any game I had ever made before. So, I set to finishing it. At this point, it was mostly just adding the last 30 levels, as most of the core mechanics and gameplay things were done.

 

I ended up recreating the first 20 levels three (3) times before I was happy with them. by level 45 I was really struggling to finish them up. I hadn’t really considered level design as a skill, an art, before. However, by the time I had created 50 levels (90 if you include the ones that never made it to the game), I had realized that level-designing is a skill, and takes a lot of talent to be able to produce a lot of them, and keep them fun. Luckily I had Matt Thorson, platformer level-designing-master of all time, play through a bunch of my levels giving me feedback, which ultimately helped me finish up the last few ones. Level design is one of the things I find hardest to do. If you look at any of my prior games, all of them have less than 10 levels, or no levels whatsoever, so producing 50 for a single games was a really big haul for me.

 

But things came to together. I was able to get some amazing musicians for the musics (my brother, Liam Berry, and local indie game developer, Alec Holowka), all the levels were finished, the graphics were polished, and I optimized the game and made everything run speedy. Now it was time to find a sponsor.

 

When I first thought of getting a sponsor, I thought it would be one of those things that you sent around to a few people, they would reply in a few days, and then BLAM, you were sponsored. Well obviously this isn’t what happened – nothing can be that simple.
I sent Leap 4 Blue around to 3 sponsors, Armor Games, Kongregate, and Newgrounds. My goal here was to send an amount that was really high, and hope that they would haggle, or offer an amount they actually felt was appropriate.
Please note, that I originally planned to write this without the actual amount of money I was asking for, and got. But I feel that this entry may help other, new flash developers, a whole lot more if they have an understanding for what I was asking for, and what I ended up getting.
So, I sent an e-mail to these three sponsors, asking for 10k ($10,000) USD. I had no intention of actually getting this amount, but rather hoped that they would come back with an amount that was appropriate. I waited about 2 weeks, and in that time, only one sponsor replied, and it didn’t work out. They wouldn’t counter offer. They simply said “fun game, but not for that much”, and I would ask how much they felt was appropriate for the game, and they responded with the question “I’m not sure”, essentially. After going back and forth with this for about a week, I finally gave it up, deciding that there was no easy way for me to get a number out of them without offering the game for really low.

 

I decided to put it on FGL (Flash Game License), and hope that things would turn around. And they did. Within a day of it being on there, I got a bid (from the sponsor I was e-mailing) for $1,500. A few days later, I got a bid for $2,500, and a day after that, a bid for $2,750. At this point, things began to slow down. However, 2 days after the bid of $2,750, I had the same sponsor e-mail me, asking if I was interested in a “buy-now” option. They were holding the highest bid, and the game wasn’t moving. They were basically offering to pay more for the game, to get it immediately.
I decided that this was the way to go, and I sent them an e-mail, saying I’d do a buy-now for 8k ($8,000). Again, aiming high, hoping they would respond with a number that was more appropriate for themselves.
However, they simply didn’t reply. I waited a few more days, e-mailed again, asking of they were still interested in a buy-now, they said they were. We talked over MSN a few times, and worked out a figure that I thought was fair. (note, I can’t actually post the exact details of the price).

 

At this point, I had to close the bidding on Leap 4 Blue, add their API to the game, and send it off to them (in return for my money).

 

A small note: I would, in most cases, let the bidding fade itself out, rather than do a “buy-now” thing like I ended up doing. I think that in most cases, this kind of thing doesn’t come up, and it’s best simply to set the game status to “final call” on FGL. Also, probably good to know that FGL takes 10% of whatever you make, and if you get payed through paypal, Paypal (apparently?) also takes some. Actually, Paypal has simply been a pain in the ass so far, from not giving me my money for a while (because they didn’t know why I was randomly being sent $$$), to taking $100 just to use it to transfer the money… :P

 

Anyhow, that’s my Leap 4 Blue adventure! Exciting stuff (no, really, it is).

 

Javascript – The Event Listener

Late last night I decided I wanted to start making a small game engine for myself in Javascript, using John Resig’s Javascript Inheritance code. Using that, it’s pretty straight forward to set up classes. For example, here’s my player class:

var Player = Entity.extend({

init: function(x, y)
{
this._super(x, y, 16, 16);
this.type = ‘Player’;
},

update: function()
{
this._super();
if(this.collide(‘Floor’,this.x,this.y+1) == null && key.keyDown[40]) { this.y ++; }
}

});

As you can see, it’s pretty easy to understand. I also used a similar method to Chevy’s Flash Punk Library for collisions (since I find that the easiest method I can think of).

However, when I started working on a class that would monitor key input, I ran into some problems. Basically, a key input uses an event (similar to the flash events), that looks something like this:

window.addEventListener(‘keyup’, this.onKeyUp, true)

That looks nice and dandy, right? Well there’s a problem. Since Javascript doesn’t really have actual classes (rather functions within functions), when you add an event like that, it just calls the function, but doesn’t keep what class the function is within.. if that makes any sense. For example, if I have this:

var Keys = Class.extend({

keyDown: Array(),

init: function()
{
//call the key up/down events
window.addEventListener(“keydown”, this.onKeyDown, true);
},

onKeyDown: function(evt)
{
this.keyDown[evt.keyCode] = true;
},

});

When the onKeyDown function is called, it wont understand what “this” is, as in, all the variables are undefined and it can’t reference itself.
Now, incase you didn’t already realize, this is a very big pain. And I also realized that, oh…. setTimeout and setInterval basically do exactly the same thing! (and thus making it very hard to build a game loop).

So, after searching around for a while, I couldn’t find anything that I really liked. I eventually got this working, but it was still a big pain to use:

var me = this
var callOnKeyDown = function(e) { me.onKeyDown(e); }
var callOnKeyUp = function(e) { me.onKeyUp(e); }

window.addEventListener(‘keydown’, callOnKeyDown, true);
window.addEventListener(‘keyup’, callOnKeyUp, true);

I mean, sure, it worked… but it looked horribly messy and if I needed to use event listeners OR timeouts/intervals, I would have to do that for each one… Which is where I decided I would try to do exactly the same thing above, but in a single function. This way, I could just call the function, and not have to mess with all that other stuff each and every time.

Now, this part was pretty hard to figure out, mostly because I kept running into problems with passing a function through a parameter. Eventually though, I figured out how to pass a string through, and then call a function with the same name as the string.

In the end, my function looked like this. I’m really pleased I got this sorted.

/*
Calls the function on a window event
@param type The type of event to call (ex. keydown)
@param f The function to call (as as string)
@param me Who should call the function (normally ‘this’)
@return null
*/
callEvent: function(type, f, me)
{
var functionToCall = function(e) { me[f](e); }
window.addEventListener(type, functionToCall, true);
},

Now, all I need to do to call an event from within a class to one of the classes functions, while retaining all references, is this:

this.callEvent(‘keydown’, ‘onKeyDown’, this);

:D

New Site Design

Every few months I decide it’s time for a new website design. Or I guess I’m just into making website designs and when I have nothing else to design, I remake my website. Either way, a new one has rolled in, and I’ve implemented it with wordpress. I have yet to make the front page nice, but ever other page is basically done and functional.

 

Any suggestions & feedback is, of course, welcome. Tell me whatcha think! :D

St. Norbert Farmers’ Market

I designed and programmed the site for the St. Norbert Farmers’ Market, which is the largest market (that I know of) in Manitoba. Their site was in need of an overhaul, and I was hired to do it in early 2010.

Farmers’ Feast Website

I designed the Farmers’ Feast website about a year ago. It was basically just a one page site, so it was pretty simple to make.

Winnitron 1000

Lately I’ve been working on a secret project with Alec Holowka, Marlon Wiebe, and Jeff Lindsay (and all photographs of the project by Chrissy Chubala), that we’re now ready to announce. We’ve been working on an Arcade Machine that will feature independent developers’ games! It’s going to be really rad, when finished, and we plan on hosting a game Jam in the coming weeks to develop some new and fresh games for it, before it goes fully live.

yeaaah! Arcade Playing

(I’m the guy on the left, for those of you who don’t know me…) (more photos)

 

 

Check out the Winnitron site (created by yours truly), and Alec’s blog for more information!