Outcome's a butterfly

Caterpillar Effect

Cause: Build a cocoon.
Effect: A butterfly hatches.

INSTALL & RUN (see README for details)

This game requires numpy, pyglet, and a few other small libraries; all listed in requirements.txt.
Developed on Python 3.7, so that's recommended, but 3.6 and 3.8 should work too. Please use a recent version of pip to install requirements.

Launch using the run_game.py script.


Controls should be self-explanatory. A keyboard with arrows, numbers and Enter is enough; a mouse works for level selection.
Press F to go fulscreen; S to take a screenshot.


Don't play levels 1, 3 and 6.


I don't have a Windows machine available, so I didn't test there. Turns out that it doesn't work there.
As the rules say – if it crashes, it's on me. So you can mark it as "Failed to run". But if you'd still like to play the game on Windows, a fixed version is available on GitHub (link to archive). Thanks to claxo for sending be a backtrace and testing the fix!

If the window is resized or fullscreen, mouse doesn't work for level selection. (Also fixed on GitHub.)



It's Metamorphin' Time!
Presented by Cosmologicon

Presented by xmzhang1

Give this entry an award


Ratings (show detail)

Overall: 3.6
Fun: 3.2
Production: 3.4
Innovation: 4.1

16% respondents marked the game as not working.
Respondents: 10


File Uploader Date
Outcome's a butterfly
encukou 2020/03/29 02:01
Finished game
encukou 2020/03/29 02:00
The game!
encukou 2020/03/28 23:59
How the game turned out
encukou 2020/03/28 23:44
A randomly colored butterfly
encukou 2020/03/24 22:58

Diary Entries

Windows fix

I don't have a Windows machine available, so I didn't test there. Turns out that it doesn't work there.
As the rules say – if it crashes, it's on me, so you can mark it "Failed to run". But if you'd still like to play the game on Windows, a fixed version is available on GitHub (link to archive).

Add a comment

On this week's game

Writing takes a lot of time I'd rather spend coding, so I'm writing a “diary” entry only now, when the coding is over.
(I recommend you play the game before reading this.)

The original idea for this game was a butterfly breeding simulator: you'd cross two butterflies, get a bunch of eggs, then hatch the best ones into caterpillars and let them feed and grow, eventually becoming butterflies.

While feeding, caterpillars could power up and gain special abilities to be passed to their offspring: the ability to swim, break rocks, pause time. The objects would have *effects* on the *butterflies* (ha!), which would be then passed to new *caterpillars*.

The breeding stuff didn't get off the ground. There's a bunch of unused code to cross two butterflies with differently colored wings. But ultimately, all I had time for is single-colored ones. You now get eggs for free, and all of the caterpillars are the same when they hatch.
The almost-unused code is the only reason the game requires Numpy. I hope that's not a barrier for enjoying it.

But, what the game does have is caterpillar feeding! It is, of course, based on well-known Snake games: the caterpillar is long and it grows as it feeds. I've taught Snake at Python beginners' workshops, so I'm glad for a chance to polish a game like this.
I'm quite satisfied with the simple colorful graphics and quirky retro mechanics (that are entirely not true to biology!)

I spent way too much time on little animations. They're my favorite part of making a game. I hope you enjoy them!
(And yes, some big animations are rough around the edges. Priorities, priorities.)

There were originally to be 9 levels, arranged 3×3 like a numeric keyboard: you'd start in the middle and unlock gradually more difficult ones near the edges (using 🔑 keys close to the edges). Out of the nine, I got 6 somewhat done. After renumbering, you start at #2 – that might be somewhat surprising, but at least the keys are still close to what they open.

I'm somewhat happy with the tutorial level (#2). I wanted it to introduce the mechanics of all the game elements. It doesn't do a good job with the red mushroom – originally the ability to eat these for effects was supposed to be hereditary (only for descendants of caterpillars that cocooned a boulder), and was to be explained there. But otherwise, a curious player should have no trouble figuring things out.
Level #1 (maze) tests patience and reflexes. I remember fondly games that required this, but I guess we're used to more interesting things now.
Level #3 (grass and boulders) could be much tighter; there's a lot of moving left and right to achieve the goals. The key carousel is nothing more than a gimmick
Designing level #4 (island hopping) was fun at first, then it grew frustrating as time pressure increased. I don't think I had enough time to test the puzzle thoroughly. Hope it's fun to figure out anyway!
Level #5 (crossing the water) turns out to be a simpler variation on #4. That means it can serve as a preview for #5!
And level #6 is just complete filler. Sorry. If I didn't have a 2×3 level select screen, I'd leave it out.

Could I do 3-5 new levels if I had one more week? Probably. It would need some more mechanics, though. I thought about tunnels (teleports), but I haven't figured out how to combine that with cocooning. Launchers (which skip 1 tile) are already somewhat quirky in the edge cases.
If I was to finish the breeding, it would open up the possibility for more powerful items, e.g. cocooning a diamond would grant you a recessive gene with the power of the corresponding mushroom permanently. That would make existing levels way easier, so it would present new design challenges.

But, if I had that time, I'd rather make a library to make cute animations robust and easy.
Even more likely, I'll program something completely different – something serious and not related to games; something that would either help others or get me money.
Caterpillar Effect's code cuts all the corners to save my time in the short run. It's not architected; it's full of code smells that would bite me if I were ever start to extending it. Which I won't – the week is over.

But I'll definitely return to game jamming! See you at some future PyWeek!