Skip to content

A parser for Borderlands 3 uasset, uexp and pak files, forked from SirWaddles's JohnWickParse

License

Notifications You must be signed in to change notification settings

apocalyptech/JohnWickParse

 
 

Repository files navigation

Fortnite Borderlands 3 Asset Parser

This program is able to parse pak, uexp and uasset files, and offers way to manage them.

This is a fork of SirWaddles's JohnWickParse project, which is intended primarily as a Fortnite tool. At some point in late-ish 2020, Fortnite updated the way they pack their data files, and the original JWP code was updated to only work with that newer packing method. Borderlands 3 still uses the original way, and this fork offers various improvements useful to BL3 modders. You can still use official JWP releases up through 5.0.2 (which was released on July 23, 2020), but releases after that point will probably not work with BL3.

As with the original JWP, which was intended only as a Fortnite tool, this fork will almost certainly work just fine on other UE4 games, so feel free to give it a try if your UE4 game hasn't moved to the newer packing method yet.

It offers four commands that can read these files

  • serialize <asset_path> will turn a uexp/uasset pair into a .json file, reading the UObject properties. <asset_path> has no extension.
  • filelist <pak_path> will create a text file, listing all of the files contained in a .pak file.
  • extract <pak_path> <pattern> will extract all of the files where <pattern> is in the internal path name, into the corresponding directory in the current working folder.
  • texture <asset_path> will convert a DXT5 asset file into a png image file.

Any operations on a pak file require that the key.txt file contains the encryption key for the pak file, as a hexadecimal string and no leading newline.

Note however that there is limited support for all of the properties that can be serialized, and the parser may panic if it attempts to parse an unknown tag type.

Changelog

One of the things this fork adds to the vanilla JWP is reporting a "version" in the very first export of the serialized objects. This is primarily used by my own bl3data mod-writing helper library, to automatically serialize data behind-the-scenes when code asks for it. The library looks for existing serializations first, and if it finds a serialization with an up-to-date version number, it'll just use the previously-serialized data on disk instead of processing it again.

The version number that it looks for can get bumped for a variety of reasons. Sometimes some extra functionality will be added to JWP so that there's more data than before added to the serializations (so bl3data would want to get a fresh version), or sometimes it's due to a Gearbox patch which potentially overwrites objects introduced in earlier pakfiles. So sometimes this version number gets incremented even though there haven't been any code changes in JWP itself.

When you see numbers like 19.1 in here, the version number reported in the serialization is still just 19 -- those incremental updates just indicate other changes to JWP which don't actually affect the nature of the data that it's writing.

v27.2: 2023-01-26

  • Bypass StructProperty structures inside UScriptStructs (this allows BL3's IO_Hib_Door_Bookcase to be serialized)
  • Fixed serializations for objects whose FName lookups were failing. This is almost certainly due to data structures not being read in properly, but it should at least allow the majority of the asset to be serialized instead of bombing out. (this allows WL's IO_Switch_SimpleButton to be serialized)

v27.1: 2022-12-16

  • Fixed serializations for objects with FText history types other than -1 and 0. The text will just read "APOC UNKNOWN" in the serialization, but you'll at least get the rest of the object serialized, instead of just an error.

v27: 2022-09-29

  • Bumped version number for today's WL patch (general patch)

v26: 2022-08-11

  • Bumped version number for today's WL patch (DLC4 + Blight Caller)

v25: 2022-08-05

  • Added "dummy" handling of Plane exports.
  • Removed custom Texture2D handling, which was causing some map objects to not serialize.

v24: 2022-06-11

  • Bumped version number for June 1st's Playstation Crossplay patch (which included a few other data tweaks as well)

v23: 2021-11-18

  • Bumped version number for today's BL3 patch (Vault Card 3)

v22: 2021-10-04

  • Added "dummy" handling of FUserStateEnumValue values, which allows at least one more map object to be serialized (City_M_OvercomeHQBlockade).

v21: 2021-06-24

  • Bumped version number for today's BL3 patch
  • Fixed SoftObjectProperty handling inside MapProperty attrs

v20.2: 2021-04-16

  • Fixed serialization of various attributes, which allows JWP to serialize some extra BPChars (and presumably other objects):
    • ElementToFXGlowColorMap, which fixes BPChar_Heavy_Badass_GearUp
    • EyeColorData, which fixes BPChar_WolfBasic
    • BallProjectileColorByElement, which fixes BPChar_LoaderBadass
    • ElementalBeamClassMapping, which fixes BPChar_HyperionTurretBadass
    • ElementToDarkVariantEmissiveColor, which fixes BPChar_Heavy_BadassDarkRaid1
  • Fixed serialization of ByteProperty attributes inside UScriptMaps. This fixes serializations for BPChar_GerSaurianSaurtaur, though possibly it might cause problems for other stuff which previously serialized okay? The fix that I put in there seems extremely reasonable, though. We'll have to see.
  • With these fixes, all BPChar objects currently in the game should be serializable.

v20.1: 2021-04-16

  • Fixed serialization of ElementToPSColorMap attributes. This allows JWP to serialize BPChar_Oversphere_KatagawaSphere, and presumably other objects.

v20: 2021-04-08

  • DLC6 (Director's Cut)

v19.2: 2021-04-05

  • Process InterfaceProperty attrs inside UScriptMaps properly. This allows a few mission objects to be serialized which haven't been serializable since commit da1721f

v19.1: 2021-03-26

  • Output JSON in human-readable format (newlines, indentation, etc)

v19: 2021-02-28

  • Fixed rich curve key processing

v18: 2021-01-21

  • Just a patch from GBX

v17: 2020-11-10

  • An unannounced GBX update, bugfixes for DLC5 I suppose.

v16: 2020-11-09

  • DLC5 (Designer's Cut)

v15: 2020-09-10

  • DLC4

v14: 2020-09-04

  • Work around some MapProperty stuff present in some BPChars, though in a very boneheaded way which seems quite likely to produce technically-incorrect data. Hopefully not too bad, though!

v13: 2020-09-04

  • Pulled in fresh commits from upstream; can serialize BPChars now!

v12: 2020-07-23

  • Patch from GBX (including lots of drop changes)

v11: 2020-07-13

  • Pulled in more commits from upstream

v10: 2020-06-25

  • DLC3

v9: 2020-06-11

  • Guardian Takedown

v8: 2020-05-13

  • Pulled in some fresh commits from upstream

v7: 2020-04-23

  • Revenge of the Cartels and DLC2

v6: 2020-03-26

  • DLC2

v5:

  • Cleaning up DataTable exports a bit (my custom attrs were a bit too pushy)

v4: 2020-03-13

  • patch (Steam x-play)

v3:

  • Added _jwp_export_dst_name to export references

v2:

  • Added array indexes to FSoftObjectPath objects

v1:

  • Initial versioning, added export-following, expanded output, and array indexes

About

A parser for Borderlands 3 uasset, uexp and pak files, forked from SirWaddles's JohnWickParse

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 98.2%
  • JavaScript 1.7%
  • Shell 0.1%