Skip to content

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Final Fantasy XVI Save Tool

This repository is used to unpack and un-encrypt Final Fantasy XVI Save Games Files.
Save Game Files for PC/Steam are stored in a valid PNG image.
Save Game Files for PS5 do are not stored in a PNG image.

Usage

Unpacking Saves

When unpacking saves, you can point to a single file or a directory.
If pointing to a directory, each PNG file is recursively found and the script attempts to unpack it.
If pointing to a file, the script attempts to unpack it.

Unpacked files are exported to the decrypted folder with a subfolder named after the stem of the filename.
(The stem is ostensibly the filename with an extension).

python unpack_save_files.py samples/final_fantasy_mode_auto_saves/encrypted/auto.png
Extracted: decrypted/auto/game-save-data07
Extracted: decrypted/auto/game-save-data06
Extracted: decrypted/auto/game-save-data05
Extracted: decrypted/auto/game-save-data04
Extracted: decrypted/auto/game-save-data03
Extracted: decrypted/auto/game-save-data02
Extracted: decrypted/auto/game-save-data01
Extracted: decrypted/auto/game-save-data00
Extracted: decrypted/auto/game-save-data09
Extracted: decrypted/auto/game-save-data08
python unpack_save_files.py 0050.png
Extracted: decrypted/0050/game-save-data
python unpack_save_files.py samples/action_focused_progression
Extracted: decrypted/0006/game-save-data
Extracted: decrypted/0012/game-save-data
Extracted: decrypted/0013/game-save-data
Extracted: decrypted/0007/game-save-data
Extracted: decrypted/0011/game-save-data
Extracted: decrypted/0005/game-save-data
Extracted: decrypted/0039/game-save-data
Extracted: decrypted/0038/game-save-data
Extracted: decrypted/0004/game-save-data
Extracted: decrypted/0010/game-save-data
Extracted: decrypted/0028/game-save-data
Extracted: decrypted/0014/game-save-data
Extracted: decrypted/0001/game-save-data
! Output omitted for brevity

Packing Saves

When packing saves, your Save Game File must be named game-save-data.
This repo uses a known-good value PNG file as a shell, rather than building a PNG from the ground up.
It's save game data is replaced with the encrypted, compressed contents of your game-save-data file.

While technically feasible, this repository did not implement packing an auto.png file which would hold multiple auto saves.
One unencrypted save file is packed into one PNG image.

Packed files are saved to the encrypted folder with a subfolder named after the stem of the filename.
(The stem is ostensibly the filename with an extension).

python pack_save_files.py decrypted/0015/game-save-data 0015.png
Packing:          game-save-data
Injecting into:   baseline.png
Save Written to:  encrypted/0015/0015.png

Cross-compatibility

PC Save Files and PS5 Save Files are cross-compatible with each other.
Simply extract the game-save-data file from the PC PNG Save File and you have a valid PS5 Save.
The Reverse is also True: pack a game-save-data file from PC/PS5, and you have a valid PC/Steam Save.

Credit and Kudos

While this repository is an independent, unaffiliated project, credit for reverse engineering the Save Game Encryption, compression, and logic goes to Nenkai.
This repository is direct Python port of the C# FaithSaveFile.cs and CompressDict.cs files.
Because it is Python, it is cross-compatible across operating systems and not limited to Windows.

Thank you to the all the contributors of the FF16Tools Repository.

Credit for the PC Save Files goes to Maybri and cumnacho.

Python Versions and Requirements

No third-party modules are used in this repository, so no requirements.txt is included.
This project uses f-strings, which requires a minimum version of Python 3.6.
Project was tested on Python 3.11.3 and 3.14.4.

About

Unpacks and decrypts FFXVI Save Game PNG Files. Repacks unencrypted FFXVI Save Game Files to PNG.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages