Project Naga

December 2018

Ok hear me out: what if Snake... but it's a dungeon crawler.

— My brain, out of nowhere

Sounds good right? It does take a bit of imagination to mix all the concepts of the two styles but I bet you can already see it in your head. Someone already had the idea to combine Snake and Bus Simulator so it can't be that bad.

So I tried to make it, or at least a prototype.

My plan was to make one "normal" level and a boss fight. The game is grid-based with a very simple dungeon layout and an even simpler art style from a sprite sheet I found on and slightly modified. I use PIXI.js for the graphics and a few other packages for things like vector math and stuff. Here's the first problem I had with this project: at the time, I couldn't find a robust, maintained and well documented ECS librairy. They were all deal-breakingly lacking in some aspect so I ended up using a random one that at least managed to document all of its functionalities but at the time it wasn't the best idea I had (although it seems to have progressed a bit since then).

Now let's talk gameplay. I couldn't just copy the mechanics of Snake exactly and build a dungeon around it (although I thought of trying that at first but it wouldn't be a dungeon crawler, just a weird Snake). My Snake doesn't die instanly when hitting his tail or a wall, he will first try to turn away from the obstacle even without player input; and if he is blocked on all sides he will lose some tail length and become ghostly for a little while to allow the player to get out of the problematic situation. Similarly, being attacked by enemies shortens the snake's tail until there is no more tail left, at wich point you will die. Otherwise the other rules of Snake apply: you can't stop and have to eat things (enemies) to grow longer. I'm actually pretty happy with how the snake behaves in my game but it wasn't the hardest part. Here's what it looks like.

A screenshot of the game

Turns out it's pretty hard to design enemies and environments for a movement system from 1976 and keep it fun. Maybe I could have done it if I kept at it (and I had a decent idea for a boss) but by then a few bad decisions from the start of the project were starting to become really annoying. I think the game feels too slow but speeding it up makes it almost uncontrolable so I decided to stop working on it. It was pretty fun while it lasted.

Of course, all the code is on Github and you can play it here. It might crash, I'm not entirely sure where I stopped.