Inaugural Asset Jam Results: CTF Platformer
Posted by
Doug Haber
on 2013-08-18
Introduction
Blue player guards his flagOn Sunday the 11th I came across a Reddit posting for
the
"Inaugural
Asset Jam." This post proposed that everyone use Kenney's
platformer art sets to make games. Everything was very informal,
and the only rule was that the jam ends the following Sunday.
Before I saw this posting, I was considering doing something
for
JS13KGames, but I decided
ultimately to go with the Inaugural Asset Jam instead. I really
wanted to make a game that I can continue working on after the
competition. The 13k limit encourages bad coding practices in order
to save space. That can be fun, but it isn't ideal when intending
to maintain the code. I had entered the last JS1K (my entry
is
here) but
this time not being constrained by size seemed like a good idea so
that I could concentrate on making a good game, instead of making it
fit.
Platformer Art
Kenney created a wonderful set
of
platformer
art tiles, and with the
Open
Bundle reaching its goals, they became public domain. Since
then he has also released some extras
including
mushroom
and background tiles, as well
as
pixel
art versions of the tiles. More of his work can be found on his
website at
kenney.nl, Facebook
or on
Twitter.Background Music
For background music it seemed appropriate to stick with the Open
Bundle. I picked out a really nice chip tune song by Strat Kat.
The current version is using Strat Kat's "Chippy Cloud Kid." Strat
Kat can be found
on
Tumblr, Band
Camp, or
YouTube.Gameplay Video
Technology
A demo CTF MapEngine
This game was developed using my own HTML5 game
engine. I like using game jams and competitions as opportunities to
improve my own tools, and it worked out really well this time.
The engine is pretty full-featured and has an integrated editor
which made coming up with a sample level very easy. To make a
symmetrical level I just made and exported the left half, and then
wrote a quick Perl script that reads in a map file and reproduces a
flipped version on the other side with some tiles replaced with
their alternate equivalents.
The engine has built in support for many common platformer features.
Thanks to this I was very easily able to get up and running with a
live demo including things like one-sided platforms and even a rope
bridge.
Physics
A player jumps
on a bridgeThe engine has full Box2D integration. It uses a modified version
of the
Box2dWeb
port of the ActionScript port of Box2d. The current game doesn't
have many physics objects that can be pushed around, but as
development continues I expect it to prove helpful in adding
interesting dynamics. The only notable thing made with the physics
engines in the current version is bridges, which are made by
connecting segments with joints.
Sounds
I used
SFMaker
to quickly generate a bunch of placeholder sounds. When I have more
time, some of them will be replaced with better sounds. All sounds
are generated procedurally on init by using SFMaker as a library. The only
other audio in the game is the background music, which is just
loaded into an <audio> tag and looped.
Network Server
Multiplayer seemed essential for a good CTF game. I chose to write
the server in Node.js. I had made a very simple game server in the
past using Node that made use
of
Node
WebSocket Server. It seems that is now deprecated, so I
switched over to
WS.
The transition was painless. The library had a simple API and just
worked without any issues.
For the purpose of getting things done in a week I opted for a very
verbose JSON based protocol. I built a layer for the client and
server to send events to each other and define handlers, and that
worked wonderfully. This isn't the most efficient way of doing
things though, so I'm probably going to have switch to a much more
compact binary protocol at some point.
My goal for getting this done in one week was to have just enough
stuff synced so that multiple players could run around a map
together. I got far enough so that they could steal, drop, and
capture flags. They also can do light combat, goomba style.
Jumping on an opponents head deals damage and can cause a carried
flag to be dropped.
There are lots of checks in place in the server to validate the
client is following the protocol. This is nice, because it handles
errors in development cleanly, rather than causing server crashes.
There are very few checks beyond the protocol on user requests, and
so cheating is trivial. This will be fixed, but I figured it would
be better to have a working game by the deadline than to put all the
effort into that just yet.
Results
When working on game jams there always is the problem of time
management. I only had a few hours here and there throughout the
week to work on this, so it was very important to stay focused
during that time.
There are things I would have liked to have included, such as more
of the art assets. I included the walking animation for the
players, but not the jump or hurt frames, for example. These are
trivial to include, but I ended up spending a lot of time on the
server and not coming back to finish those off.
The decision to go multiplayer was a guarantee
that a production ready game would not be available, but I decided
to go that route anyway since it seemed more interesting, and since
I am looking forward to continuing development beyond the jam.
A radar was
added in the lower left cornerWhen playing with others on the server it became very clear that the
small viewport wasn't enough. I decided to remedy this by adding a
radar. I probably shouldn't have added this unexpected feature
during the jam, since it cost me several hours. It does help make
the game more playable, though.
Overall, I'd say this went really well for a week long project done
in spare time. The goals were met, and there is a somewhat playable
demo with basic CTF rules.
The Future
I do plan on continuing development and making a releasable version.
The art pack has a lot of content that can be used to add other
elements into the gameplay. There is a lot of work remaining, but I
am looking forward to putting it all together. I am busy with
several other projects, and so I am not going to provide
any timeline. I will post updates on
the
Leshy Dev Blog
as well as on
Twitter.