Iterating on quick-and-dirty level gen in Bat Egg

A 2D Bat Egg cover image

Scroll or press Space to continue. If you're having trouble, try this plain text version.

Who am I?

Cheese's silly face

My name is Cheese, and I wear many hats. The ones that are relevant today are:

You can find me on Twitter as @ValiantCheese or on irc.libera.chat as Cheeseness.

I've worked on some games you might have heard of

Neverball Day of the Tentacle Remastered Full Throttle Remastered
The Fall Hand of Fate The Away Team

And others you might not have heard of

Hive Time In the Snowy Winter's Wake Bonesweeper Supply Chain Honeycomb CRUNCH The Spicy Meatball Saves The Day Voices of the Past Super Happy Fun Sun Robin's Rescue Above The Waves FLAT Grenades, Snarks & Teleporters

Today we'll be talking about Bat Egg

Bat Egg Bat Egg gameplay

Bat Egg is a small action game inspired by what I imagine Flappy Bird to be (I've never played it!) and based on characters I used to draw.

A disclaimer

As always, every developer and every project has its own context and identity.

What's discussed here is not advice, but perspectives shared in the hopes that it can help you discover or navigate the best fit for your own work.

Iterating on quick-and-dirty level gen in Bat Egg

Today we'll be looking at creating and refining level generation across Bat Egg's development, going from this to this.

Initial experiments with coloured blocks A near release-ready Bat Egg level

What do we need from level generation?

Bat Egg levels should:

What do we really need from level generation?

A diagram showing the choice between flapping to pass through an upper gap, or gliding to pass through a lower gap

All of this is in service of creating interesting spaces to navigate while managing ballistic momentum and stamina.

Bat Egg's levels are about gaps.

First steps

How's that look?

Initial experiments with coloured blocks at commit 4492545f

This generates spaces that feel noisy and random.

Obstacles sometimes spawn too close to nests and branches.

It was good enough to switch dev focus to movement mechanics and building assets.

Let's get a bit more focused

How's that look now?

Second pass on level generation, with bush and rock assets at commit 80d44e5c

This generates spaces with desired level of interestingness, but without consistency.

Obstacles overlap nests and branches sometimes.

It was good enough to start to consider game-scale pacing and balancing.

Catching overlaps

A little better, a little worse

A screenshot showing a token overlapping a branch obstacles at commit 58f89e8a

This generates slightly less interesting spaces.

Sometimes there are long distances between obstacles.

Obstacles are still sometimes placed a little too close to nests and rests.

It's mostly good!

A bit more refinement

How's that look?

A screenshot showing a culled obstacles at commit 1968e20

This generates consistently interesting levels, with enough room for variety for that to not degrade over time.

Nests and branches are safely approachable.

A combination of near-naive generation and post-generation tweaking yields good results!

A few extra bits and pieces

Further Reading

I've written a little about, streamed, and otherwise documented some of Bat Egg's development. If you're hungry for more, read on.

Thanks for listening to me waffle about Bat Egg's level generation!

End

Bat Egg's not released yet, but some of my other games can be found on my Itch.io page

More musings on development can be found on my Patreon page

More of my writing about games, and game-adjacent culture can be found at CheeseTalks.net

This presentation was created using Stack