Actor definitions configure core AI behaviours, including which decisions they make and how, irrespective of the character's appearance or rank-specific alterations (which is what actor_variant is for).
There are 16 actor types. Each actor type maps to one of 13 unique actor type definitions which are hardcoded and contain a combination of basic settings and references to game code implementing the particular behaviours of that actor type. Some actor types use the same definition, like monitor and sentinel.
Each actor type definition has a unique way to decide on one of 14 actions. It is difficult to understand how exactly each actor type definition differs without extensive testing and/or reverse engineering. It's known that there is a lot of similarity between their code, but that Flood units are the most unique.
| Name | Race | When to search at target | When to search pursuit | Pursuit controller | Swarm | Known behaviours |
---|
| elite | covenant | always | not_when_group | true
| false
| ... |
| jackal | covenant | never | never | false
| false
| ... |
| grunt | covenant | always | always | false
| false
| Flees when Elite is killed. Cannot evade. |
| hunter | covenant | always | not_when_group | true
| false
| ... |
| engineer | covenant | always | always | false
| false
| ... |
| marine | human | never | never | false
| false
| Prefers to group together. |
| crew | human | always | always | false
| false
| ... |
| flood | flood combat | always | always | true
| false
| Cannot throw grenades. |
| infection | flood infection | never | never | false
| true
| ... |
| flood carrier | flood carrier | always | never | true
| false
| ... |
| sentinel | sentinel | always | always | false
| false
| Cannot throw grenades. |
| mounted_weapon | none | never | never | false
| false
| ... |
Field | Type | Comments |
---|
| bitfield |
Flag | Mask | Comments |
---|
| 0x1 | | | 0x2 | | | 0x4 | | | 0x8 | | | 0x10 | When no target is visible, briefly shoot at where the target was last seen. | | 0x20 | | | 0x40 | | | 0x80 | | | 0x100 | | | 0x200 | | | 0x400 | When an enemy unit is newly detected within this actor's surprise distance, panic. | | 0x800 | Always ignore other paramaters such as desired combat ranges and run at enemies. | | 0x1000 | | | 0x2000 | | | 0x4000 | | | 0x8000 | | | 0x10000 | | | 0x20000 | | | 0x40000 | | | 0x80000 | | | 0x100000 | | | 0x200000 | | | 0x400000 | | | 0x800000 | | | 0x1000000 | When this actor's squad is in attacking mode, ignore other paramaters such as desired combat ranges and run straight at enemies. | | 0x2000000 | Will not attempt to avoid sheer drops when diving away from dangerous objects. | | 0x4000000 | | | 0x8000000 | | | 0x10000000 | | | 0x20000000 | | | 0x40000000 | | | 0x80000000 | |
|
| bitfield |
Flag | Mask | Comments |
---|
| 0x1 | | | 0x2 | | | 0x4 | | | 0x8 | | | 0x10 | Will not attempt to avoid live grenades, projectiles, environmental damage, etc when moving. | | 0x20 | | | 0x40 | |
|
| enum |
Option | Value | Comments |
---|
| 0x0 | Uses the elite actor type definition. | | 0x1 | Uses the jackal actor type definition. | | 0x2 | Uses the grunt actor type definition. | | 0x3 | Uses the hunter actor type definition. | | 0x4 | Uses the engineer actor type definition. | | 0x5 | Uses the elite actor type definition (duplicate). | | 0x6 | Uses the marine actor type definition (duplicate). | | 0x7 | Uses the marine actor type definition. | | 0x8 | Uses the crew actor type definition. | | 0x9 | Uses the flood actor type definition. | | 0xA | Uses the infection actor type definition. | | 0xB | Uses the flood carrier actor type definition. | | 0xC | Uses the sentinel actor type definition (duplicate). | | 0xD | Uses the sentinel actor type definition. | | 0xE | Uses the grunt actor type definition. | | 0xF | Uses the mounted_weapon actor type definition. |
|
| float |
| float |
| float |
| float |
| float |
| Vector3D |
Field | Type | Comments |
---|
| float | | float | | float |
|
| Vector3D ? |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| Vector2D |
Field | Type | Comments |
---|
| float | | float |
|
| Vector2D ? |
| float |
| float |
| float |
| float |
| Vector2D ? |
| Vector2D ? |
| Bounds |
Field | Type | Comments |
---|
| float | | float |
|
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| Vector2D ? |
| Vector2D ? |
| TagDependency : weapon |
| TagDependency : projectile |
| enum |
Option | Value | Comments |
---|
| 0x0 | | | 0x1 | | | 0x2 | | | 0x3 | | | 0x4 | | | 0x5 | | | 0x6 | | | 0x7 | | | 0x8 | | | 0x9 | |
|
| enum ? |
| enum ? |
| Bounds ? |
| int16 |
| int16 |
| Bounds ? |
| Bounds ? |
| float |
| enum ? |
| float |
| float |
| float |
| Bounds ? |
| float |
| float |
| float |
| float |
| enum |
Option | Value | Comments |
---|
| 0x0 | | | 0x1 | | | 0x2 | | | 0x3 | | | 0x4 | | | 0x5 | |
|
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| Bounds ? |
| Bounds ? |
| Bounds ? |
| uint16 |
| uint16 |
| float |
| float |
| float |
| Bounds ? |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| float |
| Bounds ? |
| Bounds ? |
| float |
| float |
| Bounds ? |
| Bounds ? |
| TagDependency : actor |
Thanks to the following individuals for their research or contributions to this topic:
- Conscars (Reversing actor type definitions)
- Elefant (Researching sentinel and grunt actor type behaviour)
- gbMichelle (Reversing actor type aliases)
- justinpyne (Explaining the friend avoid dist field)
- Kavawuvi (Invader tag definitions)
- Kornman (Providing actor type definition structure)
- MosesOfEgypt (Tag structure research)
- Vennobennu (Field documentation)
- zatarita (Reversing actor type definitions)