Friday, July 29, 2016

How Stretchy Dash Came To Be

Over the past few years, I've become a huge fan of the Ludum Dare game jam. For those of you not familiar, Ludum Dare is a casual competition where thousands of game devs come together over a single weekend to make the best games they can. You base your game off of a theme that is revealed when the jam begins. I've always competed in the solo category, but there's also a three-day team category.

By the end of the weekend, providing you manage scope properly, you have created a small prototype. Over the next few weeks, your work is judged by other competitors, your peers. It's a great learning experience in a lot of ways. What happens to your prototype after the jam is over is up to you.

In Ludum Dare 35, the theme was announced to be "Shapeshifting". My first thought was to keep it small, since I've been burned by feature creep in the past (one weekend is a shockingly short amount of time for creative work). I decided to make a variation on the runner genre. The basic concept of a runner couldn't be more simple - avoid obstacles and gather pickups. The best part is the openness of it. What do the obstacles look like? What do the pickups do? How do you move? The variations are staggering, so I just went with it.

My original prototype from the compo was titled "Stretch Runner". The obstacles and pickups were nothing special; they did their jobs by threatening the player and providing a score. The real innovation originated from the theme itself. What if you could change your shape to avoid obstacles? I decided to simplify the controls to conform to the arrow keys. Left and right changed lanes, up and down changed shape. I wanted the functions of the controls to feel "right", so the up arrow became stretch forward (lengthwise), and the down arrow became stretch backwards (squish down). I designed obstacles that required the player to stretch "skinny" to avoid them. This felt great to play, but the player could just hold down the up arrow and be skinny forever, avoiding all obstacles with no effort. So, I added a limited pool of energy to prevent infinite stretching, which solved that problem.

Next I tackled squished/horizontal stretching. I found that there was no reason to do so, since it only made you more vulnerable to hitting obstacles. So, I decided to create groups of point pickups that would require the player to increase their surface area to gather them all. This worked okay, but it wasn't really necessary to do since you could just wait for more pickups to spawn later on. This problem wasn't really solved in the prototype.

Stretch Runner judged pretty well, even with it's simplicity. I was at a point in my self-taught indie career where I had never finished a single game, but I had gathered a ton of knowledge and skill. I made the decision to finally finish a game. I just had to pick one idea and go with it, and no matter what it would get done. I needed something small and simple that wouldn't take long to go through the entire process of development and publishing. Stretch Runner was perfect!

I went back and forth with myself over what platform to release it on. While I have always seen myself as a PC developer, Stretch Runner seemed like a perfect candidate for a mobile game. The arrow key controls could easily be translated into swipe controls, and publishing to Android was far easier than any other platform. Since the prototype was already made in Unity, it was relatively simple to build for mobile. So that was it, I would polish up Stretch Runner and release it on Google Play.

To any developer that decides to go ahead and turn their prototype into a full release, I give you this advice - don't start with your prototypes code base. Just start over. It only took a couple days to make the prototype anyway. The code you came up over a rushed weekend is not a good starting point. It's guaranteed to be messy and difficult to scale. Just start over!

There were many changes I made to Stretch Runner to turn it into Stretchy Dash, but I'll get into that in another post. Overall, the most important decision I had to make with this entire process was to dedicate myself to one project. I knew it wasn't going to be perfect, but I just had to step back, do the best I could, and not give up. That is really all that is required to finish something. Be consistent and don't give up. Know that if you keep working on it, piece by piece, it will get done eventually.

I can't wait to tell you more about how Stretchy Dash works and how I'm getting it out into the world, but that will have to wait until next time. For now, just keep making games.

No comments:

Post a Comment