Cranky Bird - Some musings on creating it

Hello friends,

cranky_bird_itch

My game Cranky Bird is out now, you can get it on itch here: Cranky Bird on Itch.io

With the shameless self-promotion out of the way, I thought I'd share a few thoughts on how it came together.

Start
I wanted to give Pulp a try because it looked cool so of course I needed some sort of idea for a game. I absolutely wanted to use the crank, that much was obvious. What if you played Flappy Bird with a crank? Yes! Cranky Bird! Yes!

So, it basically started with a pun.

Looking back, I think that pun was funny enough (to me) that is was a sort of foundation or hook that kept me feeling confident in the idea. That feeling is really important to see a project through till the end.

Going my own way
Turns out, making something as simple as Flappy Bird would be incredibly complex in Pulp. Scrolling backgrounds and moving smoothly through levels left to right seemed impossible.

Even getting gravity to work on the bird required me to overwrite the default character controls. This was a bit tricky but there's some good resources on the forum. It also meant that I ended up doing all my own interaction code and collision checking because it broke all the default stuff.

cranky_bird_gifscreen_3_L

I didn't go into Pulp thinking I'd do this much coding but by now I was committed to actually getting it all working. At this point I think I was kindof motivated by spite to prove that it was possible despite all those Pulp limitations.

Game and Watch
I really wanted the levels to feel as alive as possible. I quickly started animating some grass tiles and the results made me happy.

Because I'm not a very good pixel artist or animator I stuck to 2-frame animations for most tiles including characters. This leads to the image jumping between two versions back and forth. That rhythm really reminded me of the feeling of Game and Watch games. I kept almost all animations to 1 fps for that reason.

cranky_bird_gifscreen_5_L

Visual Balance
It ended up being both economical and a stylistic choice. I think every level has some set of environment tiles that are animating at all times. I added grass, water, flags, electricity, bugs, mushrooms, chimney smoke, characters, pickups, keys, pipe water - all with minimal animation.

It was a challenge to find ways to get that motion into every level. To provide the kind of challenge I was looking for I needed a lot of solid structures. This ended up being things like rock, bricks, industrial blocks and metal girders.

Without the animated tiles it would feel a lot less fun I think.

Structure
As a project evolves, some internal rules start to emerge. Like the "add as much animation as possible" I also wanted all the levels to be as structurally sounds as possible.

That didn't work out everywhere but I tried. So, all the walls are always connected to each other. Within the suspension of disbelief it all makes sense. I think such rules help you build out levels. I treaded the edges of the screen as solid to give a bit more leeway.

cranky_bird_gifscreen_4_L

Emit it
Pulpscript was fun to use but damnit if I didn't miss a lot of functionality that I was used to. Everything being tile-based was hard to deal with.

I didn't want to end up referring to tiles by position, that just seemed like a recipe for disaster as you build levels. To get around that I use emit. I was concerned about performance but I guess it was fine.

So, tiles like, spikes, switches, doors, level end arrows and pipe flows can be placed anywhere in the level and will react to events emitted to them. Keeping code relatively clean.

In Closing
This has become a long post. If any of you have questions, ask them below and I can come back to them later.

Thanks for reading.

5 Likes