The Random Train

April 14, 2014 at 2:57 pm
0 comment

The trauma.

I loathe learning anything by heart. The idea itself gives me the creeps. It feels like I have to remove my brain and stuff my skull with knowledge. So I find ways to avoid it by inventing mnemonic workarounds. It didn’t prove useful to get better grades in school but it gave me a feeling of learning to use my head instead of dull forced-feeding.




The problem.

In the Arcade mode of Pix the Cat, I wanted to build Level Design that offered the possibility of getting better at every try. I also wanted to avoid that players learn the levels by heart and keep repeating their solutions as their skills get better.

My goal was to find a system in which levels would look and feel the same without actually being the same. Experience should lead to better performances without systematic repetition. I was looking for something that would keep players alert all the time.

Because Pix the Cat is a scoring game with online leaderboards, it was mandatory that each play would allow to reach the same number of points.

Procedural level generation would have done the trick (and made everything easier for production). Unfortunately I wanted each and every level to have this handmade touch that makes it special. Memorable. Isn’t it ironic…


PTC_level editor


The resolution.

The solution we found turned out to satisfy my trauma and gave a fresh feel to every new game session.

An Arcade level pack is composed of a series of floors. Once you finish a level, the “doors” to the next level open. It is embedded in a “wall” of the previous level. Just like Russian Dolls. Once Pix enters a door, the camera zooms in to display the next level in full screen.

The first step was to design one complete pile of levels (~25), from the “ground floor” to the “deepest floor”. Then, we randomly flipped the level-pile horizontally and/or vertically at every new game launch to unsettle the players.

Between 1 and 9 variations of each level within that pile were designed. Moving the collectibles here, the drop targets there, shifting a few walls here, reverting enemy paths there… and so on. Only slight changes, but everywhere.

As a new game is launched, a variation for each Wagon in the Level Design Train is randomly selected and the complete pile is mirrored one way, the other or the other.




Because the variations look alike, players feel comfortable; and because each variation has its best optimized path, players must constantly adapt to make sure they perform.

Then, it was an abyss of complications to make sure all variations for a given level were equal. Measuring the “first approach path” for each, the “best possible path”, the number of tiles from entrance to exit; balancing traps and movement patterns, and so on…

The last thorn in my side was the Ghost feature we implemented that allows you to compete with your best score, your friends’ and eventually the leaderboard’s best performances on the entire pack, not one given generation. We needed everything to match visually in order to avoid ghosts going through walls or showing illogical paths…

The level design for the Arcade Mode of Pix the Cat was a lovely experience and one hell of a ride (pun intended).

When we calculate all SKU generation possibilities for the Main Arcade Pack, it adds up to a mere 6 817 131 521 397 227 520 possible draws… oooooh yeah! (Math by the PastaDevTeam).

In other words, if you play the Main Arcade version on Pix the Cat, the game will pick a draw of levels out of Six Quintillion possibilities. And every time you start a new game, you feel at home nonetheless!

I never thought I’d use the word Quintillion. Achievement unlocked!




Tags: , , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Current ye@r *