/borderlands2

Read and write Borderlands 2 save files

Primary LanguagePython

Read and write Borderlands 2 save files

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)

How do I modify values in a save file?

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

How do I convert a PC save to work on a console?

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

How do I convert a console save to work on a PC?

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

How do I take a copy of all my character's items?

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

How do I import those items back into a character?

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=)

How do I just extract the player data?

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.

How do I write the player data back to a new save file?

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