Skip to content

Quick Search

Search DEVKEY BLOG

Go back
Devkey

How to unlock Limbo in Shape of Dreams by editing your save

  1. Shape of Dreams’ Limbo can be unlocked by editing the save JSON under LocalLow so that only the unlock condition is satisfied.

    The target is not the game’s config file. It is this profile save file:

    C:\Users\<username>\AppData\LocalLow\Lizard Smoothie\Shape of Dreams\QuickSave\r_profile*.json
  2. From the game code I checked, the Limbo unlock condition was having at least four Evil Lucid Dream entries unlocked.

    Before editing, check which Evil Lucid Dreams are already unlocked and add only the missing ones. In this example, I add MadLife and Overpopulation to reach four.

    The Evil Lucid Dream and achievement pairs are:

    • FishScales: ACH_BARE_SKIN_SUPREMACY
    • GrievousWounds: ACH_VIVID_DREAM
    • MadLife: ACH_MASTER_OF_EVASION
    • MarshOfDestiny: ACH_EMPRESS_OF_PAIN
    • Overpopulation: ACH_M_M_M_MONSTER_KILL
    • PrudentJellyfish: ACH_WRIST_FRIENDLY_BUILD
  3. The basic flow is:

    1. Close the game
    2. Back up r_profile...json
    3. Mark the ACH_* entries for the Evil Lucid Dreams you want to add as completed
    4. Set the target LucidDream_* entries to status: 2 / isAvailableInGame: true
    5. Check that the JSON is still valid
  4. If you only change the LucidDream side, the profile validation on startup may revert it. The point is to also mark the corresponding in-game achievement as completed.

  5. This example adds MadLife and Overpopulation. After taking a backup, it uses PowerShell + jq to write to a temporary file, validate it, and then replace the save file. If you do not have jq, manually editing the same values is fine too.

    $quickSave = "$env:USERPROFILE\AppData\LocalLow\Lizard Smoothie\Shape of Dreams\QuickSave"
    $save = Get-ChildItem -LiteralPath $quickSave -Filter "r_profile*.json" |
      Sort-Object LastWriteTime -Descending |
      Select-Object -First 1 -ExpandProperty FullName
    if (-not $save) { throw "r_profile*.json was not found" }
    
    $backup = "$save.bak_$(Get-Date -Format yyyyMMdd_HHmmss)"
    Copy-Item -LiteralPath $save -Destination $backup
    
    $ts = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
    $tmp = "$save.tmp"
    
    $filter = @'
    .root.achievements.ACH_MASTER_OF_EVASION |= (.isNew=true | .isCompleted=true | .currentProgress=.maxProgress | .completeTimestamp=$ts | .persistentVariables=null)
    | .root.achievements.ACH_M_M_M_MONSTER_KILL |= (.isNew=true | .isCompleted=true | .currentProgress=.maxProgress | .completeTimestamp=$ts | .persistentVariables=null)
    | .root.lucidDreams.LucidDream_MadLife |= (.status=2 | .didReadMemory=false | .isNewHeroOrHeroSkill=false | .isAvailableInGame=true)
    | .root.lucidDreams.LucidDream_Overpopulation |= (.status=2 | .didReadMemory=false | .isNewHeroOrHeroSkill=false | .isAvailableInGame=true)
    '@
    
    jq --argjson ts $ts $filter $save > $tmp
    jq empty $tmp
    Move-Item -LiteralPath $tmp -Destination $save -Force
  6. After launching the game with this edit, Limbo was unlocked, and the Steam achievement was unlocked automatically too. If you do not want to touch Steam achievements, it is probably better not to use this method.


Text-first cards so you can decide what to read next.


Previous Short
How to unlock Limbo 6 in Shape of Dreams by editing save files
Next Short
M.2 SSD disappearing during games stopped after a firmware update