Skip to content

Client Level Resource

Level

A level is a playable object in Geometry Dash, namely coming with data that explains on what it is, and the string that the client interprets, known as a level string. It is stored in XML format, and each level entry is a dictionary, containing key/value pairs denoting the level's properties.

Level Data

Level Structure

KeyName/ValueTypeDescription
k1Level IDintegerthe id of the level
k2Level Namestringthe name of the level
k3Descriptionstringthe level description, encoded in base64
k4Start Level ObjectStart Object Stringthe inner level string, or the playable level
k5CreatoruserNamethe name of the level creator
k6UserIDintegerThe UserID of the level Creator
k7level difficultyintegerthe difficulty the level has
k8Official Song IDAudio Trackthe official Song ID (if used)
k9RatingintegerThe rating a level has
k10RatingSumintegerthe sum of all the ratings a level has
k11Downloadsintegerthe amount of times the level's been downloaded
k12setCompletesintegerlevel completions for that particular level
k13isEditableBoolused to stop people editing online and Official levels
k14Verifiedboolwhether the level is verified or not
k15Uploadedboolwhether the level is uploaded to the server or not
k16Level Versionintegerthe version of the level
k17Game VersionintegerThe Games Version
k18Attemptsintegerthe number of attempts that are made to this level
k19Normal Mode Percentageintegerthe max percentage that has been achieved in normal mode in this level
k20Practice Mode Percentageintegerthe max percentage that has been achieved in practice mode in this level
k21levelTypeIntegerThe Level Type (1 = Official, 2 = Local, 3 = Saved, 4 = Online)
k22Like Ratingintegerthe level's like rating (likes - dislikes)
k23LengthLengththe level's length
k24Dislikesintegerhow many dislikes a level has (unused)
k25isDemonBoolif the level is demon or not
k26Starsintegerthe stars the level is worth
k27FeatureScoreintegerA featured levels Feature Score
k33AutoBoolIf the level is auto
k34Replay DataGziped StringContains a Gzipped String which contains replay data for levels
k35isPlayable?Boolif the level is downloaded (honestly not much is known about this)
k36Jumpsintegertotal Jumps on a level
k37required coinsIntegercoins required to unlock an official level
k38isUnlockedBoolis Official level Unlocked
k39level Sizeintegerthis->levelSize = std::floor(this->levelString.length() * 0.152);
k40Build Versionintegerthe games build version
k41Passwordintegerthe password set for the level
k42OriginalintegerThe ID the of the original level (if the level was copied)
k43Two-Player ModeBoolIf the level is 2 player mode
k45Custom Song IDintegerthe custom Song ID (if used)
k46Level Revisionintegerthe revision of the level
k47hasBeenModifiedBoolif the level has been modified from outside the GD editor
k48Object Countintegerthe object count of the level
k50Binary Versionintegerhardcoded to binary Version
k51capacity001integerBatchNodes
k52capacity002integerBatchNodes
k53capacity003integerBatchNodes
k54capacity004integerBatchNodes
k60AccountIDintegerthe Creators AccountID
k61First Coin Acquiredboolwhether the first coin is acquired during verification
k62Second Coin Acquiredboolwhether the second coin is acquired during verification
k63Third Coin Acquiredboolwhether the third coin is acquired during verification
k64Total CoinsIntegerHow many Coins the level has
k65areCoinsVerifiedBooldenotes if the coins are verified or not
k66Requested Starsintegerthe requested stars during publication of the level
k67Capacity StringStringContains batch information about levels
k68triggeredAntiCheatBoolif you trigger the anticheat when beating demons
k69High Object CountBoolIf a level has a high object count
k71Mana Orb Percentageintegerthe percentage up until the orb reward has been granted
k72hasLowDetailModeBoolIf a level has LDM
k73toggleLDMBoolIf a LDM is Enabled
k74timelyIDintegerthe timelyID for a level
k75epicRatingintegerThe level's epic rating. 0 for None, 1 for Epic, 2 for Legendary, 3 for Mythic
k76demon typeintegerDemon Type Enum
k77isGauntletBoolis the level in a gauntlet
k78isAltGameBoolLevels that were completed on the free games
k79Unlistedboolwhether the level is to be marked as unlisted or not during publication
k80Seconds Spent Editingintegerthe number of seconds spent editing the level
k81Seconds spent Editing (copies)integerthe number of seconds spent editing the level (Previous copies)
k82isLevelFavouritedBoolif you put the level in your favourites
k83levelOrderintegerordering for levels
k84Level Folderintegerthe folder in which the level belongs (0 represents no folder)
k85ClicksintegerClicks done on the best attempt
k86Player Timeintegerthe amount of time on a players best attempt
k87level SeedLevelScoreSeedContains info to verify the integrity of levelScores
k88Level ProgressStringContains a list of high score differences seperated by a ,
k89vfDChkBoolused to check for level completion
k90Leaderboard percentageintegerContains the percentage for level Leaderboards
k95Verification TimeintegerVerification time in physics steps (240 steps per second)
k104Song liststringList of song IDs separated by ,
k105SFX liststringList of SFX IDs separated by ,
k107Best TimeintegerYour best time on the level in milliseconds
k108Best PointsintegerYour point highscore on the level
k109Local Best TimesintegerList of your best times on the level in milliseconds, separated by ,
k110Local Best PointsintegerList of your point highscores on the level, separated by ,
k111Platformer SeedintegerChecksum for platformer completions, see below for code
k112No ShakeboolWhether the player has disabled shake for this level

The classic level seed is generated like this (please note you need to add another 1482 when submitting the level score):

py
def generate_classic_leaderboard_seed(
    jumps: int, percentage: int, seconds: int, has_played: bool = True
) -> int:

    return (
        1482 * has_played
        + (jumps + 3991) * (percentage + 8354)
        + ((seconds + 4085) ** 2) - 50028039
    )

The platformer seed is generated like this:

py
def generatePlatformerHash(bestTime, bestPoints):
  number = (((bestTime + 7890) % 34567) * 601 + ((abs(bestPoints) + 3456) % 78901) * 967 + 94819) % 94433
  return ((number ^ number >> 16) * 829) % 77849

Last Editor State Key/Value Pairs The last editor state key/value pairs contain a few values that indicate the last state of the editor before exiting the editor on that level.

KeyName/ValueTypeDescription
kI1Editor Camera X Positionfloatthe X position of the editor camera
kI2Editor Camera Y Positionfloatthe Y position of the editor camera
kI3Editor Camera Zoomfloatthe zoom level of the editor camera
kI4Build Tab Pageintegerthe displayed page within the build tab
kI5Build Tabintegerthe selected build tab
kI6Build Tab Pagesdictionarythe last browsed pages of each build tab
kI7Editor Layerfloatthe last selected index of a layer

Note that the build tab pages do not depend on the user's button row/column settings. That means, if the settings are changed, the build tab pages will not reflect the correct changes. For example:

The build tab page is 5, and the button settings are 6x2 (default), meaning the currently shown elements range from 5 * 6 * 2 = 60 to 6 * 6 * 2 - 1 = 71 (zero-indexed). If the user changes the button settings to 12x3, the tab page will remain as 5, showing elements ranging from 5 * 12 * 3 = 180 to 6 * 12 * 3 - 1 = 215 (zero-indexed).

GDL22

Current Unknown Values

KeyTypeInfo
k91string
k92integer
k93Boolunlimited Objects?
k94BoolPlatformer?
k101stringseems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0. Seems to also correlate with k47
k106integercorresponds to key 54 on the servers