A tool to export names, descriptions, and other data related to game items from Fortnite: Save The World.
git submodule update --init --recursive
cd BanjoBotAssets
dotnet run
This will produce assets.json and schematics.json. Enjoy!
By default, all supported asset types are extracted and saved, along with their images.
To restrict the exported asset types, use /Only:
dotnet run -- /only SchematicExporter,AssetRegistryExporter,CraftingRecipeExporter
To control whether images are exported, use /ImageExportOptions:
/ImageExportOptions:Type:LargePreview PathOnly /ImageExportOptions:Type:SmallPreview PathOnly /ImageExportOptions:Type:Icon PathOnly /ImageExportOptions:Type:LoadingScreen PathOnly /ImageExportOptions:Type:PackImage PathOnly
To limit multithreading, use /PerformanceOptions:
/PerformanceOptions:MaxParallelism 1
To try to merge the exported assets into existing JSON files instead of overwriting them, use /Merge.
See appsettings.json for more options.
In order to troubleshoot or modify BanjoBotAssets, it's helpful to understand the basic sequence of operations it performs:
- Locate the Fortnite game files.
- Get the AES keys and structure mappings for the current game version from a web service.
- Decrypt the game files, list all game assets, and let each exporter class pick out the asset paths it wants to load.
- Run all selected exporters (
IExporter) in parallel, collecting the intermediate results for each type in a separateIAssetOutput. - Combine intermediate results from all exporters into a single
ExportedAssetsand a list ofExportedRecipe. - Run all post-exporters (
IPostExporter) in parallel to modify the intermediate results in place. - Run all artifact generators (
IExportArtifact) to write the results to disk.
The AES keys and mappings are cached on disk between runs until the game files are updated.
Game assets are loaded with CUE4Parse, using a memory cache to reduce duplicate loads of referenced assets.
Create a new exporter class extending one of:
- UObjectExporter is used for most assets derived from
UObjectthat are exported as named items, i.e. dictionary values with unique keys derived from the assets' paths or template IDs. - GroupExporter is used for assets that have variations for different rarities and tiers, like heroes and schematics. Instead of processing each asset separately (e.g. all 25 variations of a weapon schematic), the assets are matched up into groups, and data from one representative asset in each group is reused for the others.
- BlueprintExporter is used for assets derived from
UBlueprintGeneratedClass. - BaseExporter is used for data tables and singleton assets that aren't exported as named items.