AI Actions

Primary Action (AI Player)

Used by the AI to interact with objects in the game world.

Definition

def PrimaryActionAI
    int8 :action_identifier
    byte24 :zero
    int32 :target_id
    int8 :selection_count
    byte24 :zero2
    float :x_coord
    float :y_coord
    array :selected_ids,
      type => :int32,
      length => :selection_count,
      onlyif => :selection_count < 0xFF
end

Description

:action_identifier
Always has the value 0x02.

:zero
The 3 bytes following :action_identifier are unused.

:target_id
The ID of the targeted object.

:selection_count
The number of selected units. Always 0x01.

:zero2
The three bytes following :selection_count are unused.

:x_coord
The x-coordinate of the targeted position.

:y_coord
The y-coordinate of the targeted position.

:selected_ids
The IDs of the selected units.

Examples

02 00 00 00 21 1f 00 00 01 00 00 00 00 80 36 43 00 80 0f 43 72 1e 00 00

02 — action_identifier
00 00 00 — zero
21 1f 00 00 — target_id
01 — selection_count
00 00 00 — zero2
00 80 36 43 — x_coord
00 80 0f 43 — y_coord
72 1e 00 00 — selected_id

Move (AI Player)

Used for moving and attacking. If that is the only purpose is unknown.

Definition

def PrimaryActionAI
    int8 :action_identifier
    int8 :selection_count
    int8 :player_number
    int8 :player_id
    int32 :unknown_id
    int32 :unknown_bytes
    int32 :target_id
    int8 :unknown_count
    byte24 :zero
    float :unknown_x_coord
    float :unknown_y_coord
    float :unknown_float
    float :unknown_float2
    int32 :unknown_bytes2
    array :selected_ids,
      type => :int32,
      length => :selection_count,
      onlyif => :selection_count > 0x01
end

Description

:action_identifier
Always has the value 0x0a.

:selection_count
The number of selected units.

:player_number
The player’s number which can be changed in the lobby. Is only different from :player_id if playing in coop mode.

:player_id
The ID of the player.

:unknown_id
The ID of a unit that is able to move.

:unknown_bytes
Purpose unknown.

:target_id
The ID of a target. Is 0xFFFFFFFF if no target is selected.

:unknown_count
Could be the number of targets, but is never greater than 0x01. Is 0xFF if no target is selected.

:zero
The 3 bytes after :unknown_count are always zero.

:unknown_x_coord
Presumably an x-coordinate, that could describe the position of a target.

:unknown_y_coord
Presumably an y-coordinate, that could describe the position of a target.

:unknown_float
A float value that can be 1.0f or -1.0f.

:unknown_float2
A float value that can be 1.0f or -1.0f.

:unknown_bytes2
Purpose unknown.

:selected_ids
The IDs of the selected units. Only present if :selection_count is greater than 0x01. Always contains :unknown_id.

Examples

0a 01 03 03 1b 17 00 00 c1 02 01 00 ff ff ff ff ff 00 00 00 00 00 09 43 00 00 4a 43 00 00 80 bf 00 00 80 3f 01 00 00 00

0a — action_identifier
01 — selection_count
03 — player_number
03 — player_id
1b 17 00 00 — unknown_id
c1 02 01 00 — unknown_bytes
ff ff ff ff — target_id
ff — unknown_count
00 00 00 — zero
00 00 09 43 — unknown_x_coord
00 00 4a 43 — unknown_y_coord
00 00 80 bf — unknown_float
00 00 80 3f — unknown_float2
01 00 00 00 — unknown_bytes2

Waypoints (AI Player)

Used for setting multiple waypoints for AI units.

Definition

def WaypointsAI
  int8 :action_identifier
  int8 :selection_count
  int8 :waypoint_count
  array :selected_ids,
        type => :int32,
        initial_length => :selection_count
  array :x_coords,
        type => :int8,
        initial_length => :waypoint_count
  array :y_coords,
        type => :int8,
        initial_length => :waypoint_count
end

Description

:action_identifier
Always has the value 0x1f.

:selection_count
The number of units selected by the AI.

:waypoint_count
The number of waypoints.

:selected_ids
The IDs of the selected units.

:x_coords
The x-coordinates on the AoC grid.

:y_coords
The y-coordinates on the AoC grid.

Examples

1f 04 09 84 21 00 00 bd 20 00 00 a4 21 00 00 bb 21 00 00 6e 6a 68 67 67 64 64 64 5f 99 a0 a4 a7 a8 b0 b4 b8 be

1f — action_identifier
04 — selection_count
09 — waypoint_count
84 21 00 00 — selected_id
bd 20 00 00 — selected_id
a4 21 00 00 — selected_id
bb 21 00 00 — selected_id
6e — x_coord1
6a — x_coord2
68 — x_coord3
67 — x_coord4
67 — x_coord5
64 — x_coord6
64 — x_coord7
64 — x_coord8
5f — x_coord9
99 — y_coord1
a0 — y_coord2
a4 — y_coord3
a7 — y_coord4
a8 — y_coord5
b0 — y_coord6
b4 — y_coord7
b8 — y_coord8
be — y_coord9

Training Unit (AI Player)

Used for training unit with AI player.

Definition

def TrainAI
  int8 :action_identifier
  byte24 :zero
  int32 :building_id
  int16 :player_id
  int16 :unit_id
  int32 :const
end

Description

:action_identifier
Always has the value 0x64.

:zero
The 3 bytes after :action_identifier are always zero.

:building_id
The ID of the building where the units are trained.

:player_number
The number of the AI player who trains the unit (0x01 - 0x08).

:unit_id
The UnitID (LineID for villagers) of the unit which is trained.

:const
The value is always 0xFFFFFFFF.

Examples

64 00 00 00 ae 1a 00 00 03 00 27 00 ff ff ff ff

64 — action_identifier
00 00 00 — zero
ae 1a 00 00 — building_id
03 00 — player_id
27 00 — unit_id
ff ff ff ff — const