Open Hexagon 1.4 released!

Formatted readme:

This update focuses mainly on bug fixes and LUA improvements.
Debug log now only displays in debug mode.
LUA files should not crash the game anymore.
LUA can now get keyboard input and execute functions every frame.
Removed the pseudo-3D effects.
Difficulty multiplier calculations are slightly changed – it may be more effective now.

Download at:
Official page:

(thanks to Benjojo for hosting!)

Have fun!

-Changed: LUA file execution errors do not crash the game anymore – they display an error in the console and kill the player
-Changed: LUA runtime execution errors do not crash the game anymore – they display an error in the console and try continuing the game
-Removed: scripted events from default levels (the flow isn’t interrupted anymore)
-Removed: experimental pseudo-3D effects
-Fixed: index calculation bug in default pattern LUA files (thanks Sean Pek!)
-Fixed: level rotation always in the same direction
-Fixed: getPerfectDelay() not returning the correct values
-Added: LUA REQUIRED level function onUpdate(mFrameTime), which is called every frame
-Added: LUA isKeyPressed(mKey) command, as requested – it returns true if mKey is pressed
-Changed: logging is only enabled in debug mode, which can be set in config.json or by using the debug.bat file, which loads the debug config override

Sorry if there are any last-minute bugs. Please report them and I’ll fix as soon as possible!

I’d like to thank everyone for the feedback.

Version 1.2 is now available!

Read the README here:

This major update completely changes the level creation system – you can now use LUA scripting to create your own patterns, or create JSON events to make every level unique and to interact with the player.

Change any parameter during gameplay, surprise the player with traps or original level segments, turn your crazy pattern ideas into reality. The possibilities, thanks to the two scripting engines, are endless.

Player profiles were also added in the game – save your scores on your profile, and let other users create their own! And more importantly, prevent score data loss after updating the game.

And for those who prefer enjoying the game as it is – all the original levels have been updated with new patterns and scripting! There is also a new default level, with a completely new song.

You can download Open Hexagon v1.2 on the official page:

(The official page is also a nice place to send feedback, and share your own creations!)

Hello everybody.

I’m very sad about how the situation evolved with Open Hexagon, and I would like to apologize to everyone for the controversy that I’ve caused.

I’m using this blog post as opportunity to explain my intentions and my mistakes.

I’ve started playing Super Hexagon right after it was released, and fell in love with it.
As a independent game developer, I wanted to create my own tribute version of the game, not only as an experiment, but also as a completely new experience: I wanted to make the game fully open, both as a free open-source product, and also as a customizable and scriptable game, in order to let people share their creations and have fun.

I’ve undoubtedly screwed up, though.

On October 28, I asked Terry if I could make a clone of Super Hexagon:

Hey Terry, I really like your games, especially Super Hexagon.

I am developing a clone in C++.
Would it upset you if I released my clone as an open source game?

Thanks for your time

He replied:


I’m totally happy with anyone making a Hexagon inspired game, but
please don’t “clone” it exactly!

– Terry

In order to make Open Hexagon different from Super Hexagon, I designed it around customization, I got permission to use BOSSFIGHT’s totally amazing music, and I developed it as a FOSS (Free open-source software).

It is, however, still a clone.
I obviously had to be more clear in my exchange with Terry, and this is the first thing I apologize for.

But the worst decision I’ve made is without any doubt releasing Open Hexagon before Terry had a chance to release his PC port, I acknowledge that completely.

I apologize immensely for this mistake and I can assure you I learned something.
If I could have done things differently, I would have waited for the PC release of Super Hexagon.

But, in all honesty, my intentions are not to harm Super Hexagon in any way.
I don’t want to be a competitor: my game is a tribute and a learning opportunity for everyone.


After release, I asked Terry if he was ok with it, and told him that I would have taken it down immediately if he wanted me to. This is what he replied:


I feel a bit weird about it, and I really, really don’t like that you
released it before I finished my own port of the game to PC. But it’s
ok – congrats on finishing your first game! I hope you go on to make
cool things :)

– Terry

He also tweeted about Open Hexagon:

@terrycavanagh: So hey, Super Hexagon got cloned on PC. I’m getting a lot of messages from people about it, so I figured I should say something –
@terrycavanagh: I’m a little upset that he released it before I had a chance to release Super Hexagon on PC myself – but I’m basically alright with it!
@terrycavanagh: I’ve just checked it out there, and it’s not bad at all – the harder octagon stage was pretty cool. I also like the death effect.
@terrycavanagh: I’m hoping Super Hexagon will be out on PC and Mac REALLY soon – I’m working flat out to make that happen!

I was reassured Terry was ok with it, even if I realized my mistake of not waiting until he released his PC port.


I’ve been accused of theft. I’ve been accused of being an horrible person.

My intentions have always been good, I’m being honest. I never wanted to compete with Terry, I just wanted to provide a fun experience to people and a source code to learn from to developers.

I never claimed the idea was mine and I did everything I could to credit Terry and to encourage people to check out and buy Super Hexagon.

In the official page, executable and documentation files of Open Hexagon, I ask people to look at Terry’s games and eventually buy them. People who enjoy Open Hexagon should purchase Terry’s original game because he invented the main concepts and without it Open Hexagon wouldn’t even exist.

The phrase “This is a clone of Super Hexagon by Terry Cavanagh” appears on the main menu of the game.

I’m not passing the idea as mine, the idea was taken from Terry and I’ve never said otherwise.

The game, however, is mine, because I programmed it from scratch and I’m proud of the results.

I’m not stealing Terry’s idea – otherwise I wouldn’t have tell everybody that Open Hexagon is a clone of Super Hexagon, provided links to Terry’s pages and kindly asked Open Hexagon players to purchase or at least check out the original.

I’m not a thief, and I will never accept this claim.

Super Hexagon is an amazing game on its own: music and levels are completely different from Open Hexagon, and it completely worth experiencing even after having played my game.

This reason alone deserves a purchase of Super Hexagon, but considering that Terry Cavanagh is an amazing person (and I thank him again of letting my project live, even if I made some horrible decisions), he really deserves the money for his fantastic products, and I encourage everyone to visit his webpage and try his games.

I’m doing a lot of work to differentiate Open Hexagon from Super Hexagon – I hope people can give my game a chance, as it is truly becoming a different experience from Super Hexagon.

Sorry for causing all this trouble and controversy, my intentions were not bad.I’ve learned a lot from this entire experience.

I apologize to everyone, and in particular to Terry.

What you see in the video is completely scripted with JSON commands.
They’re easy to learn, and very flexible and powerful!

These new scripting capabilities add a lot of opportunities for level creators.
Any parameter can be changed at any time, adding text, stopping time, or even telling a story during gameplay.

And, as always, this is completely optional :)

Official page:

Fixed: input being registered when the game was not in focus.
Added: config overrides. (JSON files that override certain config parameters)
Added: .bat files for WINDOWED and FULLSCREEN modes.
Changed: JSON name members for windowed/fullscreen config parameters.
Fixed: sudden side number changing bug. (now it waits until all the obstacles are removed)
Fixed: impossible pattern bug.
Added: another tutorial level.
Added: new style. (zen2)

Open Hexagon is my first completed game.
It’s a fast paced fun clone of Super Hexagon (by Terry Canavagh).

The goal of the game is to survive as long as possible, by avoiding the walls closing in towards the center.
You are the little triangle, and can rotate by using the left/right arrow keys.

The soundtrack is made by BOSSFIGHT.

The game is completely customizable: you can create and share levels/patterns/styles/music.
Everything can be modified and created with your favorite text editor, thanks to the simple JSON language.

My first C++ project, a open-source clone of the iOS game Super Hexagon (by Terry Canavagh, maker of VVVVVV), is going well.

I’ve sent him an email asking if he’s ok with it, no reply yet.

Here’s a video with commentary, and some basic gameplay. Collisions work, basic graphical effects work. The core gameplay is here. I need to figure out how to make interesting randomly-generated levels and then I can release it.


Get it here:

Outdated video:

This is especially useful when dealing with numeric types.
It can be easily used to generate vector classes for every numeric type, and also utility classes that can allow you to add/subtract the generated.
The possibilities are endless – the generated code is easy to update and recompile, and since it’s like you’ve written it, there is no performance loss.

After being fed up with some limitations of generics (why isn’t there an IArithmetic interface?), I decided to make a code generator that creates C# code by simply reading templates made in C#.

It’s hard to explain with words, but I have made a video with voice commentary that will explain how it works and show a simple result.

With this code…

var types = new []{"int", "float", "double", "long"};

foreach(var type in types)
    $$("public class Vector2_" + type)
        $$("public Vector2_" + type + "(" + type + " mX, " + type + " mY)")
            $$ X = mX;
            $$ Y = mY;

        $$("public " + type + " X { get; set; }")
        $$("public " + type + " Y { get; set; }")

        $$("public " + type + " ComponentSum()")
            $$ return X + Y;

…my program automatically generates and automatically adds to a .csproj four new classes: Vector2_int, Vector2_float, Vector2_double and Vector2_long.

Watch the video for a better explanation! Thank you :)