29 Apr

How Dash till Puff! was born

Motivation

The main motivation for writing this post is to give credit to those games that have been a source of inspiration for creating Dash till Puff!

Also, it gives an idea of how a game takes shape, hot it evolves and changes, how ideas are introduced and the motivation behind them.

 

First prototype

More or less a year ago Flappy Bird was still the thing. I personally loved Flappy Bird as a user and independently of the small envy we all mobile game developers felt for such a simple game becoming such a hit (the “I could’ve made it syndrome”), in my opinion, Flappy Bird was a very fun little game.
I decided, for fun, to take Rock Ninja and make a Flappy Bird style simple prototype with it. Instead of pipes there were bouncing rocks and instead of the bird there was a ninja.

 

I’ve rescued this low quality frame from a video of the first playable Dash till Puff! 🙂
proto1

 

The more interesting thing about this first prototype, though, was that the game was endless and procedurally generated, always ensuring there was a valid path.

 

Several worlds, different controls/physics

The implementation had potential. The obstacle creation was independent from the type of controls and main character motion meaning I could change how the main character moved and the level would be generated accordingly. It was then when I thought it would be fun to have different worlds, each of them with a different control scheme and different obstacles.
The obvious source of inspiration for me at that time was Jetpack Joyride and its different vehicles.
jetpack
I implemented two new controls and it worked great, I had a winning game idea! it would be a procedurally generated endless runner with different controls for each of the worlds. I didn’t know (and I still don’t) any other game with these characteristics.

Over some iterations, the protoype started taking shape:
protoype

 

 

The importance of getting the Difficulty right

I wanted the game to be difficult but the line between difficult and too difficult/unfair is a very thin one. I needed a way to solve the problem of adapting the difficulty to different player skills. Some games have different levels/worlds with different constant difficulties. I didn’t want to do that as I wanted to make it possible to find a challenging difficulty on any world. Other games have opted to do levels with increasing difficulty where you start easy and it gets harder. The problem with that is that when you get more skilled, you need to repeat the “easy” part every time until it gets fun.

One of my references was Super Hexagon where levels are endless, have increasing difficulty but you can achieve “completion”.

hexagon2-100031422-orig
That’s how I came up with the 3 + Endless Worlds and scoring mechanism.

 

Music

During the development phase I used 3 songs from an artist called TonalReboot that I found on Newgrounds.

ng_logo

I discovered Newgrounds (and specially Waterflame songs) when I was looking for a song for Rock Ninja on 2012 and I was amazed by the quality of the artists in that community. I posted on their forums that I was looking for music for my work in progress game and I received a really positive answer from many artists amongst which there were DJVI, Forever Bound and DuttonSaysHi that ended up being part of the game.

 

The Geometry Dash influence

I’m not sure when I installed Geometry Dash Lite on my phone but it was probably around summer 2014, when it started becoming popular. By that time I had a working prototype, with still lots of things to implement but the basics were there. I loved GD visual style and found it extremely well designed, all the pieces seemed to match, the music, UI, the special effects.
Even if I could see why it was so popular, I didn’t play much. I passed Stereo Madness, tried a couple more levels and that’s it, that was the last time I played it for fun. The reason is that don’t enjoy skill games based on memorizing the level. I prefer instead procedurally generated levels where you learn some patterns but you never know what will come next.

By that time I didn’t even know there were more vehicles other than the normal and the ship (the ones from Stereo Madness). From Geometry Dash I learned how simple shapes could look great with the right colors and about the importance of having the right music. So the last big changes in the game fundamental design were to add different color schemes to the worlds and to replace some of the songs I had previously chosen.

optimized2

 

Final words

And that, my friends, is how Dash till Puff! was born.

Thanks for reading! 🙂

05 Jul

Game design – Ensuring there’s Always a valid way/path

Today I would like to write about a simple but very important game design concept that is to ensure there is always a way or path.

In arcade games, one of the challenges when generating random levels is to get the right difficulty without risking impossible situations (or “No-exit”  situation). Let’s imagine the game is about a rocket that flies with a constant speed and needs to dodge circles that appear as he moves.

lowfreq

Ta-daaa!!

 

Ok, now that we have an idea about the amazing visuals of the game, these are our requirements:

  1. Random levels
  2. Difficulty progression with time
  3. The game must be fair so there must always be a path (no blockades where the player will die for sure)

 

Requirements 1. and 2. are easy to implement. In this case, for example, it would be enough to create new circles on a random Y at a right-offscreen position every X seconds. To make the difficulty progression,  X would decrease with time. The problem with this approach is that as X gets smaller and the number of circles starts to get larger, the probabilities of a no-exit situation increase.

hifreq

 

How to solve this problem? Well, there are different possible approaches depending on the complexity of the game and some design choices, I’ll show you 2, the “Workaround way” and the “Pregenerated Path” way:

 

The Workaround way

A classic trick to solve this problem is to change the problem itself. Predetermine some hardcoded safe values (frequency in the example) to generate obstacles that for sure will not cause a non-exit situation.  This frequency will remain constant through the game. Now, to increase the difficulty, instead of increasing the frequency generating more and more obstacles, just progressively increase the rocket speed. This  moves the challenge from geometry path-finding to reaction time.

 

The Pregenerated Path way

If the first way is not an option, we need to make sure when creating the obstacles that there will be a path. To do that we need 3 things.

  • Generate a random path for the rocket. You don’t need to care about any obstacle, just make sure it moves randomly up and down as the rocket would do. We’ll call this the Safety Path.

 

  • Define the size for a bounding box for the rocket that we’ll call Safety Area. Imagine the Safety Area follows the safety path. If you were playing the game you should be able to keep the rocket inside the Safety Area.

 

  • Finally, when generating the obstacles, make sure they will not overlap the Safety Area on the future time T when the obstacle is at the same x position than the rocket. It may be necessary to make multiple checks (on an interval around T) depending on factors such as the width of the obstacles, Safety Path changes of direction, etc…

 

Here you can see a couple of examples to illustrate the way we’ve implemented it:

1. This level is about dodging bouncing circles

javaw 2014-07-04 20-34-24-907

This one is about dodging shrinking circles

javaw 2014-07-04 20-33-30-108

And a bit messier with rotating rectangles…

javaw 2014-07-04 20-30-57-680

 

  • Blue Rectangle is the Safety Area
  • White dots on first screenshot and grey rectangles center point is the Safety Path
  • Yellow shapes are the exact position and shape of the obstacles on T (plus extra checks)
  • Light Blue circle is the main character
  • Black shapes with white glow is the current position an shape of the obstacles

Even if it took some time to create the foundations for this checks, once done it allows us to add any amount and type of objects with randomly generated speed, shape, angular velocity, etc… to our levels without needing to worry about “no-exit” situations.

 

25 Jun

New game in progress

Today I would like to share some screenshots of our work-in-progress new game. Some of the elements you see will stay, some will go and more stuff will be added but the main concept is there. It will be a fast-paced dodge’em-up with several procedurally generated worlds and a different mechanic per world.

red world bluew world green world

Next day I’ll post about some of the challenges we faced to ensure there is always a “possible path” and keep the game fair.

 

22 Jun

Hail to the new website!

We’ve just replaced the old blog with this more modern look website. We now have a separate more powerful blog that should help motivating us to write a bit more often about stuff while keeping an ultra-proffessional look for the rest 🙂