This format is used by .bslnk and .belnk files.

This file is structured as follows:

OffsetSizeDescription
0x04magic (XLNK)
0x44dataSize
0x84version
0xC4numResParam
0x104numResAssetParam
0x144numResTriggerOverwriteParam
0x184triggerOverwriteParamTablePos
0x1C4localPropertyNameRefTablePos
0x204numLocalPropertyNameRefTable
0x244numLocalPropertyEnumNameRefTable
0x284numDirectValueTable
0x2C4numRandomTable
0x304numCurveTable
0x344numCurvePointTable
0x384exRegionPos
0x3C4numUser
0x404conditionTablePos
0x444nameTablePos

User Data Table

The number of entries is specified by the numUser field in the header.

OffsetSizeDescription
0x04 bytes per entryCRC32 hashes. These must be sorted because a binary search algorithm is used.
4 bytes per entryOffset to data in ex region (absolute). Must be stored in the same order as the hashes.

Param Define Table

OffsetSizeDescription
0x04Size of this section
0x44Number of user params
0x84Number of asset params
0xC4Unknown
0x104Number of trigger params
0x14User params
Asset params
Trigger params
Null-terminated strings for param names and default values

Param Def

OffsetSizeDescription
0x04Name (offset into string table)
0x44Type
0x84Default value

Param Type

ValueDescription
4String (default value is offset into string table)

Resource Asset Param Table

The number of entries is specified by the numResAssetParam field in the header.

Every entry starts with an 8-byte mask, where every bit represents an asset param def from the param define table.

OffsetSizeDescription
0x08Mask
0x84First reference (if mask & 1)
4Second reference (if mask & 2)
4Third reference (if mask & 4)
...

Every reference is stored as 0xXXYYYYYY, where X in indicates the reference type and Y its value.

Trigger Overwrite Param Table

The number of entries in table is specified by the numResTriggerOverwriteParam field in the header, and its position in the file is stored in the triggerOverwriteParamTablePos field.

Every entry starts with a 4-byte mask, where every bit represents a trigger param def from the param define table.

OffsetSizeDescription
0x04Mask
0x44First reference (if mask & 1)
4Second reference (if mask & 2)
4Third reference (if mask & 4)
...

Every reference is stored as 0xXXYYYYYY, where X in indicates the reference type and Y its value.

Local Property Name Ref Table

The number of entries in this table is specified by the numLocalPropertyNameRefTable field in the header and its position in the file is stored in the localPropertyNameRefTablePos field.

Every entry is an offset into the name table (4 bytes).

Local Property Enum Name Ref Table

This table is stored immediately behind the local property name ref table. The number of entries is specified by the numLocalPropertyEnumNameRefTable field in the header.

Every entry is an offset into the name table (4 bytes).

Direct Value Table

This table is stored immediately behind the local property enum name ref table. The number of entries is specified by the numDirectValueTable field in the header.

Every entry is just a 4-byte integer.

Random Table

This table is stored immediately behind the direct value table. The number of entries is specified by the numRandomTable field in the header.

Every entry is stored as follows:

OffsetSizeDescription
0x04Minimum (float)
0x44Maximum (float)

Curve Table

This table is stored immediately behind the random table. The number of entries is specified by the numCurveTable field in the header.

Every entry consists of the following fields:

OffsetSizeDescription
0x02curvePointStartPos
0x22numPoint
0x42curveType
0x62isPropGlobal
0x84propName
0xC4propIdx
0x102localPropertyNameIdx
0x122Padding

Curve Point Table

This table is stored immediately behind the curve table. The number of entries is specified by the numCurvePointTable field in the header.

Every entry is stored as follows:

OffsetSizeDescription
0x04X (float)
0x44Y (float)

Ex Region

This region contains user data that's pointed to by the user data table.

Condition Table

The position of this table in the file is stored in the conditionTablePos field in the header. The size of this table can be determined by calculating the distance to the name table.

Every entry consists of the following fields:

OffsetSizeDescription
0x04parentContainerType

If parentContainerType is 1 or 2:

OffsetSizeDescription
0x44weight (float)

Else:

OffsetSizeDescription
0x44propertyType
0x84compareType
0xC4value
0x102localPropertyEnumNameIdx
0x121isSolved
0x131isGlobal

Name Table

The position of this table in the file is stored in the nameTablePos field in the header. It is always stored right behind the condition table. This section contains null-terminated strings.