Unit Interaction - Primary Action

Used for every action that is executed by selecting a unit and using Right-Mouse-Botton on an object in the game environment. It depends on the context (:target_id, :selected_id) which specific action is executed. Units with several right-click abilities (monks, villagers) will use their primary action for all of them.

Because primary actions are contextual, a primary action can have the exact same effect of another action (that was executed by using a button from the HUD or a hotkey). Notable examples are repairing and garrisoning units into rams/transport ships.

Action that classify as a primary action include attacking, gathering, repairing, converting, healing, picking up relics and boarding transport ships.

Definition

def PrimaryAction
    int8 :action_identifier
    int8 :player_id
    int16 :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 0x00.

:player_id
The ID of the player who executes the action (0x01 - 0x08).

:zero
The two bytes following :player_id are unused.

:target_id
The ID of the targeted object.

:selection_count
The number of selected units. When the value of this field is 0xFF, the action is executed for the units referenced in the previous command.

: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

Gathering stone with villager.

00 02 00 00 92 17 00 00 01 00 00 00 00 80 33 43 00 80 16 43 4d 17 00 00

00 — action_identifier
02 — player_id
00 00 — zero
92 17 00 00 — target_id
01 — selection_count
00 00 00 — zero2
00 80 33 43 — x_coord
00 80 16 43 — y_coord
4d 17 00 00 — selected_id

Attacking a building.

00 02 00 00 38 1a 00 00 02 00 00 00 00 00 40 42 00 00 0b 43 5e 1a 00 00 62 1a 00 00

00 — action_identifier
02 — player_id
00 00 — zero
38 1a 00 00 — target_id
02 — selection_count
00 00 00 — zero2
00 00 40 42 — x_coord
00 00 0b 43 — y_coord
5e 1a 00 00 — selected_id
62 1a 00 00 — selected_id

Boarding a transport ship with the same units

00 02 00 00 57 1a 00 00 ff 00 00 00 7a 7c 47 43 52 da 38 43

00 — action_identifier
02 — player_id
00 00 — zero
57 1a 00 00 — target_id
ff — selection_count
00 00 00 — zero2
7a 7c 47 43 — x-coord
52 da 38 43 — y-coord