Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CadeEvs/FrostyToolsuite/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The AssetManager class provides comprehensive functionality for enumerating, loading, and modifying game assets including EBX, resources, and chunks.
using FrostySdk.Managers;
AssetManager am = new AssetManager(fileSystem, resourceManager);
am.Initialize();
Constructor
Creates a new AssetManager instanceAssetManager am = new AssetManager(FileSystem fs, ResourceManager rm);
Initialized FileSystem instance
Initialized ResourceManager instance
Initialization
Initializes the asset manager and loads all asset metadataam.Initialize(additionalStartup: true);
Perform additional initialization like EBX indexing
result
AssetManagerImportResult
default:"null"
Optional result object for tracking patch changes
Asset Retrieval
EBX Assets
Gets an EBX asset entry by name or GUID// By name
EbxAssetEntry entry = am.GetEbxEntry("content/characters/player");
// By GUID
EbxAssetEntry entry = am.GetEbxEntry(guid);
Asset path (case-insensitive)
Loads and deserializes an EBX assetEbxAsset asset = am.GetEbx(entry);
// Or
EbxAsset asset = am.GetEbx("content/characters/player");
If true, returns original data ignoring modifications
Loads an EBX asset as a specific typeMeshAsset mesh = am.GetEbxAs<MeshAsset>(entry);
Resource Assets
Gets a resource entry by name or resource ID// By name
ResAssetEntry entry = am.GetResEntry("textures/character_diffuse");
// By resource ID
ResAssetEntry entry = am.GetResEntry(resRid);
Gets the raw resource data streamStream resData = am.GetRes(resEntry);
Loads and deserializes a resource as a specific typeTexture texture = am.GetResAs<Texture>(entry);
modifiedData
ModifiedResource
default:"null"
Optional modified resource data
Chunk Assets
Gets a chunk entry by its GUIDChunkAssetEntry entry = am.GetChunkEntry(chunkId);
Gets the raw chunk data streamStream chunkData = am.GetChunk(chunkEntry);
Asset Enumeration
Enumerate EBX
EnumerateEbx
IEnumerable<EbxAssetEntry>
Enumerates EBX assets with optional filtering// All EBX assets
foreach (EbxAssetEntry entry in am.EnumerateEbx())
{
Console.WriteLine(entry.Name);
}
// Filter by type
foreach (EbxAssetEntry entry in am.EnumerateEbx("MeshAsset"))
{
// Process mesh assets
}
// Modified assets only
foreach (EbxAssetEntry entry in am.EnumerateEbx("", modifiedOnly: true))
{
// Process modified assets
}
Filter by asset type (supports inheritance)
Only return modified assets
Include indirectly modified linked assets
Enumerate Resources
EnumerateRes
IEnumerable<ResAssetEntry>
Enumerates resource assets// All resources
foreach (ResAssetEntry entry in am.EnumerateRes())
{
Console.WriteLine($"{entry.Name} - {entry.Type}");
}
// Filter by resource type
foreach (ResAssetEntry entry in am.EnumerateRes((uint)ResourceType.Texture))
{
// Process textures
}
Filter by ResourceType (0 = all types)
Only return modified resources
Enumerate Chunks
EnumerateChunks
IEnumerable<ChunkAssetEntry>
Enumerates chunk assetsforeach (ChunkAssetEntry entry in am.EnumerateChunks())
{
Console.WriteLine($"Chunk: {entry.Id}");
}
Only return modified chunks
Enumerate Bundles
Enumerates bundle entriesforeach (BundleEntry bundle in am.EnumerateBundles())
{
Console.WriteLine($"Bundle: {bundle.Name} ({bundle.Type})");
}
// Filter by type
foreach (BundleEntry bundle in am.EnumerateBundles(BundleType.BlueprintBundle))
{
// Process blueprint bundles
}
type
BundleType
default:"BundleType.None"
Filter by bundle type
Only return modified bundles
Asset Modification
Modify EBX
Marks an EBX asset as modified with new dataEbxAsset asset = am.GetEbx(entry);
// Modify asset properties...
asset.RootObject.SetValue("SomeProperty", newValue);
// Save modification
am.ModifyEbx(entry.Name, asset);
Modify Resource
Marks a resource as modified// Modify by resource ID
am.ModifyRes(resRid, modifiedData, metaData);
// Modify by name
am.ModifyRes("textures/player_diffuse", modifiedData, metaData);
// Modify with Resource object
Texture texture = am.GetResAs<Texture>(entry);
// Modify texture...
am.ModifyRes(entry.ResRid, texture);
Modify Chunk
Modifies a chunk’s databyte[] newChunkData = GetModifiedChunkData();
bool success = am.ModifyChunk(chunkId, newChunkData);
// For texture chunks
Texture texture = GetTexture();
am.ModifyChunk(chunkId, textureData, texture);
Texture metadata for texture chunks
Adding Assets
Add EBX
Adds a new EBX asset to the managerEbxAsset newAsset = CreateNewAsset();
EbxAssetEntry entry = am.AddEbx(
"content/custom/myasset",
newAsset,
bundleId1, bundleId2
);
Bundle IDs to add asset to
Add Resource
Adds a new resource to the managerbyte[] textureData = LoadTextureData();
byte[] metadata = CreateMetadata();
ResAssetEntry entry = am.AddRes(
"textures/custom_texture",
ResourceType.Texture,
metadata,
textureData,
bundleId
);
Add Chunk
Adds a new chunk and returns its GUIDbyte[] chunkData = GetChunkData();
Guid chunkId = am.AddChunk(chunkData, bundles: bundleId);
// For textures
Texture texture = CreateTexture();
Guid texChunkId = am.AddChunk(textureData, texture: texture, bundles: bundleId);
Optional specific GUID to use
Texture metadata for texture chunks
Asset Management
Revert Asset
Reverts modifications to an assetam.RevertAsset(entry);
// Revert data only (keep bundle assignments)
am.RevertAsset(entry, dataOnly: true);
Only revert data, not bundle assignments
Suppress modification event
Reset All
Reverts all modifications across all assets
Get Counts
Gets the total number of modified assetsuint modCount = am.GetModifiedCount();
Console.WriteLine($"{modCount} assets modified");
Gets count of EBX assets// All EBX
uint total = am.GetEbxCount();
// Specific type
uint meshCount = am.GetEbxCount("MeshAsset");
Usage Example
using FrostySdk;
using FrostySdk.Managers;
using FrostySdk.IO;
// Initialize
FileSystem fs = new FileSystem(@"C:\Games\FIFA20");
fs.Initialize();
ResourceManager rm = new ResourceManager(fs);
rm.Initialize();
AssetManager am = new AssetManager(fs, rm);
am.Initialize();
// Find and modify an asset
EbxAssetEntry entry = am.GetEbxEntry("content/characters/player");
if (entry != null)
{
EbxAsset asset = am.GetEbx(entry);
// Modify asset
dynamic obj = asset.RootObject;
obj.Health = 100;
// Save modification
am.ModifyEbx(entry.Name, asset);
Console.WriteLine($"Modified: {entry.Name}");
}
// Enumerate all modified assets
foreach (EbxAssetEntry modified in am.EnumerateEbx("", modifiedOnly: true))
{
Console.WriteLine($"Modified: {modified.Name}");
}
Console.WriteLine($"Total modifications: {am.GetModifiedCount()}");
See Also