Eternum renpy save editing
Skill HexBen123/skills/skills/eternum/eternum-renpy-save-editing
Use when editing, verifying, or re-signing Eternum or other Ren'Py .save archives, especially when values live in log instead of json, the game says the save was created on another device, or modified saves do not load because the wrong file path or signature logic was used.From its SKILL.md
npx -y skills add HexBen123/skills --skill eternum-renpy-save-editingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.4 KB, 974 tokens by cl100k_base, as published. Nobody here has run it
Eternum Ren'Py Save Editing
Overview
Use this skill to inspect, modify, and re-sign Ren'Py .save archives for Eternum.
Prioritize the real save file, patch values in log, and re-sign with Ren'Py's default signature flow before assuming the game or the archive is broken.
Quick Triage
Follow this order before making changes:
- Confirm the target file is the game's real save under
game\saves, not a copied backup elsewhere. - Close the game completely so it cannot overwrite the edited archive.
- Confirm the requested value is likely stored in
log, not injson. - Confirm
ecdsais available and the signing key file exists atAppData\Roaming\RenPy\tokens\security_keys.txt. - Make a backup before writing anything.
Workflow
1. Confirm The Real Save Path
For the validated local Eternum setup in this workspace, use the live game\saves directory documented in references/renpy-save-reference.md.
If the user points at a copied .save in another directory, treat it as a working copy only. Do not claim success unless that file is copied back or the actual live save target is modified.
2. Inspect The Archive Structure
Treat the .save file as a ZIP archive.
Expect these entries:
log: authoritative game state, stored as pickle opcodessignatures: signature metadata the game checks on loadjson: lightweight metadata, not the primary place for money, player name, or similar gameplay state
If a request is about values like player name or money, start by inspecting log.
3. Patch log, Not json
When editing values:
- Look up the key inside the pickle opcode stream in
log - Skip
*INPUTopcodes after the key until the actual value opcode - Patch string values by rewriting the relevant unicode opcode payload
- Patch integer values by rewriting the integer opcode payload
- Rebuild the opcode list after each mutation before applying the next one
Common validated fields from this guide:
store.mcstore.moneystore.nicknamestore.lastname
Use the bundled script for normal edits:
python .\scripts\patch_and_resign_save.py `
--save '<live-save-path>\24-3-LT1.save' `
--backup `
--set-string store.mc=Miaaa `
--set-int store.money=10000
4. Re-Sign With Ren'Py Default Logic
Use Ren'Py's default signing flow after any log change:
sig = sk.sign(log_data)
ok = vk.verify(sig, log_data)
Do not switch to a custom digest-based signing variant just because it looks more explicit. In this validated setup, that causes the classic "save was created on another device" failure.
Write signatures back in this format:
signature <public-key-base64> <signature-base64>
5. Verify Before Declaring Success
At minimum, verify all of these:
- The edited file is the one the game actually loads
- The requested keys now resolve to the expected values in
log - The signature verifies against the modified
log - The game was not still running during the write
Use the bundled script in inspection mode when you need a quick readback:
python .\scripts\patch_and_resign_save.py `
--save '<live-save-path>\24-3-LT1.save' `
--show store.mc `
--show store.money `
--verify-only
Failure Modes
If the game says the save was created on another device, check these first:
- The archive was modified but not re-signed
- The wrong signing algorithm was used
- The wrong file was edited
- The game was still running and rewrote the save
If the user says "I changed json and nothing happened", assume the real value is in log until proven otherwise.
If the user says "the script succeeded but the game still shows old values", verify the runtime path before touching the patching logic.
Bundled Resources
references/renpy-save-reference.md: detailed notes on paths, fields, archive structure, verified symptoms, and example validation outputsscripts/patch_and_resign_save.py: parameterized helper for backup, field inspection, patching, and re-signing
Load the reference file when you need the validated workspace-specific paths or the deeper troubleshooting checklist.
What ships with it: 2 files
11.3 KB alongside SKILL.md, 1 of them executable
references/
- renpy-save-reference.md3.1 KB
scripts/
- patch_and_resign_save.pyruns8.2 KB