Entity XML Structure (Disrupt Engine)
Entity prototypes define game objects (vehicles, characters, props) as XML.
Extracted from .fcb binary objects via Gibbed.Disrupt.ConvertBinaryObject or
FCBastard.
Header Fields
<EntityPrototype UID="#A3E9ECF28981E387">
<Entity
disNomadObjectId="#000000000000293B"
hidName="Vehicle_Brawler.Brawler.Brawler_Civ_Truck.Brawler_Civ_Truck_Military"
text_hidEntityClass="CEntity"
hidEntityClass="$CEntity"
...>
| Field | Type | Description |
|---|---|---|
UID | # hex | Entity prototype unique identifier (CRC64_WD2 hash) |
disNomadObjectId | # hex | Sequential numeric ID from binary export — NOT a hash |
hidName | string | Dot-separated entity path (input for hash computation) |
text_hidEntityClass | string | Entity class name |
hidEntityClass | $ hex | CRC32 hash of entity class name |
Hash Field Conventions
| Prefix | Algorithm | Example | Use |
|---|---|---|---|
$ | CRC32 | $CEntity, $Vehicle | Entity class, group IDs |
# | CRC64_WD2 | #AE95FBB4F84A9F78 | File paths, resource IDs, UIDs |
#FFFFFFFFFFFFFFFF | — | Special value | "No value" / null hash |
text_* | — | text_fileName="..." | Human-readable input for corresponding hash field |
Components
Entities contain components that define behavior:
<Components>
<CFileDescriptorComponent
text_fileName="graphics\vehicles_nexus\land\heavy\heavy_armoredtruck_01\Heavy_ArmoredTruck_01.xml"
fileName="#AE95FBB4F84A9F78" />
<CVehicleCarPhysComponent
text_hidResourceId="...\Heavy_ArmoredTruck_01.hkx"
hidResourceId="#AECCD9B4F879A7C6"
... />
...
</Components>
Each component has:
hidHasAliasName="0"— whether this is an aliastext_*fields — human-readable strings#fields — CRC64_WD2 hashes of the corresponding strings
Important Notes
disNomadObjectIdis sequential (e.g.0x293B,0x2942), assigned by the editor — it is NOT a hash of the entity nameUIDis the entity's unique identifier, used bySpawnEntityFromArchetype- Hashes in hand-edited XMLs may be incorrect if computed before the algorithm
was known — always verify with
hash_tool.py - Entity paths use dots as separators:
Vehicle_Brawler.Brawler.Brawler_Civ_Truck - File paths use backslashes:
graphics\vehicles_nexus\land\...
Graphickit Part XML Fields
Entity prototypes for characters and clothing contain graphickit_parts components with additional fields beyond the base entity structure:
| Field | Type | Description |
|---|---|---|
hidVersion | hash | Version identifier for the part |
selPoseDefinitionId | hash | Pose definition reference (body position for clothing) |
selMaterialOverridesId | hash | Material override set reference |
oneAnchor | bool | Whether this part has a single anchor point |
BoneName | string | Target bone for attachment |
Vector3 translation | float×3 | Position offset |
Vector3 rotation | float×3 | Rotation offset |
Vector3 scale | float×3 | Scale offset |
Source: OCR of graphickit part XML dumps (wd1_modelinfo_1.txt).
Community editing workflows
Editing a .lib library (SilverStar, 2025-11-12)
Libraries live at generated\databases\generic (e.g. Graphickit_models.lib in patch):
- Drag the
.libover Gibbed'sConvertBinaryObject→ unpacks to a header XML + folder. - Put mod files in the folder and overwrite.
- In the header XML, strip the
.libfrom the name it's Gibbed'd against: the folder keepsGraphickit_models.lib.xml, but the header entry becomesGraphickit_models.xml. - Delete the original
.libfirst — Gibbed can't overwrite — then drag the header XML back overConvertBinaryObjectto repack; put it back in the patch file.
Which files break when edited
- 90% of the time a
.libfile is the culprit — "a common one to break for beginners" (SilverStar, 2025-11-12); unpack with ConvertBinaryObject, diff the two XML/header sets and make them fit. - The other 9% is
entity_library.fcb-related — FCBastard does basically the same process as Gibbed's CBO tool. - Deploadify XML bug (SilverStar, 2025-10-14): a depload conversion can die with
System.Xml.XmlException '<', hexadecimal value 0x3Cbecause a resource path containing an ampersand (...adpaint_db&...inwindy_city.dat) isn't escaped — grab the intermediate.converted.xmland fix that line manually before rerunning.
Graphic-kit lib recipe (WDL, from the game's patch archive)
The graphic-kit library lives in generated\databases\generic inside the patch archive. To edit it:
- Drag the
.libontoConvertBinaryObject— this unpacks the library and produces aheader.xmlplus a folder of member objects. - Drop the replacement asset into that folder and overwrite the existing file.
- In
header.xml, strip the.libfrom the entry name that refers to the folder —Graphickit_models.lib.xmlbecomesGraphickit_models.xml— then repack withConvertBinaryObject.
The same header-name rule applies to any .lib unpacked this way; forgetting it makes the game reject the rebuilt library.
NPC weapon loadouts
Which weapon an NPC carries is decided by the StartUpKit section of the Dunia_NPC
entity library. The StartUpKit entries reference weapon hashes drawn from
Item.lib, so editing the loadout means editing that entity library rather than the
weapon definition itself. The same mechanism drives the stock loadouts listed below.
NPC-used weapons:
| Weapon | Notes |
|---|---|
| Deagle | |
| 1911 | |
| P9mm | |
| PX4 | |
| 416 | |
| AK | |
| OCP11 | |
| Goblin | |
| MP5 | SWAT |
Weapons not used by NPCs:
| Weapon | Notes |
|---|---|
| ACR | |
| Vector | |
| suppressed guns | |
| Tommy gun | |
| AA-12 |