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*.jsonFrom the game code I checked, the Limbo unlock condition was having at least four
Evil Lucid Dreamentries unlocked.Before editing, check which Evil Lucid Dreams are already unlocked and add only the missing ones. In this example, I add
MadLifeandOverpopulationto reach four.The Evil Lucid Dream and achievement pairs are:
FishScales:ACH_BARE_SKIN_SUPREMACYGrievousWounds:ACH_VIVID_DREAMMadLife:ACH_MASTER_OF_EVASIONMarshOfDestiny:ACH_EMPRESS_OF_PAINOverpopulation:ACH_M_M_M_MONSTER_KILLPrudentJellyfish:ACH_WRIST_FRIENDLY_BUILD
The basic flow is:
- Close the game
- Back up
r_profile...json - Mark the
ACH_*entries for the Evil Lucid Dreams you want to add as completed - Set the target
LucidDream_*entries tostatus: 2/isAvailableInGame: true - Check that the JSON is still valid
If you only change the
LucidDreamside, the profile validation on startup may revert it. The point is to also mark the corresponding in-game achievement as completed.This example adds
MadLifeandOverpopulation. After taking a backup, it uses PowerShell +jqto write to a temporary file, validate it, and then replace the save file. If you do not havejq, 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 -ForceAfter 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.
Related content
Text-first cards so you can decide what to read next.
A short note on editing Evil Lucid Dream data and per-character cleared depth in the Shape of Dreams save JSON to unlock Limbo up to depth 6.
- PostPublished:Updated:
[Deadlock] How to Play in Japanese [Japanese Localization Config File Download]
I had been creating a Japanese localization config file for Deadlock for my own use, but it has become a fairly decent config file, so I decided to publish it.
A category-by-category roundup of Hytale QoL mods that add only convenience features such as cross-chest search, maps, HUDs, and party displays without breaking the vanilla experience.
What I learned from creating a Japanese localization config for Deadlock and having it used by 50,000 players.
- PostPublished:Updated:
[CS:GO] Seriously the Strongest Aim Training Method
Seriously the strongest aim training method. It's way too fun.