Js13kGames is a JavaScript coding competition for JavaScript Game Developers. The fun part of the compo is the file size limit set to 13 kilobytes. The competition started on 13th August and ended on 13th September 2023. The theme for 2023 was XIII Century.
I managed to participate in the competition for the seventh time in a row, this year I went mostly on my own, but fellow SlashwareKnight Stolverd gave me some ideas that kickstarted the defintive development, and friend QuietGecko stormed from Vancouver the last day to light the cold steppe ablaze with his cool audio.
We ended up creating an arcade mongol horde raiding game. You can play online here. Source code is here.
I guess from this experience I would give the following tips:
- Build the complete core gameplay loop day 1 (you can do it!) and put it on front of testers ASAP. Focus on improving over that core for the rest of the jam (UX, adding elements around that core).
- If this looks not doable, then maybe your idea isn’t a good fit for a game jam (or you’ll have to overwork yourself to get it through, your choice!)
- A good mobile UX is no longer a nice to have; most of players will want to play your game in their phones, so be ready to invest some good time on it if you want to maximize your reach.
- Be ready to discard ideas, focus in the ones that are simple and fun.
Part 1 – Slice of a Ship
August 14, 15, 16 – I spent some time tinkering around with an idea: days before the jam I had seen an image in twitter of a cross-section of a sailing ship, and I thought about the possibilities it could bring to a voyage simulation game.

Initially I thought Vikings *might* fit in the time period, but after doing some basic research I found out I was wrong. I dug more into it and it seemed the closer thing I could do would be venetian galleys, (although the Mongols also did some sea incursions around that era)
I kept trying to accommodate the gimmick to a fun gameplay idea, that was at the same time doable with limited time (and the usual constraints of js13k) but ultimately failed.

August 17, 18 – Finally gave up the initial idea and instead thought on doing sea battles ala Centurion: Defender of Rome. But there were two problems with that: It would have been too complex and I didn’t have enough time to make it worthwhile and unique.
I flew to Rio, initially thought on taking my computer with me for the Airplane Coding tradition. but decided instead to disconnect and spend some time with my brother, and maybe get some inspiration.
I recalled my own advise for game jams: aim to create toy, not a game. Then add some fun activities to do with the toy. Maybe the ship is the toy, and I may code it and see how it feels.
August 31 – I returned from Rio to find a lot of pending business, both family and work. So I decided to cancel my participation for this year.
Part 2 – A horde of marbles
September 3 – “I cannot give up– There has to be a way”
September 5 – I asked Stoltverd for ideas for an “arcade minigame” themed in the XIII century. When the theme is so strongly aligned to history I find it easy to fall into the trapping of coding a complex simulation, so I think aiming for an arcade game will make things easier. Time is also running out.
Stoltverd had two interesting ideas: one of them was making a snake-like, where the snake represents an early Mongol horde facing fortified cities and castles counting with no heavy siege machinery, instead the snake would chase supply lines to burn them, while avoiding enemy cavalry and archers. The idea was to keep the horde together, with any interference with the horde would “cut” it, making you lose soldiers.
The other idea he had was related to the end of the Fourth Crusade, and the siege of Constantinople. You could play European troops attacking the city or Byzantines defending it, with each side deciding what points of the city to defend or attack, allocating resources.
That second idea, of course, was very quickly running into the dangerous territory of a strategy game, and would require a lot of considerations (AI for the CPU enemy or multiplayer hot-seat, for instance). It would also have required a much more complex UI. Too much work.
September 8 – I have a complete game that I could submit tonight if I wanted.

It really came out of nowhere; at some point before this day I had cloned Florent Cailhol’s js13k boilerplate, thinking of it just as a starting point to create a snake clone following Stoltverd’s idea. I had never made Snake, so it was going to be interesting.
The boilerplate project comes with a demo of marbles falling and bouncing; so I started adapting that, thinking very little in the visuals and more in the logical representation of the game, the different types of entities involved and how they interacted.
In the game you lead a “horde” of balls, you need to destroy the moving supply lines while avoiding the invincible enemies that patrol around them. Once you destroy all supply lines, you can attack the city in the middle, and advance to the next level if you manage to survive.
At this point, I was able to piece together most of the game; I experimented a lot with the “horde” behavior, how to make it feel organic and chaotic instead of a bee-line behind the leader; in that aspect it retained the initial idea of “snake”, but was less predictable. The game is about harnessing the power of your horde and maneuvering around your enemies.
Already this early I was able to submit the game for dev-testing; I got some important feedback regarding color blindness, and also added auto-scaling to fit the viewport which is always a pain and different for every game, so it’s better to have it solved early.
September 9 – I started adding some visual identity to the game away from the basic marbles demo. Playing around with the colors and using some Unicode glyphs mostly.

I also added forests to add some variety to the gameplay on each round. They hinder the movement of the player so you almost always want to avoid them (but not always!). They are generated using a seeded RNG, as cluster of blobs.
I started wondering if it would be possible to have some music to go along with the game. I imagined something like this.
September 10 – Added basic mobile support with buttons (portrait mode)
Again, I sent it to the js13kgames slack for feedback; Steven Lambert a.k.a straker, the creator of Kontra.js and accessibility specialist, told me it works fine but also didn’t feel very natural, and caused some interruptions in gameplay to make sure you were tapping the correct button; he suggested using swipe gestures instead.
I invested some time playing the game, tweaking the balance so it didn’t feel too hard or too difficult.
September 11 – Decided to add something quite big that would add a lot of variety to the game: powerups after finishing each level. This would allow a level of strategy on the choices the player takes to improve his horde, making each run more unique.

I further refined visuals using better emojis, and put some effort to make sure the levels felt varied and there was some progression on them.
I also talked with QuietGecko, he’s on his way back to Colombia after spending some time in Canada. For some reason he was interested in doing the sound for the project in the middle of his last day of vacation, which was great news for the project! So this day I decided to set up ZzFXM in anticipation of his contribution, adding some sample audio from our 2020 entry, Distant Friends.
September 12 – Improved the mobile experience, implementing swipe-gesture movement and also tap-able buttons to select upgrades, thus making the game completely playable on tablets as well (not just portrait orientation mobile). It was quite a bit of work but also works great.
QuietGecko didn’t disappoint, proving a great Mongolian Horde track (dubbed GKhan) as well as a good set of sounds effects. He finished this while boarding and while already aboard the plane heading back home ❤
Finally, Stolverd did some research in order to provide an interesting set of names for the technologies/improvements that the player can select for their horde. These are small but important details to add that level of historical veracity and make the players curious about history (something that I like doing in most games).
What Went Right
I was able to create a solid (fun? challenging?) arcade game that, I believe, played along pretty well with the theme.
I was able to stick to a core gameplay idea, expose it to testers very early on, and work to polish the experience (esp. for mobile).
We were able to sneak in cool audio the last minute.
What Went Wrong
While I still haven’t received feedback from the community, I don’t think anything went particularly wrong. Something I wish I could have added were mountains and lakes to make each level more unique, being able to attack enemy soldiers, being able to camp to recover horde size, but these things would have required some time to balance.
So I guess if I had to say something could have been improved, maybe I could have dropped the initial idea faster, so I could iterate and develop the final idea more.


1 Comment