Windows users: play this game with no installation! (quick play)
Mac and Linux users: huh, you still need to install Löve2D and play this version.
Bunt means multicolored in German. Indeed the game is all about interactivity with colored objects. In addition, bunt is four letters long, and the game uses four primary colors. Each key from 1 to 4 is assigned a color. By pressing a key, the player interacts with objects of the corresponding color. The goal is to touch every star in the level to go to the next one.
What are those interactions? Something simple, easy to understand, funny to use, and ultimately allowing to solve crazy puzzles. It was important that each object has a different interaction, otherwise it would be like "eh look, something new! But actually you already know it." During playtests for a previous unreleased prototype, we've seen that players enjoy discovering new elements of gameplay. This is an extreme illustration of this concept.
I started the competition with the intention to develop a puzzle game where rhythm helps to solve the levels. The base would be little pixels a la 8bit depicting sound frequencies. Keys would allow to interact with these pixels, to move them in different directions. But then I thought it would be very limited. So, let's add more things to interact with. Hey it's cool! Let's go further, all the buttons do the same interaction. And eventually I dropped the 8bit stuff for a colored design. So, quite different from my first thoughts.
|Press blue or yellow and the crate will fall.|
Levels present a simple situation. The player should immediately understand what to do to reach the stars. For instance, the second level contained just the frog at the beginning. Two friends tested the game and were stuck here. At the second level?! Damn, was it not so obvious that a frog can jump in rhythm? No it wasn't. So I added a little trampoline, and it became evident that the frog could jump with impetus (it was also more logical, a frog can't gain impetus just by itself). Levels are also designed to be short. Well, the last ones may require some experience, but the first ones are very short, and this creates a little addiction to the game in the same way that WarioWares.
Level design actually starts before the first level. The first thing the player sees is the menu. "Play the game with these keys", each key has a color, there are colored balloons... let's press 2. Oh, the balloon blows up! This is the very first understanding of the gameplay: pressing a key will blow up balloons of the corresponding color. The first level comforts this idea, and introduces the star (it may not be sure what the star actually does, but the next levels will ensure that they have to be touched by something). The second level has a frog instead, and introduces the notion of pressing keys several times on precise moments. The third one uses another color, showing that the principle are the same for all keys, and needs the player to press the key for a finite duration. And so on... almost each level adds some element to the game.
The player should quickly understand that he can restart the level when he can't reach the stars anymore, but that this is no punishment. At first, I made a in-game menu, appearing when the player presses 5. Then, the key 2 allowed to restart the level. A friend told me it was too long and besides the menu was useless. True. So let's just press 5 to restart, and press longer to quit.
Colors were chosen mainly to change between levels. In addition, there is a physical constraint: the game is meant to be played with five big grounded plots, and players can't press both on 1 and 4 at the same time. Therefore keys are often used in pairs. Moreover, the most difficult levels use keys on the right, because the Restart key is closer.
Once again, I've developed this prototype with Löve2D. As this game heavily relies on physics, I've used Box2D (included in Löve2D). I've understood why Magnetic glues sometimes bugs (I won't fix it anyway). The reason is well documented: "Using Shape:destroy when there is an active remove callback can lead to a crash. It is possible to work around this issue by only destroying object that are not in active contact with anything." but I haven't clearly understood what it means. Simply do not delete any shape which is in contact. The solution I've chosen is to remove entities by moving them outside the screen and to save them in a separate list until they are no contact with them (therefore I increment a variable in the add callback and decrement it in the remove callback).
Entities are just containers for a set of components. Almost all objects have a body component (physics) and a sprite component, furthermore the interactive objects have a logic component which basically allows for custom scripts related to interaction. But... I feel like it misses something. On Magnetic glues I've separated the concepts of behavior and game object, but I've added a huge overload with a signal-slot system... Needless to say, I've sometimes hacked the game engine (aka break the encapsulation) to keep things simpler. The last level with the puzzle is a hack of both the game engine and game principles, but I've thought I need to break the game before the end, to calm down the player.
The graphics were made with Inkscape. The background was inspired from Angry Birds. The green, open landscape adds nothing to the level itself, yet it subconsciously relieves the player. For me too, because finding and designing objects for mostly two uses is exhausting... The little GFX and SFX clues were very easy to add, yet it makes the game more attractive. Although I'm still not proud of the sound design and I'll work on that on the future prototypes.
Frets on Fire. It also seems that Löve doesn't support the keys 1 to 5 very well under Linux, but I currently can't verify. The second input method is with a Xbox controller, as it uses the same colors for its buttons. Any other button restarts the level. By the way, the order of colors (blue, green, yellow, red) was chosen because of the button disposition on the controller and the Dance Dance Revolution transfer function.
Don't forget: Global Game Jam next week-end!