Making Bright:Night:Kite:Fight

To start, if you want to play Bright:Night:Kite:Fight as it currently stands, you can do so here, but I’d advise grabbing some friends to do so first, as it’s a local multiplayer game.


A Little Seed

A couple of weeks ago my partner phoned to tell me amongst other things that she had bought a stunt kite. I immediately felt jealous that I was not there to fly it with her. I had to do the next best thing and make a game about flying kites. So that was the seed of this idea.

It was quite late and I decided to break my current rule about working on more than one digital game at a time, staying up till the early hours to get the basic turning mechanics sorted. If you look carefully when the kite rotates it does so around the outer corners, as if the kite is controlled by two strings.

That Problem

One huge issue I came across was trying to get the swooping effect of the kites flying. I spent about 5 hours trying different iterations of, gravity, velocity, drag, wind speed, kinetic energy, potential energy all to no avail. Nothing felt right. It was not until I simplified what I wanted to do that the answer came to me.

As the kite swoops down it gains velocity, as it goes up it loses velocity. The simple and elegant solution was to make velocity directly related to the current height of the kite. Hours of complex physics thinking and multiple lines of code all disappear into a single line of code:

magVel = 1-((canvas.height – p.y)/(canvas.height));

Most importantly it felt nice to swoop around.

Start of a Game

Once I had got this sorted, it was time to add the tail. It was nice watching the kite fly about and looking at the tail follow its path, gently rippling in the wind, but it was not quite a game. Unlike real kite fighting where you cut the line (as it require tension), it was better in this case to start cutting the tails of the kite. To do this required more kites, which was easy enough to add.

More of a Game

So the flying and the tail cutting mechanics were sorted but it was still a interactive play box rather than a game. This is an activity about cutting down the other players, your punishment being a smaller kite tail; your kite looks less impressive without a long tail following it.

The two easiest things to add, were time and points. Time adds a beginning and end to the game, it also allows for replay, especially with 1 minute matches. Rather than removing someone from the game completely, by death for example, all players also hopefully remain engaged. The point system I’m not 100% about but I think scoring more points based on the current length of your tail is more interesting than simply adding and losing points based on hits. I hope it works for this game anyway.

Finishing Touches

So to the finishing touches. After watching an interesting video by Mark Brown (@britishgaming) titled Secrets of Game Feel and Juice I wanted to make the impact of the kites hitting each other a little meatier. I added a very brief 50ms delay when an impact is detected in order to allow players to register it clearly. Also on an impact the stars in the background brighten in a wave outwards from the point of impact. I think these two little elements add a lot to the game in terms of how it feels to play, and improves the sensation of cutting up someone else’s kite.

(You should check out all of Mark’s Game Maker’s Toolkit videos, they’re really useful.)

Not Quite Finished Yet

Not many people have played the game yet, and there is still plenty of improvement that can be made based on feedback. When designing a multiplayer game by yourself the hardest thing is testing it.

Based on the feedback I receive on this early release I will keep improving the game until it becomes something I am truly proud of.

Until then, have a go and let me know what you think.

A big thanks to Zhan (@zhancat) for spotting a bug which meant some collisions weren’t detecting. This was due to the way I’d implemented the game world looping from left to right and having multiple kites for each player to do this. But that’s hopefully solved now. I also tightened up the controls thanks to his imput.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s