This analysis masterfully deconstructs the technical scaffolding of a modern classic, revealing the sophisticated architectural logic hidden beneath simple mechanics. It turns reverse engineering into a compelling narrative of how technical constraints shape iconic design.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
How Geometry Dash WorksAdded:
This is Geometry Dash, one of the most popular indie games right [music] now, and it's created by our favorite game developer, RobTop. Now, most famous games are created in game engines such as Godot, Unity, and Unreal. However, Geometry Dash isn't made in any of these. In fact, you've probably never heard of this game engine before, [music] and this mystery game engine is none other than Cocos2d-x. Now, ignoring the fact that it hasn't been updated in 6 years, [music] it's actually not half bad for a game engine. Cocos2d-x can be used in C++, JavaScript, and Lua. But, RobTop used C++ to make Geometry Dash, so that's what we're going to be talking about. [music] Now, before we get into how Geometry Dash was made, we need to go back in time to 2012, [music] a whole year before Geometry Dash released. This is Boomlings. It's RobTop's first game, and honestly isn't that bad. You can't download it now as it's been taken off of the App Store and Google Play Store, but there are still APKs of it floating around. Now, after looking at this for a little bit, isn't it strange that this UI looks almost the exact [music] same as Geometry Dash? No, this is not a coincidence as when we decompile Boomlings, almost the entire inner workings of the game are similar to the inner workings of Geometry Dash. Most of the sprites, sound effects, classes, code, etc. in Geometry Dash all come from Boomlings. Even most of the fonts are the same. Because of how Cocos is designed, it naturally takes a lot of code to make an UI. You need to create each individual element, set the properties, and add it to another element all through code. In fact, to make this relatively simple UI, it takes around 300 lines of code, not including the code that runs when you click one of these buttons or any of these other functions. Now, I do know that Cocos Creator exists, which is basically just a version of Cocos2d-x that gets updates and has an UI, but RobTop never used this, probably because, well, it came out after Boomlings release. Now, let's not get too carried away here as this is a video about [music] Geometry Dash after all. I'll be splitting this video into three parts. The internal structure of Geometry Dash, how Geometry Dash communicates with the servers, and how the file swap top made work. So, let's start with the internal structure of Geometry Dash. [music] It all starts in the loading screen, aka the class loading layer. Everything you see in Geometry Dash are classes.
RobTop's logo, CC Sprite, [music] this loading text, CC label BM fonts.
The game loads its assets [music] in 14 steps. Steps one, two, and three load GJ game sheet one, two, and three with step three also loading the editor UI. And all the rest of the steps load something, but I'm not going to explain every step [music] in this video. A little fun fact is that originally in 1.0, steps five to 14 did did I nothing.
They just waited a frame or two and that's it. Slowly but surely, however, the additional steps would be filled with newer assets to load [music] after each version. And now in 2.2, all steps load something. However, now that we have finished loading the game, it's time to get into menu layer. [music] Now, if you've ever launched Geometry Dash with no internet, you've probably seen this pop-up. The way Geometry Dash checks if you have internet isn't through using official libraries or anything like that, but instead through pinging [music] Google. There's also a function in the class game toolbox that checks if you have internet, but on PC it doesn't even do anything and [music] only returns true. Now, I would cover the classes that appear when you click these buttons, or the classes that show up when you click these buttons, [music] or this button, or that button, but I don't want to cover every class as that would take way too long. You might be curious though, how do I know everything about these classes and layers? Well, it's because of two tools, the developer tools mod and Ghidra. The developer tools mod allows you to see the current node structure, off that's names, their default characters properties, the memory addresses they are located at and much more. This is helpful if you want to know what that something is or how something may be set up. Geode however allows us to decompile Geometry Dash to [music] see its inner workings. And if you don't know what decompiling is, think of it this way. Decompiling and compiling is like a cake. You can bake the cake which is compiling it. However, you can't really unbake cake. However, what you can do is observe the cake, take note of what ingredients it might be using and construct a recipe that provides similar results to the cake.
This is called decompiling. When we decompile Geometry Dash, we don't get the original source code. [music] The source code has been converted to assembly when it got compiled which represents the original code but isn't the original code in its entirety.
[music] Now, I want you to look at this code for a quick second. You really don't have to look deeply to find out we are blindly adding numbers to the pointer of an integer in somehow getting a boolean. And the reason to this is that this is actually a class. This integer pointer is actually a pointer to a class but the EXE doesn't get compiled with class data. So, it just shows an integer. And this number that we are adding is a relative offset of a boolean field. Now, because you can barely tell what's going on, we are going to use Geode's bindings which gives names to fields, functions and classes. [music] You've probably heard the joke that RobTop's code for Geometry Dash is bad.
And as it turns out, this isn't a lie.
Take add manual achievements in the achievement manager class for example.
Can you guess how many lines of decompiled code this function has?
1,000? 2,000? Well, if you guessed around that range, you're actually pretty close cuz the answer is 46,000.
Now, that is decompiled code so the actual source code is a lot less but it's most likely still in the 10,000 range. Some important classes that I want to talk about are game manager, play layer, and editor UI. Starting off with game manager, this is the class that, well, manages the game. Almost the entire game is dependent on this one class, and it's basically the skeleton of GD. In fact, your save file that holds all of your stats is named after [music] this class. It also contains lots of useful functions and control things such as game variables, asset loading, and game saving. [music] There's also G manager, which is what I assume to be the old game manager RobTop was working on before migrating to game manager, and the evidence I have to back this up is the fact that it's also in all of his other games in 1.0, [music] and it looks very unfinished. It is sometimes used, though, mainly for saving to a file, and that's pretty much it. Game manager is also used in the next class we'll be talking [music] about, and that is play layer. This is the main class that is shown when actually playing the game, and is an extension of GJ base game layer, which is a class that controls the physics, user input, and a lot of other features that you see in game. Play layer creates all of the objects and is the base for the actual gameplay of Geometry Dash. It controls things such as checkpoints, [music] the end animation, enter and exit effects, pausing and unpausing, and more. And finally, it's time to discuss the editor UI [music] class. This is, well, the editor UI. The only very notable thing about this class is the fact that there are a lot of functions.
Even the editor UI class in 1.0 has a lot of functions, too. Now, I've been talking way too much about this, so I feel like it's time we talk about how Geometry Dash communicates with servers and vice versa.
>> [music] >> Our server communication in Geometry Dash is handled with this function under game level manager called process HTTP request. It does a check to see if the server is online before using the CC HTTP request class to actually make the request. But first, we need to learn [music] how a request works. When your computer wants to communicate with the servers and vice versa, it uses a request [music] to do so. There are multiple different types of requests, but in this case, we will cover the HTTP post request [music] as that's what Cocos uses. Now, a post request is generally used to send data, [music] but it can also receive data as well.
Geometry Dash and Cocos takes advantage of this by making every single request a post [music] request. So, we can send and receive data. Now, if you've ever been to boomlings.com or tried [music] to send a normal post request to any of the endpoints, you've probably been met with this page. RobTop uses Cloudflare [music] to protect the servers, and if you submit incorrect data, an example being missing a parameter, Cloudflare will block you. Now, while it does look like it, we're not banned from the servers. If we want to bypass Cloudflare and make a proper request, we need to send a request with an empty user agent.
This is why you can't send a request to some endpoints with your browser as browsers have a user agent. We also need to change [music] the content type to this so it actually goes through Cloudflare. Now, when we need to make a request, we almost always need a secret.
This is what keeps people out of accessing certain endpoints. However, unfortunately for RobTop, the secret is right in the code and is documented literally everywhere. Now, with this supposedly being a secret, it must be a complex math algorithm, [music] right?
It has to have something that will keep people out, right? Or is it just WM FD 2893 GB7? Yep, that's the secret. The secret varies a little bit with different categories. For example, if you want to send requests that only mods can make, then you have to use this secret in your request. Besides the secret, some endpoints, [music] especially ones that you need to be logged in for, require a GJP, which I assume to stand for Geometry Jump Password. Before 2.2, the GJP [music] was ciphered with XOR with the key 37526, then base 64 encoded. Now, even though this sounds really secure, this is actually on the same level as just storing the passwords in plain text. You can easily just base 64 decode the password, and [music] because of how XOR works, where if you XOR something twice, it stays the same, you can literally just XOR [music] the encrypted password again with the same key, and it just gives you the password. That's why in [music] 2.2, RobTop changed it to GJP2, where instead your password is hashed and salted. That way, if a data leak happens, all the passwords aren't [music] just right there in plain text.
Now, another parameter that a lot of endpoints require is the check [music] parameter, or CHK. To generate a check, you need to do the following steps.
First, you need to take an arbitrary amount of values, and then you have to combine them and add a salt [music] if there is one. Then you have to apply SHA-1 hashing to the combined values and get its hex digest, [music] then XOR cipher to the hex digest with desired key, and finally, you need to base 64 encode the result. This check generation [music] does vary between endpoints, an example being the upload level endpoint that uses C2 instead of check. Now, there is another thing that I have yet to talk about that doesn't affect [music] only Geometry Dash, rate limiting. You see, if you exceed the rate limit, you will instantly get IP banned for 15 minutes to an hour.
Fortunately though, the rate limit is pretty difficult [music] to break. Only if you're spam downloading a whole bunch of levels will you reach the rate limit.
Something funny is that when RobTop first added rate limiting 5 years ago, he actually forgot to set a timer to it, which means the rate limit mattered, and if you only downloaded just 10 levels, you would be banned for an hour. Now, I've talked about the servers for a while now, so I think it's good we switch to the next topic, file types.
The first file I will talk about is CCGameManager.dat. [music] This file holds all of your save data excluding your levels. [music] It's in the XML format and it's encrypted using XOR with a key of 11.
And then it's passed through base 64 and compressed through GZip. There are a lot of different key types in this [music] file and I'll list through all of them and what they could possibly stand for.
Keyword possibly. Everything is just an assumption. GLM. GLM stands for game level manager, which is the main class that handles levels. It holds all the levels you have saved minus the level data, which goes in another file we'll cover next. However, back when the game saved [music] everything in CCGameManager.dat, this section actually contained level data, too. GS. GS stands for either game save or game stats and it holds all of your game stats. GGA. GGA stands for Geometry Jump Account and it holds your username, account ID, and GJP, too. It also holds your plain text password and session ID. However, the plain text password was discontinued in 2.1 and the session ID is unused. [music] MDLM. MDLM stands for Music Download Manager, which is the main class that handles music downloading. This section just stores all the songs you have saved minus the actual song data. KBM. KBM stands for Key Bind Manager and well, it stores your key binds. Now that we are done with the key types, it's [music] time to move on to the Value Keeper, which is a giant dictionary that controls game values and unlockables. All the settings for the game is located in this dictionary and [music] they are called game variables. The key for them starts with GV_ followed by their ID. Value Keeper also holds all of the icons you have unlocked. The next file I want to cover is CCLocalLevels.dat, which literally just holds your levels.
I also think it holds the key lol m, but I haven't tested it to make sure. Before we move on, however, we need to cover an important topic, and that is how the game stores levels. [music] Each level is stored in XML format and contains data such as the ID, name, description, creator, etc. The actual data of the level, however, is stored in the level string. The level string is split into two sections. The level start object, which contains metadata about the level, and the object string, which contains all of the objects in the level. It's separated by semicolons. The section before the first semicolon is the start object, and all of the sections split between semicolons afterwards are objects. The level string is also encoded in base 64, so if you want to access it, you will have to decode it first. The level start object and all objects in the level are stored as key, {comma} value, {comma} and everything is technically just a massive dictionary. For the objects, it usually goes object ID, x position, y position, and then all of the other properties the object has. If the property is unchanged, however, it just isn't included. If the object is a particle object, it also stores the particle string, which controls all the settings you see when [music] editing the particle object. The string itself is separated by A's out of all characters and is pretty unoptimized, especially because it's index-based, so it goes through every single property, even if 90% of them are unchanged. Now, it's time for us to talk about level components, [music] which is basically just more metadata. Let's start with the guideline string. [music] This string holds all of the guidelines of a level, and all guidelines and their individual parts are separated by tildes. The color value can either be zero for orange, 0.9 for yellow, or 1.0 for green. For some reason, 0.8 will also give orange.
Anything above 0.8 that doesn't match yellow or green is orange. And any color distance 0.8 other than zero is transparent. And the final thing I want to cover is the color string. It's where all the colors with each color being separated by a pipe character and the data for each color being stored [music] as key underscore value underscore. It's pretty self-explanatory, so I won't provide much of an explanation, but here's all the properties if you're interested.
Well, that's how Geometry Dash works.
There's a lot that goes to this silly $5 cube game and maybe after watching this you understand why it takes so long for a new update to come out. Also, I want to mention that I'm trying to hit 10,000 subscribers by the end of this year. So, if you could subscribe, that would help me out a ton. I have many more great videos like this one planned. So, subscribing will make sure you don't miss out on the next time I upload in 10 years. [music] Thank you for watching and I'll see you in the next video.
>> [music]
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 views•2026-05-28
How agent o11y differs from traditional o11y — Phil Hetzel, Braintrust
aiDotEngineer
450 views•2026-05-28
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanation💯✅
LearnwithSahera
1K views•2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 views•2026-05-29
Search Algorithms Explained in 60 Seconds! 🤖💨
samarthtuliofficial
218 views•2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 views•2026-05-30
Introduction to Problem Solving Part - 1 | Lecture 1 | Intermediate DSA
ascensionix
107 views•2026-05-29
So What's Odin Lang Even Good For
TechOverTea
131 views•2026-06-01











