A small python script to extract things like the picture/music/journal code, or the dog tag code, etc, from your save file.
How to Use This
This was made on Python 3.8, but later versions probably work. YMMV.
- Save the code below to any file with a `py` extension.
- Run the script with the path to the save file as the first argument.
If you have Python installed and associated with `py` files, you can just drag/drop the file onto the py file itself. - Viola. Just read the output window.
Example output text:
Chapter 1 Front Line Trench (Abandon Post) Code: 3081 Chapter 3 Prison Camp Code: 6771 Chapter 6 Fort Vaux Lion Door Code: 7682 Chapter 6 Weapon Storage Locker 1 (Left) Code: 3765 Chapter 6 Weapon Storage Locker 3 (Right) Code Part 1 (Symbols): 1043 Chapter 6 Weapon Storage Locker 3 (Right) Code Part 2 (Last Journal Code): 2418
For the last code, the journal/picture code, 0 is the musical note. Move the dials numerically with that in mind.
Save File Location
%LOCALAPPDATA%\CONSCRIPT\Steam
The Script
import binascii import json import msvcrt import pathlib import sys import zlib # Save location: # %LOCALAPPDATA%\CONSCRIPT\Steam try: import pydevd DEBUGGING = True except ImportError: DEBUGGING = False if len(sys.argv) < 2: print("Error: Missing file argument.") exit() saveFile = pathlib.Path(sys.argv[1]) txtFile = pathlib.Path(sys.argv[1]).with_suffix(".txt") with open(saveFile, "rb") as file: saveBytes = file.read() contents = zlib.decompress(saveBytes) contents = contents.decode("utf-8").strip() contents = contents[:-1] # Strip null terminator. contents = binascii.unhexlify(contents) contents = contents[16:len(contents)] # Strip first 16 bytes. #print(contents) #with open(txtFile, "wb") as file: # file.write(contents) # print(f"\nContents written as: {txtFile}\n") class SaveData(object): def __init__(self, j): # `[1]` because the first array entry is `roomData` and we can ignore that. # Even on new games, `roomData` will always be present even if empty. self.__dict__ = json.loads(j)[1] data = SaveData(contents) print(f"Chapter 1 Front Line Trench (Abandon Post) Code: {int(data.introBattleCode)}") print(f"Chapter 3 Prison Camp Code: {int(data.campLockCode)}") print(f"Chapter 6 Fort Vaux Lion Door Code: {int(data.isolementCode)}") print(f"Chapter 6 Weapon Storage Locker 1 (Left) Code: {int(data.tagLockerCode)}") print(f"Chapter 6 Weapon Storage Locker 3 (Right) Code Part 1 (Symbols): {int(data.pierreCodeVal1)}{int(data.pierreCodeVal2)}{int(data.pierreCodeVal3)}{int(data.pierreCodeVal4)}") print(f"Chapter 6 Weapon Storage Locker 3 (Right) Code Part 2 (Last Journal Code): {int(data.pierreBoxCode)}") if not DEBUGGING: print("Press any key to continue.") msvcrt.getch()