Caromble! is a fresh brick-breaking game in a 3D, physics-based dystopic world with an unique art-style and epic gameplay features you wouldn’t expect in a brick breaker.
It is created by Crimson Owl Studios, a small part time indie team that comes together every Friday to develop their first game. Caromble! will be released in 2015 and will be available on PC, Mac & Linux.

Subscribe and receive Caromble! updates:

Game Development Blog:

Last Friday we have finished our implementation for controller/gamepad support. This means that in the next big content update of Caromble!, you can choose your favourite input device out of the big three:

You can now control the paddle with gamepad, mouse or keyboard! More input devices are on their way...

We will do a beta of our first big content update next week on Steam Early Access, and if that won’t bring up any major issues, we will release shortly after. Get ready for Chapter 2, full of explosions, introducing the 1st special powerup (!), two skill levels and support for your favourite gamepad.

Controlling the paddle is the main type of interaction in the game, so this should feel as smooth as that actor in a hot spice commercial. Therefore, during the implementation of gamepad-support, we also tweaked the mouse and keyboard controls to make those better. The implementations of these three input devices are fundamentally different and I would like to use this blog post to explain these different methods and tell you how we achieved the best result for optimal control of your paddle.

In the following snippets we have a few parameters:

  • deltatimethe time between the current and the previous frame; to make the controls framerate-independent.
  • paddleSpeed: this parameter is necessary because of the way we set the paddle position in code. Each level has a left- and right-end position of the paddle. The movement of the paddle can be between these two extremes. A value [0, 1] describes the position of the paddle with 0 as the left-end and 1 as the right-end. If our input devices would work on this value directly, then the paddle speed would be depending on the distance between the two end-point. Instead, we want the speed to be described in terms of paddle-size, which is what you would expect. The value of paddleSpeed is calculated based on the distance of the end-points and the paddle-size and is thus used to make sure that we can control the paddle in terms of ‘move 0.2 * paddle-sizes to the left’, instead of ‘move 0.2 of the distance between the end-point positions of the paddle’.
  • movement: the result of the functions on the input data and is applied directly onto the paddle to map its position to [0, 1].
  • curSpeed: this variable keeps track of the speed of the paddle when using the keyboard or d-pad. We update curSpeed every frame, so it needs to be stored.

I like mouse control the mostThe mouse has the most straightforward implementation. We want the displacement of the mouse to be mapped linearly to the displacement of the paddle, resulting in its new position.  All that is applied to this displacement is a scaling factor. This gives a feeling of direct control. You have the freedom to move the paddle over large distances quickly or apply small displacements in a very precise manner. Here is the code:

float moveX = mouse.getDeltaPositionNormalized().x;
movement = (float) (-16.0 * paddleSpeed * moveX * deltatime);

Because the input for the mouse is provided in pixels, we use getDeltaPositionNormalized() to normalize for the screen size. You want to have the same behaviour in a 1280 x 720 as on a 1920 x 1280 screen. This function also applies the mouseSensitivity setting that can be set by the player.The biggest advantage of the gamepad is that you can really 'hang' on the couch with it. I love hanging...The main difference of the analog stick on a gamepad with the mouse is that it has a limited range of positions. It can be tilted to the left and to the right in a continuous matter, which will produce an input value of [-1, 1]. How can we use that to control the paddle? If we would map this value directly to the position of the paddle between its left- and right-end, the resulting speed and behaviour of the paddle would differ per level (some levels are very wide, like a platformer game; #waitforcaromblechapter3). This is not what we want, so instead of using the analog stick value to set the paddle´s position, we will use it to set the paddle´s speed. Let’s imagine moving the paddle to the right. Keeping the analog stick at 0 will result in a speed of 0. When we put it completely to the right, corresponding to a value of 1, we want a speed of, let´s say, x, which is normalized as described before (dependent on the paddle-size and not the distance between the ends).  Now we can achieve all values between [0, 1] to give the paddle the speed we want, which also gives us a lot of control. Our first idea was to map [0, 1] linearly to [0, x], but as it turned out, it feels nicer if we apply an exponential mapping. So a value of 0.5 does not map to 0.5*x, but more like something as 0.25*x. This allows to have precise control of the paddle when you move the analog stick only a little.

There are still a few more things we have to take into account. Unfortunately, if you release the analog stick, it does not return 0 as its value. Sometimes it ‘sticks’ a little, which can even result in values around 0.2 when the analog stick isn’t touched. To fix this, we introduce a deadzone. We choose a deadzone of [-0.2, 0.2], which means that all values within this range are mapped to 0. In this context we want a value of 0.2 to correspond with 0 as well, so we remap [0.2, 1] -> [0, 1] and [-1, -0.2] to [-1, 0].

Even after introducing the deadzone, we were still not satisfied with the achieved precision when we wanted to move the paddle only a little. In a brick breaker game like Caromble!, this precision is crucial, so we have added something that we call precision mode. When the right shoulder button is hold down or the right trigger is pressed over halfway, we enter precision mode. In precision mode we scale the applied speed with a value of 0.35. Here is the code:

// amplitude is in the range of [-1, 1] 
float amplitude = actionList.getAction("AnalogStickHorizontal").getValue();
// precision mode if one of the right triggers is pressed
float precisionScaler = 1f;
if (actionList.hasAction("PaddleMoveFocus") || actionList.getAction("PaddleMoveFocusAxis").getValue() > 0.5)
	precisionScaler = 0.35f;

curSpeed = Math.signum(amplitude) * Math.pow(amplitude, 2.5) * 3 * paddleSpeed * precisionScaler;
movement = (float) (curSpeed * deltatime);

The introduction of an extra key for precise control works, somewhat to our surprise, great! When you need to move the paddle over a long distance you put the analog stick in its extreme. When you are close to your desired position you hold the precision button and you can place the paddle exactly where you want. Awesome stuff.
There are so many buttons on the keyboard that are not used with Caromble!. Maybe that's reason enough to find a prpose for the 'any' key
And then we have the keyboard; a bit old fashioned, but still a favourite to some players. This is a fundamentally different input device than the mouse and the analog stick. Where with the other two you have a whole range of input values, the keyboard provides… just two. One key to move to the left and one that moves your paddle to the right. It makes sense to map these keys to a certain paddle speed, but we would like to see the paddle move smoothly. More precise, we would like the speed of the paddle to be differentiable, meaning that it doesn’t ‘skip’ values. This is a property that the mouse and analog stick implementation also possess. We can achieve that by letting the two keys correspond to an acceleration of the paddle, which is applied until a maximum speed is reached. This means that the paddle starts moving slow, but while you hold down a key, its speed increases until a set maximum. As with the analog stick, we won’t increase the speed linearly, but exponentially. This provides more control when we hold the left or right key for a short time, which I use in a way I’d like to call ‘tap-tap-super-tap‘. This puts the paddle in the exact position I desire. When I release the keyboard key, the paddle decelerates until its speed is 0.
I mentioned the differentiability of the paddle-speed, but I lied a little there. When we switch from the left key on the keyboard to the right key, we want to move the other way immediately. At this moment we do not decelerate nicely, but set the speed to 0 and accelerate in the other direction.
Also, because we liked the precision mode so much in the gamepad implementation, we use the Left Alt key on the keyboard to enter precision mode. Here is the code:

float maxSpeed = paddleSpeed;
float acc = 20 * maxSpeed;
boolean hasMoved = false;
float factor = (float) Math.pow(Math.max(0, 1 - Math.abs(curSpeed) / maxSpeed), 2);
if (actionList.isDown(paddleLeft) && !actionList.isDown(paddleRight))
      if (curSpeed < 0) 
            curSpeed = 0; 
      curSpeed += factor * acc * deltatime; 
      hasMoved = true; 

if (actionList.isDown(paddleRight) && !actionList.isDown(paddleLeft)) 
     if (curSpeed > 0)
           curSpeed = 0;
      curSpeed -= factor * acc * deltatime;
      hasMoved = true;
float focusScaler = 1f;
if (actionList.hasAction("PaddleMoveFocus") || actionList.getAction("PaddleMoveFocusAxis").getValue() < -0.5))
      focusScaler = 0.5f;

curSpeed *= focusScaler;
if (!hasMoved)
      // decelerate to 0
      curSpeed *= Math.max(0, 1 - 20 * deltatime);

movement += (float) (curSpeed * deltatime);

Of these three input devices I personally like the mouse the most. I feel that it gives me the best control of the paddle. This opinion is not purely subjective; science supports it! Humans tend to find it easier to interact with position-control than with velocity-control. Furthermore, humans like velocity-control more than acceleration-control.

I hope this has blog given you some insight in how we approach the issue of paddle control in Caromble!. We are curious what you think of our gamepad implementation and hope you find it as smooth as James Bond. We have tested our code on these three gamepads, so we hope you have one of these three 😉

The left one is so old! It was also very sticky, but we don't know why...

Besides these three described main means of control, we are also working on a fourth input method: Intel RealSense. We will address this in a future blog post, but we can’t tell you when or if we will actually support this in Caromble! . The Steam controller is on our wish list as well. Hopefully we can get our hands on one soon!

The Final Caromble! Cover Artwork

I’ve posted the sketches earlier, and you’ve probably seen the artwork pop up in various shapes everywhere. But I haven’t posted a nice clean version here yet – and how about a wallpaper?

I’m used to do marketing artworks, but never actually been on the side of using them myself. So it was once again a good chance to learn some lessons. I chose the highest resolution I could work in, and kept everything in separate layers. That makes working slow, but pays off in the end. In this case especially when the big banner for the firstlook expo had to be printed.
The part that I wasn’t aware of, is how many different formats I’ll have to use this one in. The high banner is quite different from the square Steam

Caromble Banner Photo

There were quite some adjustments to get it into this format – so it’s good to keep all major elements in layers.

Caromble banner artwork

And here is the final version – this time the size for the banner. Some elements moved and the path is longer than in the wallpaper. I like this version of the composition a lot.

Looking back on Firstlook 2015

Firstlook 2015 is over, and my voice almost sounds normal again. Two days of talking about Caromble! with loud music blasting from speakers everywhere did take its toll.

But a creaky voice is a very small price for the awesome experience of seeing so many people play and enjoy Caromble!.  At times there was even a bit of a crowd around our booth, unfortunately also resulting in a bit of waiting time occasionally. Guess we’ll bring two machines next time. We’ve been on shows before and had plenty of feedback from players on other occasions, but the feeling you get when someone genuinely enjoys the game you made never seems to get old.

We also made a picture to prove that marketing is also something that we take very seriously, and that we have been giving our best effort during the Festival.

You can't see the picture, so just assume that whatever you would have seen here would have convinced you of how very seriously we take our marketing effort.

Without any doubt, only a team taking marketing very, very seriously could have made such a picture.

And finally a congratulation to Jenfri for winning tickets to Firstlook by writing the best slogan for Caromble!: If it ain’t solid it will Caromble!


Op 10 en 11 oktober staan wij met Caromble! op Firstlook in de Jaarbeurs, Utrecht. Als je er heen gaat, kom dan even langs, probeer Caromble! en ervaar brick breaking in de 21e eeuw!

Heb je nog geen kaarten, maar wil je wel graag naar Firstlook dan kun je ze bij ons winnen! Wat moet je doen? De slogan van Caromble! is “This is Caromble!“, maar jullie kunnen ongetwijfeld iets beters verzinnen. Tweet jouw slogan naar @Caromble, zet het op onze Facebook of nog mooier; maak een video waarin jij jouw slogan voor Caromble! aan ons voordraagt. Om het goede voorbeeld te geven hebben wij alvast een video gemaakt waarin we onze slogan op zeer muzikale wijze met jullie delen:

De winnaar wint twee kaarten voor de Firstlook beurs in Jaarbeurs Utrecht op 10 en 11 oktober. De beste 5 slogans krijgen bovendien een Caromble! Steam key en een gesigneerde poster. Ook getekend door de artist:). Wat houdt je nog tegen sloganeer als een malle!

Als je wat meer inspiratie wilt hebben of nog niet helemaal weet wat een Caromble! precies is, dan is hier onze Early Access trailer:

Om meer over het team te weten te komen en te horen en waarom we voor Early Access gekozen hebben, kijk dan hiernaar:

We zijn benieuwd naar jullie slogans en hopelijk tot op Firstlook!

Caromble! is nu verkrijgbaar op Steam Early Access!
Twitter: @Caromble
Facebook: Caromble

In our first Early Access release there are two skill levels to unlock. The first is Sharphooter, for which three medals are needed. Have you unlocked it yet? Can you beat Peter’s highscore:

Once you have defeated the Chapter 1 boss, Two teaser levels for Chapter 2 and 3 are unlocked as well. Chapter 3 introduces multipaddles and we hope you are excited for them. What do you think of our crazy-pazy work-in-progress shader effect:

We are currently working hard on finishing Chapter 2. Check the pinned discussion on Steam to keep track of our progress. We are aiming to release Chapter 2 before the end of October, but yeah… part-time indies 😛

For the Dutch fans, or any happy travelers; in 2.5 weeks, from 9-11 October, we will be attending FirstLook in Jaarbeurs Utrecht. Here you can play Caromble! and have a sneak peek at our Chapter 2 levels! Hopefully we see you there!

Features for next update announced

The post-release buzz has died down a bit, and the pre-next-update release crunch has begun. We’re currently working very hard on every Friday to finish the next Early Access update as soon as possible.

The big feature is a large overhaul of the input system, so we can have smoother gameplay at low framerates. This has a lot of impact throughout the game, so we’ll have to do some extra thorough testing.

Chapter two will be also be part of the next update, effectively doubling the amount of content in Caromble!.

Controller support is another big item on the list.

And last but not least there will be tons of bug fixes and tiny improvements.

To end this post, please look at this gif from a scene that will not be part of the upcoming release 😉

Scene that won't be released this year

Early Access Round One

And the Oscar for Best Performance by an Actor in a Steam Early Access Video goes to…

What a week! Thanks for all the feedback on our Steam Early Access release! Caromble! only got positive reactions! Which is a great stimulus to work even harder towards the full release :)

Also, we we’re a little surprised on the reception of our Early Access Explanation Video. You people really liked it! It’s good to see our message about releasing on Early Access has been received well and gets great support. Haven’t watched the video yet? Please do.

Besides the great reactions on our Steam community page – thanks again! – some friendly redditors picked up on our video and gave really nice comments:

“This was the best explanation and implementation of Early Access I’ve ever heard. Seriously.”


“This is a brilliant Early Access video. Using humour and truth to break the news to people will win them a lot of leeway and respect.”


“Really great take on the early access system; honestly wish more people would take the route they have.”

Also, great to see Thomas – the artist – being admired for his acting skills! “And the Oscar for Best Performance by an Actor in a Steam Early Access Video goes to…”

Besides creating the game itself, it is also a lot of work for our small indie team to create additional content like our videos. It’s reassuring that the result of those midnight hours is being appreciated!


This Caromble! Friday

After this milestone it’s time to look forward again. This Caromble! Friday we’ll discuss all the responses and decide what will be in the next bigger Early Access update. In between the content updates we’ll possibly push some hotfix updates.

We’re glad that the number of issues didn’t grow that much, so we can already focus on introducing new features.

You want control? We are working on our controller support. The logic is already present but the controller needs more tweaking to make you – ehm.. – feel in control. Naturally, we also want to add the next chapter levels. So those will probably be in the coming update.

Until next time, happy gaming!

Early Access, here we come!

Finally we can proudly announce that after six years of work we’re releasing Caromble! to the public on Early Access!

It has been six years one-day-a-week effort to create this on this for us. That’s 312 Fridays! And we’re still not quite done, since this is a version we’ll improve until the final release in a couple of months. If you want to support us, and maybe give us feedback – head over to the Caromble’s Steam page:

We have released a fresh trailer with the release also:

And an explanation of what Early Access means for us (and you):

Since the morning we sold a few copies, and one of the first reactions we got was “That game is fun… ALOT of fun”. We even scored a neat Caromble! review already. And the graphics style and physics often get compliments. Good start.

Happy Caromble Team

Time to celebrate! …a little.

Early Access means though that it’s not the full version. It’s for us to ask for help with finding bugs, optimizing the engine and content. It contains the first levels… but every buyer will get the rest step by step as we’re finishing it.

Marketing will be one of our next challenges, since we have zero budget. And we notice that it takes a lot of time. But since people really like our explanation videos, it seems we’re learning.

So please check it out – and any feedback and share will help us a lot.

Caromble Early Access

Caromble! Early Access Artwork

Dear friends,
Remember my happy dance in the last blog post? Well, the time has finally arrived. We know you have been patient. We know you sometimes wondered whether Caromble! would ever see the light. But after more than 6 years of development, coming Friday on the 28 of August (yes… 2015 you clowns), Caromble! will be available on Steam Early Access.
As Friday is our one-day-a-week-indie-game-development-day, it only makes sense to do the Early Access release on a Friday. Otherwise, who would take us seriously right? Get in the mood already by checking out our new fresh trailer:

Also, if you are considering to participate in Caromble!’s Early Access, make sure you check out our Early Access Explanation Video, to find out whether Early Access is something for you:

We are thrilled to finally release Caromble! and we hope you are too!

Caromble! happy dance

We have something exciting to share with you! We cannot share it explicitly yet, but let these Caromble! dances by Pascal show you our excitement:



Prepare to be updated very soon!