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
ExportedAssets
and 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
UObject
that 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.