This document attempts to document the structures of data that Geometry Dash uses to store information about the game. This is primarily intended for mod developers/hackers who want to read the executable's memory.
If you have any additional information about pointer locations or meanings, feel free to post it in the comments below.
The following data is from version 2.11, 32-bit Windows on Steam. This information will likely differ depending on the version, architecture, and platform.
This structure appears to be mirrored four bytes ahead at [[[GeometryDash.exe + 3222D0] + 164] + 228] + 600
, for the second player in two-player/split mode.
Offset | Type | Size | Description |
---|---|---|---|
0x00 |
unknown | 4 | Unknown |
0x04 |
float |
4 | Last ground Y - character height (0 if in air) |
0x08 |
bool |
1 | Did use jump ring/pad and haven't landed? |
0x09 |
unknown | 1 | Unknown |
0x0A |
24-bit | 3 | Primary RGB color |
0x0D |
24-bit | 3 | Secondary RGB color |
0x0E |
void |
2 | Padding |
0x10 |
bool |
1 | Unknown |
0x11 |
bool |
1 | Is button pressed? |
0x12 |
bool |
1 | Is button pressed in air? |
0x13 |
bool |
1 | Is button pressed? (copied from 0x11 ) |
0x14 |
bool |
1 | Is button pressed in air? (copied from 0x12 ) |
0x15 |
void |
3 | Padding |
0x18 |
int |
4 | ? (Never exceeds 0x4C0) |
0x1C |
int |
4 | ? (*0x20 less than 0x18) |
0x20 |
int |
4 | Difference between 0x18 and 0x1C |
0x24 |
bool |
1 | Is not jumping off the ground? |
0x25 |
void |
3 | Padding |
0x28 |
double |
8 | Vertical velocity |
0x30 |
short |
2 | Unknown |
0x32 |
void |
2 | Padding |
0x34 |
unknown | 4 | Unknown |
0x38 |
bool |
1 | Is ship? |
0x39 |
bool |
1 | Is UFO? (interesting that it's earlier than ball, even though ball is older) |
0x3A |
bool |
1 | Is ball? |
0x3B |
bool |
1 | Is wave? |
0x3C |
bool |
1 | Is robot? |
0x3D |
bool |
1 | Is spider? |
0x3E |
bool |
1 | Is upside-down? |
0x3F |
bool |
1 | Is dead? |
0x40 |
bool |
1 | Can jump? |
0x41 |
bool |
1 | Is using hold ring? |
0x42 |
void |
2 | Padding |
0x44 |
float |
4 | Character height multiplier |
0x48 |
float |
4 | Speed multiplier (0.7 = 1/2x, 0.9 = 1x, 1.1 = 2x, 1.3 = 3x, 1.6 = 4x) |
0x4C |
float |
4 | X position (copy) |
0x50 |
float |
4 | Y position (copy) |
0x54 |
float |
4 | Last portal X position |
0x58 |
float |
4 | Last portal Y position |
0x5C |
void* |
4 | Pointer to something? |
0x60 |
bool |
1 | Is on ground? |
0x61 |
bool |
1 | Is jumping and haven't reached apex? |
0x62 |
void |
3 | Padding |
0x64 |
float |
4 | Last ground X position (note: this includes jumps on rings) |
0x68 |
float |
4 | Last ground Y position |
0x6C |
void* |
4 | Pointer to something? |
0x70 |
void* |
4 | Pointer to something? |
0x74 |
bool |
1 | Has jumped since start? |
0x75 |
bool |
1 | Has used jump ring since start? |
0x76 |
unknown | 6 | Unknown (00 FF FF 00 FF FF ) |
0x7C |
float |
4 | X position |
0x80 |
float |
4 | Y position |
0x84 |
bool |
1 | Player 2? |
0x85 |
bool |
1 | Is split? |
0x86 |
void |
2 | Padding |
0x88 |
double |
8 | Play time in seconds |
0x90 |
unknown | 4 | Unknown |
0x94 |
float |
4 | Radius multiplier of music pulses (0.0-1.0) |
0x98 |
double |
8 | Some other vertical velocity - less than 0x28 |
0xA0 |
void |
4 | Padding? |
0xA4 |
float[200] |
800 | List of Y positions, probably for fade trail effect |
[[[[[GeometryDash.exe + 3222D0] + 164] + 3C0] + E8] + 8] + 12C
- Percentage string
I'll also leave the pointer address for the current timescale if anyone needs it:
Type: Float (Pointer)
Base: "GeometryDash.exe"+003222E8
Offsets: E8, 38, CC, 20