Game Save Editing
Edit single-player game saves to change stored values (money, XP, resources, unlocks). This is for the user's OWN offline single-player saves — not multiplayer, not anti-cheat bypass.
Core workflow
Locate the save. It is rarely in the game install folder. Check (in order):
%USERPROFILE%\AppData\LocalLow\<DevName>\<GameName>\— Unity games default here%USERPROFILE%\AppData\Local\<DevName>\<GameName>\%USERPROFILE%\AppData\Roaming\<DevName>\<GameName>\- Windows Registry:
HKCU\Software\<DevName>\<GameName>— some Unity games store saves as registry values (e.g. Revolution Idle usesREG_BINARYvalues likegame_data_h1843190820). Check withreg query "HKCU\Software\<DevName>" /s. If values are encrypted/encoded binary blobs, direct editing is usually infeasible — fall through to code patching. %USERPROFILE%\Documents\andDocuments\My Games\- Steam userdata:
<Steam>\userdata\<steamid>\<appid>\ - The game install dir itself — some Unity games store saves under
<Game>_Data/UserData/<steamid>/save.json(e.g. Wireworks). Check here if AppData paths are empty. - Use
find "$USERPROFILE/AppData/LocalLow" -maxdepth 2 -iname "*<keyword>*"to discover the dev/game folder name.
Back up before touching anything.
cp SAVE.X SAVE.X.bak. Always. Tell the user you did.Identify the format. Common cases:
- Plain JSON / XML — edit directly.
- Gzip (
.GZ, or magic bytes1f 8b) —gunzip -c SAVE.GZ > work.txt, edit,gzip -c work.txt > SAVE.GZ. - Binary / proprietary — needs a hex editor or a community save-editor; often not worth it.
Find the field by keyword. Don't guess the field name — grep for likely keys:
money|cash|currency|coin|gold|credit|balance|fund|wallet|xp|experience|level|resourceThen read the surrounding context to confirm it's the right one (and note sibling fields likestartOfDayMoneythat must change in lockstep or the value reverts).Edit + recompress + clean up the temp decompressed file.
Verify by re-grepping the recompressed file (decompress → grep → confirm new value).
Pitfalls
- Sibling/mirror fields. Many games store a value AND a checkpoint copy (e.g.
money+startOfDayMoney). Edit only one and the game reconciles back to the other on load. Change all copies to the same value. - Escaped JSON. Unity saves often nest JSON-as-string, so quotes are escaped (
\"money\":2070). Yoursedpattern must include the backslashes:sed -i 's/\\"money\\":2070/\\"money\\":10000000/g'. - Checksums/hashes. Some saves embed a CRC or hash; editing breaks the load. If a save won't load after editing, a checksum is likely the cause — search for a community tool.
- Game must be closed while you edit, or it overwrites your change on next autosave/exit.
Hard limit — what save editing CANNOT do
Save files only store state, not mechanics. Values that live in the game's compiled code are NOT editable via the save:
- Drop rates / ore yield / "how much I get per action"
- Mining/crafting/build speed multipliers
- Damage, movement speed, physics constants
For Unity IL2CPP games (look for GameAssembly.dll + UnityPlayer.dll in the install dir), these mechanics are baked into GameAssembly.dll. Changing them requires memory editing (Cheat Engine) or DLL modding (BepInEx/MelonLoader) — a different technique, not save editing. See references/unity-il2cpp.md.
For Unity Mono games (look for <Game>_Data/Managed/Assembly-CSharp.dll, NO GameAssembly.dll), mechanics are in standard .NET assemblies and can be patched at runtime with BepInEx 5 + Harmony — much easier than IL2CPP. Full workflow (dnfile inspection → BepInEx install → Harmony plugin → csc.exe compile) in references/unity-mono-bepinex.md.
Tell the user this boundary honestly instead of pretending the save can do it. But then immediately offer to do the modding path — for Mono games it's very achievable.
Honesty rule
When the user asks for something the save can't hold (a gameplay multiplier), say so plainly and offer the real alternatives (in-game upgrades, Cheat Engine, mods). Never fabricate a "done" for a change you didn't actually make.