Skip to main content

Overview

Frostbite uses specialized reference types to point to different kinds of assets and resources. These lightweight structures provide type-safe ways to reference resources, files, and type definitions.

ResourceRef

Represents a reference to a resource by its unique 64-bit identifier.

Structure

public struct ResourceRef
{
    private readonly ulong resourceId;
}

Properties

Zero
ResourceRef
Static instance representing a null/zero resource reference

Constructor

value
ulong
required
The 64-bit resource identifier
var resourceRef = new ResourceRef(0x123456789ABCDEF0);

Implicit Conversions

ResourceRef supports seamless conversion to and from ulong.
// ulong to ResourceRef
ResourceRef resRef = 0x123456789ABCDEF0;

// ResourceRef to ulong
ulong id = resRef;

Methods

Equals

Compares resource references for equality. Supports comparison with both ResourceRef and ulong types.
public override bool Equals(object obj)

GetHashCode

Generates hash code using FNV-1a algorithm.
public override int GetHashCode()

ToString

Returns the resource ID as a hexadecimal string.
public override string ToString()
Example:
var resRef = new ResourceRef(0x123456789ABCDEF0);
Console.WriteLine(resRef.ToString()); // "123456789ABCDEF0"

Operators

public static bool operator ==(ResourceRef a, ResourceRef b)
public static bool operator !=(ResourceRef a, ResourceRef b)

Usage Example

// Create resource reference
ResourceRef textureRef = 0x1A2B3C4D5E6F7890;

// Check if valid
if (textureRef != ResourceRef.Zero)
{
    var resource = resourceManager.GetResource(textureRef);
}

// Convert to string for logging
Console.WriteLine($"Resource ID: {textureRef}");

FileRef

Represents a reference to a file path within the Frostbite virtual file system.

Structure

public struct FileRef
{
    private string fileName;
}

Constructor

value
string
required
The file path string
var fileRef = new FileRef("path/to/asset.bin");

Implicit Conversions

FileRef supports seamless conversion to and from string.
// string to FileRef
FileRef fileRef = "weapons/assault_rifle.mesh";

// FileRef to string
string path = fileRef;

Methods

ToString

Returns a formatted string with the file path.
public override string ToString()
Example:
var fileRef = new FileRef("vehicles/tank.mesh");
Console.WriteLine(fileRef.ToString()); // "FileRef 'vehicles/tank.mesh'"

Usage Example

// Assign file reference to property
FileRef meshFile = "characters/soldier.mesh";
meshComponent.SetPropertyValue("MeshRef", meshFile);

// Read file reference from property
FileRef soundFile = soundComponent.GetPropertyValue<FileRef>("SoundFile");
Console.WriteLine($"Sound file: {soundFile}");

TypeRef

Represents a reference to a type definition, identified by either name or GUID.

Structure

public class TypeRef
{
    public string Name { get; }
    public Guid Guid { get; }
    private Guid typeGuid;
    private readonly string typeName;
}

Properties

Name
string
The name of the referenced type
Guid
Guid
The GUID of the referenced type

Constructors

TypeRef()

Creates an empty type reference.
var typeRef = new TypeRef(); // Empty type

TypeRef(string)

Creates a type reference from a type name.
value
string
required
The name of the type
var typeRef = new TypeRef("MeshAsset");

TypeRef(Guid)

Creates a type reference from a type GUID and looks up the name.
guid
Guid
required
The GUID of the type
var typeGuid = new Guid("A1B2C3D4-E5F6-7890-1234-56789ABCDEF0");
var typeRef = new TypeRef(typeGuid);
// Name is automatically looked up from TypeLibrary

Implicit Conversions

// string to TypeRef
TypeRef typeRef = "SoundAsset";

// TypeRef to string (returns GUID string if GUID is set, otherwise name)
string typeStr = typeRef;

// Guid to TypeRef
TypeRef typeRef2 = typeGuid;

Methods

IsNull

Checks if the type reference is empty.
public bool IsNull()
Returns: true if the type name is null or empty.
var emptyRef = new TypeRef();
if (emptyRef.IsNull())
{
    Console.WriteLine("Type reference is empty");
}

ToString

Returns a formatted string with the type name.
public override string ToString()
Example:
var typeRef = new TypeRef("MeshAsset");
Console.WriteLine(typeRef.ToString()); // "TypeRef 'MeshAsset'"

var nullRef = new TypeRef();
Console.WriteLine(nullRef.ToString()); // "TypeRef '(null)'"

Usage Examples

Type Filtering

// Filter assets by type
TypeRef meshType = "MeshAsset";
var meshAssets = assetManager.EnumerateEbx()
    .Where(entry => entry.Type == meshType.Name);

Type Validation

var assetType = new TypeRef(asset.RootObject.GetType().Name);
if (!assetType.IsNull())
{
    Console.WriteLine($"Asset is of type: {assetType.Name}");
}

Working with TypeLibrary

// Look up type by GUID
var typeGuid = new Guid("...");
var typeRef = new TypeRef(typeGuid);
Console.WriteLine($"Type GUID {typeGuid} maps to {typeRef.Name}");

// Convert between name and GUID
TypeRef namedType = "TextureAsset";
if (namedType.Guid != Guid.Empty)
{
    Console.WriteLine($"Type GUID: {namedType.Guid}");
}

Comparison Table

TypePurposeKey TypeConversion
ResourceRefReference runtime resourcesulong↔️ ulong
FileRefReference file pathsstring↔️ string
TypeRefReference type definitionsstring or Guid↔️ string, ↔️ Guid

Best Practices

ResourceRef

  • Use ResourceRef.Zero to check for null/invalid references
  • Store as hex strings when serializing to text formats
  • Resource IDs are game-specific and not portable between titles

FileRef

  • File paths are relative to the game’s virtual file system
  • Use forward slashes for path separators
  • Paths are case-insensitive on most platforms

TypeRef

  • Use GUID-based constructors when working with serialized data
  • Use name-based constructors for runtime type lookups
  • Always check IsNull() before using the reference
  • TypeLibrary must be initialized before GUID lookups work

Build docs developers (and LLMs) love