A simple command line utility to extract player information from a Borderlands 2 save file, or to create a new save file from player information.
Note the following before trying to use it:
- It has no graphical interface and is not easy to use
- It does not provide any mechanisms for creating items or weapons
- It is a proof of concept and will corrupt your save files if used improperly
- It requires a working Python 2 interpreter (2.6 or later, not 3)
Modify save file data by changing one or more of "level", "skillpoints", "money", "eridium", "seraph", "tokens", "gunslots", "backpack", "bank", "unlocks", or "itemlevels":
python savefile.py -m eridium=99 old.sav new.sav
Set the levels of all your items and weapons (except those at level 1, which are left alone) to match your character's level:
python savefile.py -m itemlevels old.sav new.sav
Or to a specific level:
python savefile.py -m itemlevels=20 old.sav new.sav
Set the number of guns your character can have equipped to 2, 3, or 4:
python savefile.py -m gunslots=4 old.sav new.sav
Set the size of your character's backpack, and the corresponding number of purchased backpack SDUs:
python savefile.py -m backpack=27 old.sav new.sav
Set the size of your character's bank, and the corresponding number of purchased bank SDUs:
python savefile.py -m bank=16 old.sav new.sav
Unlock the Creature Slaughter Dome (Natural Selection Annex):
python savefile.py -m unlocks=slaughterdome old.sav new.sav
Unlock the True Vault Hunter mode:
python savefile.py -m unlocks=truevaulthunter old.sav new.sav
Unlock both at once:
python savefile.py -m unlocks=slaughterdome:truevaulthunter old.sav new.sav
Or many changes at once, separated by commas:
python savefile.py -m level=7,skillpoints=42,money=1234,eridium=12,seraph=120,itemlevels old.sav new.sav
Add --little-endian to write the save file in a format that should be readable by the PC version (the default is to write the data in big-endian format, for the console versions):
python savefile.py -m eridium=99 --little-endian old.sav new.sav
A PC save file is automatically detected and read, and the default is to write in the correct format for a console. If you don't want to make any changes except to the format:
python savefile.py -m "" pc.sav console.sav
As before, add --little-endian to the command to write the data in a format suitable for the PC. If you don't want to make any changes except to the format:
python savefile.py -m "" --little-endian console.sav pc.sav
All items stored and held in the character's bank or inventory can be exported to a text file as a list of codes, in a format compatible with Gibbed's save editor:
python savefile.py -e items.txt your-save-game.sav
A text file of codes generated as above, or assembled by hand, can be imported into a character like so:
python savefile.py -i items.txt old.sav new.sav
(Don't forget to add --little-endian if you're creating a save file for the PC version.)
By default all items will be inserted into the inventory, but this can be changed with a line containing "; Bank" to indicate that all following items should go into the bank, or one of either "; Weapons" or "; Items" to indicate that all following items should go into the inventory. For example, importing a file containing the following will put a Vault Hunter's Relic into the inventory and a Righteous Infinity pistol into the bank:
; Bank
BL2(h0Hd1Z+jY/s2Qy++Zu8Ba9qXoOmjwJ6NhrlsOmhNMX+oJo5CfQns)
; Items
BL2(B2vuv4tz1zSQCf2pqLJCS5XD/tKN4FXpjRJLnn1v85U=)
Extract the raw protocol buffer data from a save file:
python savefile.py -d your-save-game.sav player.p
Extract the data in JSON format (encoded purely to preserve all the raw information -- not very readable):
python savefile.py -d -j your-save-game.sav player.json
Extract the data in JSON format, applying further parsing to make the data as readable as possible:
python savefile.py -d -j -p your-save-game.sav player.json
It may help to copy and paste the contents of the .json file into a site like http://www.jsoneditoronline.org/ in order to view or modify the contents, to ensure that the necessary JSON formatting is preserved.
Note that if you modify any of the data you extract in this way there is a very high probability that you will corrupt your save file. Please make sure you have a backup first.
Create a new save file from protocol buffer data:
python savefile.py player.p your-new-save-game.sav
Create a new save file from the JSON data:
python savefile.py -j player.json your-new-save-game.sav
As before, to write a save file that can be read by the PC version add the --little-endian flag to one of the above, eg:
python savefile.py -j --little-endian player.json your-new-save-game.sav