Repository navigation
Messages Movement
Every message in the Movement area: its opcode, direction, how far it is verified, and its fields.
Note
Generated from the message declarations at bootstrap 5aae370 by Tools/NexusTomorrow.ProtocolReference. Don't edit it by hand: change the declaration's documentation and regenerate.
| Opcode | Direction | Verified to |
|---|---|---|
0x0070 |
server to client | unverified |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
32 | unsigned |
Gives the client control of a unit's movement.
| Opcode | Direction | Verified to |
|---|---|---|
0x0636 |
server to client | fields |
| Field | Bits | Encoding | Meaning |
|---|---|---|---|
Ticket |
32 | unsigned | A value the client sends straight back in MovementControlReceipt. |
RebuildMovement |
1 | unsigned | When set, the client rebuilds the movement state of the unit it moves from that unit's current state, at the current time. |
UnitId |
32 | unsigned | The unit to move. If it is not the unit the client moves, the client switches to it, or waits for that unit's UnitCreate. |
Taken only after PlayerUnit; before it the client ignores it. The client answers at once with MovementControlReceipt. Unless it already moves the unit, it then takes the unit over and starts sending its movement (ClientMovement) and its zone changes (ZoneChange). When the message names the player's own unit while the unit the client moves, or last moved, carries the mark Unknown3 describes, as on the client's first takeover of that unit and after a MovementControlEnd, the client also sends a ZoneChange at once. The client registers a writer for it as well.
Moves a unit the client does not move, by commands stamped with the sender's clock.
| Opcode | Direction | Verified to |
|---|---|---|
0x0638 |
server to client | purpose |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
32 | unsigned |
Unknown1 |
32 | unsigned |
Unknown2 |
1 | unsigned |
Unknown3 |
1 | unsigned |
Unknown4 count |
5 | unsigned |
Unknown4 |
array, counted by Unknown4 count
|
|
Unknown4[].Unknown0 |
5 | unsigned; selects Unknown4[].Unknown1
|
Unknown4[].Unknown1 |
union, selected by Unknown4[].Unknown0
|
|
Unknown4[].Unknown1(0) |
when Unknown4[].Unknown0 is 0 |
|
Unknown4[].Unknown1(0).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(1) |
when Unknown4[].Unknown0 is 1 |
|
Unknown4[].Unknown1(1).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(2) |
when Unknown4[].Unknown0 is 2 |
|
Unknown4[].Unknown1(2).Unknown0.X |
32 | float |
Unknown4[].Unknown1(2).Unknown0.Y |
32 | float |
Unknown4[].Unknown1(2).Unknown0.Z |
32 | float |
Unknown4[].Unknown1(2).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(3) |
when Unknown4[].Unknown0 is 3 |
|
Unknown4[].Unknown1(3).Unknown0 |
10 | unsigned; counts Unknown4[].Unknown1(3).Unknown1, Unknown4[].Unknown1(3).Unknown2
|
Unknown4[].Unknown1(3).Unknown1 |
array, counted by Unknown4[].Unknown1(3).Unknown0
|
|
Unknown4[].Unknown1(3).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(3).Unknown2 |
array, counted by Unknown4[].Unknown1(3).Unknown0
|
|
Unknown4[].Unknown1(3).Unknown2[].X |
32 | float |
Unknown4[].Unknown1(3).Unknown2[].Y |
32 | float |
Unknown4[].Unknown1(3).Unknown2[].Z |
32 | float |
Unknown4[].Unknown1(3).Unknown3 |
2 | unsigned |
Unknown4[].Unknown1(3).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(3).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(4) |
when Unknown4[].Unknown0 is 4 |
|
Unknown4[].Unknown1(4).Unknown0 count |
10 | unsigned |
Unknown4[].Unknown1(4).Unknown0 |
array, counted by Unknown4[].Unknown1(4).Unknown0 count
|
|
Unknown4[].Unknown1(4).Unknown0[].X |
32 | float |
Unknown4[].Unknown1(4).Unknown0[].Y |
32 | float |
Unknown4[].Unknown1(4).Unknown0[].Z |
32 | float |
Unknown4[].Unknown1(4).Unknown1 |
16 | packed float |
Unknown4[].Unknown1(4).Unknown2 |
2 | unsigned |
Unknown4[].Unknown1(4).Unknown3 |
4 | unsigned |
Unknown4[].Unknown1(4).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(4).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(5) |
when Unknown4[].Unknown0 is 5 |
|
Unknown4[].Unknown1(5).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(5).Unknown1 |
32 | float |
Unknown4[].Unknown1(5).Unknown2 |
32 | float |
Unknown4[].Unknown1(5).Unknown3.X |
16 | packed float |
Unknown4[].Unknown1(5).Unknown3.Y |
16 | packed float |
Unknown4[].Unknown1(5).Unknown3.Z |
16 | packed float |
Unknown4[].Unknown1(5).Unknown4 |
4 | unsigned |
Unknown4[].Unknown1(5).Unknown5 |
32 | unsigned |
Unknown4[].Unknown1(5).Unknown6 |
1 | unsigned |
Unknown4[].Unknown1(5).Unknown7 |
1 | unsigned |
Unknown4[].Unknown1(5).Unknown8 |
1 | unsigned |
Unknown4[].Unknown1(6) |
when Unknown4[].Unknown0 is 6 |
|
Unknown4[].Unknown1(6).Unknown0 count |
10 | unsigned |
Unknown4[].Unknown1(6).Unknown0 |
array, counted by Unknown4[].Unknown1(6).Unknown0 count
|
|
Unknown4[].Unknown1(6).Unknown0[] |
32 | unsigned |
Unknown4[].Unknown1(6).Unknown1 |
16 | packed float |
Unknown4[].Unknown1(6).Unknown2 |
32 | float |
Unknown4[].Unknown1(6).Unknown3 |
32 | float |
Unknown4[].Unknown1(6).Unknown4 |
32 | float |
Unknown4[].Unknown1(6).Unknown5.X |
16 | packed float |
Unknown4[].Unknown1(6).Unknown5.Y |
16 | packed float |
Unknown4[].Unknown1(6).Unknown5.Z |
16 | packed float |
Unknown4[].Unknown1(6).Unknown6 |
4 | unsigned |
Unknown4[].Unknown1(6).Unknown7 |
32 | unsigned |
Unknown4[].Unknown1(6).Unknown8 |
32 | unsigned |
Unknown4[].Unknown1(6).Unknown9 |
1 | unsigned |
Unknown4[].Unknown1(6).Unknown10 |
1 | unsigned |
Unknown4[].Unknown1(7) |
when Unknown4[].Unknown0 is 7 |
|
Unknown4[].Unknown1(7).Unknown0.X |
32 | float |
Unknown4[].Unknown1(7).Unknown0.Y |
32 | float |
Unknown4[].Unknown1(7).Unknown0.Z |
32 | float |
Unknown4[].Unknown1(7).Unknown1.X |
32 | float |
Unknown4[].Unknown1(7).Unknown1.Y |
32 | float |
Unknown4[].Unknown1(7).Unknown1.Z |
32 | float |
Unknown4[].Unknown1(7).Unknown2 |
32 | unsigned |
Unknown4[].Unknown1(7).Unknown3 |
32 | float |
Unknown4[].Unknown1(7).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(7).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(8) |
when Unknown4[].Unknown0 is 8 |
|
Unknown4[].Unknown1(8).Unknown0.X |
16 | packed float |
Unknown4[].Unknown1(8).Unknown0.Y |
16 | packed float |
Unknown4[].Unknown1(8).Unknown0.Z |
16 | packed float |
Unknown4[].Unknown1(8).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(9) |
when Unknown4[].Unknown0 is 9 |
|
Unknown4[].Unknown1(9).Unknown0 |
10 | unsigned; counts Unknown4[].Unknown1(9).Unknown1, Unknown4[].Unknown1(9).Unknown2
|
Unknown4[].Unknown1(9).Unknown1 |
array, counted by Unknown4[].Unknown1(9).Unknown0
|
|
Unknown4[].Unknown1(9).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(9).Unknown2 |
array, counted by Unknown4[].Unknown1(9).Unknown0
|
|
Unknown4[].Unknown1(9).Unknown2[].X |
16 | packed float |
Unknown4[].Unknown1(9).Unknown2[].Y |
16 | packed float |
Unknown4[].Unknown1(9).Unknown2[].Z |
16 | packed float |
Unknown4[].Unknown1(9).Unknown3 |
2 | unsigned |
Unknown4[].Unknown1(9).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(9).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(10) |
when Unknown4[].Unknown0 is 10 |
|
Unknown4[].Unknown1(10).Unknown0 |
1 | unsigned |
Unknown4[].Unknown1(11) |
when Unknown4[].Unknown0 is 11 |
|
Unknown4[].Unknown1(11).Unknown0.X |
16 | packed float |
Unknown4[].Unknown1(11).Unknown0.Y |
16 | packed float |
Unknown4[].Unknown1(11).Unknown0.Z |
16 | packed float |
Unknown4[].Unknown1(11).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(12) |
when Unknown4[].Unknown0 is 12 |
|
Unknown4[].Unknown1(12).Unknown0 |
10 | unsigned; counts Unknown4[].Unknown1(12).Unknown1, Unknown4[].Unknown1(12).Unknown2
|
Unknown4[].Unknown1(12).Unknown1 |
array, counted by Unknown4[].Unknown1(12).Unknown0
|
|
Unknown4[].Unknown1(12).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(12).Unknown2 |
array, counted by Unknown4[].Unknown1(12).Unknown0
|
|
Unknown4[].Unknown1(12).Unknown2[].X |
16 | packed float |
Unknown4[].Unknown1(12).Unknown2[].Y |
16 | packed float |
Unknown4[].Unknown1(12).Unknown2[].Z |
16 | packed float |
Unknown4[].Unknown1(12).Unknown3 |
2 | unsigned |
Unknown4[].Unknown1(12).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(12).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(13) |
when Unknown4[].Unknown0 is 13 |
|
Unknown4[].Unknown1(13).Unknown0 |
1 | unsigned |
Unknown4[].Unknown1(14) |
when Unknown4[].Unknown0 is 14 |
|
Unknown4[].Unknown1(14).Unknown0.X |
32 | float |
Unknown4[].Unknown1(14).Unknown0.Y |
32 | float |
Unknown4[].Unknown1(14).Unknown0.Z |
32 | float |
Unknown4[].Unknown1(14).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(15) |
when Unknown4[].Unknown0 is 15 |
|
Unknown4[].Unknown1(15).Unknown0 |
10 | unsigned; counts Unknown4[].Unknown1(15).Unknown1, Unknown4[].Unknown1(15).Unknown2
|
Unknown4[].Unknown1(15).Unknown1 |
array, counted by Unknown4[].Unknown1(15).Unknown0
|
|
Unknown4[].Unknown1(15).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(15).Unknown2 |
array, counted by Unknown4[].Unknown1(15).Unknown0
|
|
Unknown4[].Unknown1(15).Unknown2[].X |
32 | float |
Unknown4[].Unknown1(15).Unknown2[].Y |
32 | float |
Unknown4[].Unknown1(15).Unknown2[].Z |
32 | float |
Unknown4[].Unknown1(15).Unknown3 |
2 | unsigned |
Unknown4[].Unknown1(15).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(15).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(16) |
when Unknown4[].Unknown0 is 16 |
|
Unknown4[].Unknown1(16).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(16).Unknown1 |
16 | unsigned |
Unknown4[].Unknown1(16).Unknown2 |
32 | float |
Unknown4[].Unknown1(16).Unknown3 |
4 | unsigned |
Unknown4[].Unknown1(16).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(16).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(16).Unknown6 |
1 | unsigned |
Unknown4[].Unknown1(17) |
when Unknown4[].Unknown0 is 17 |
|
Unknown4[].Unknown1(17).Unknown0 count |
10 | unsigned |
Unknown4[].Unknown1(17).Unknown0 |
array, counted by Unknown4[].Unknown1(17).Unknown0 count
|
|
Unknown4[].Unknown1(17).Unknown0[] |
32 | unsigned |
Unknown4[].Unknown1(17).Unknown1 |
16 | packed float |
Unknown4[].Unknown1(17).Unknown2 |
32 | float |
Unknown4[].Unknown1(17).Unknown3 |
32 | float |
Unknown4[].Unknown1(17).Unknown4 |
32 | float |
Unknown4[].Unknown1(17).Unknown5 |
4 | unsigned |
Unknown4[].Unknown1(17).Unknown6 |
32 | unsigned |
Unknown4[].Unknown1(17).Unknown7 |
32 | unsigned |
Unknown4[].Unknown1(17).Unknown8 |
1 | unsigned |
Unknown4[].Unknown1(18) |
when Unknown4[].Unknown0 is 18 |
|
Unknown4[].Unknown1(18).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(18).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(19) |
when Unknown4[].Unknown0 is 19 |
|
Unknown4[].Unknown1(19).Unknown0.X |
32 | float |
Unknown4[].Unknown1(19).Unknown0.Y |
32 | float |
Unknown4[].Unknown1(19).Unknown0.Z |
32 | float |
Unknown4[].Unknown1(19).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(20) |
when Unknown4[].Unknown0 is 20 |
|
Unknown4[].Unknown1(20).Unknown0.X |
32 | float |
Unknown4[].Unknown1(20).Unknown0.Y |
32 | float |
Unknown4[].Unknown1(20).Unknown0.Z |
32 | float |
Unknown4[].Unknown1(20).Unknown1 |
32 | unsigned |
Unknown4[].Unknown1(20).Unknown2 |
16 | packed float |
Unknown4[].Unknown1(20).Unknown3 |
32 | unsigned |
Unknown4[].Unknown1(20).Unknown4 |
1 | unsigned |
Unknown4[].Unknown1(21) |
when Unknown4[].Unknown0 is 21 |
|
Unknown4[].Unknown1(21).Unknown0 |
1 | unsigned |
Unknown4[].Unknown1(22) |
when Unknown4[].Unknown0 is 22 |
|
Unknown4[].Unknown1(22).Unknown0 |
16 | packed float |
Unknown4[].Unknown1(22).Unknown1 |
1 | unsigned |
Unknown4[].Unknown1(23) |
when Unknown4[].Unknown0 is 23 |
|
Unknown4[].Unknown1(23).Unknown0 |
8 | unsigned; counts Unknown4[].Unknown1(23).Unknown1, Unknown4[].Unknown1(23).Unknown2
|
Unknown4[].Unknown1(23).Unknown1 |
array, counted by Unknown4[].Unknown1(23).Unknown0
|
|
Unknown4[].Unknown1(23).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(23).Unknown2 |
array, counted by Unknown4[].Unknown1(23).Unknown0
|
|
Unknown4[].Unknown1(23).Unknown2[] |
16 | packed float |
Unknown4[].Unknown1(23).Unknown3 |
2 | unsigned |
Unknown4[].Unknown1(23).Unknown4 |
32 | unsigned |
Unknown4[].Unknown1(23).Unknown5 |
1 | unsigned |
Unknown4[].Unknown1(24) |
when Unknown4[].Unknown0 is 24 |
|
Unknown4[].Unknown1(24).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(25) |
when Unknown4[].Unknown0 is 25 |
|
Unknown4[].Unknown1(25).Unknown0 |
8 | unsigned; counts Unknown4[].Unknown1(25).Unknown1, Unknown4[].Unknown1(25).Unknown2
|
Unknown4[].Unknown1(25).Unknown1 |
array, counted by Unknown4[].Unknown1(25).Unknown0
|
|
Unknown4[].Unknown1(25).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(25).Unknown2 |
array, counted by Unknown4[].Unknown1(25).Unknown0
|
|
Unknown4[].Unknown1(25).Unknown2[] |
32 | unsigned |
Unknown4[].Unknown1(25).Unknown3 |
32 | unsigned |
Unknown4[].Unknown1(26) |
when Unknown4[].Unknown0 is 26 |
|
Unknown4[].Unknown1(26).Unknown0 |
1 | unsigned |
Unknown4[].Unknown1(27) |
when Unknown4[].Unknown0 is 27 |
|
Unknown4[].Unknown1(27).Unknown0 |
32 | unsigned |
Unknown4[].Unknown1(28) |
when Unknown4[].Unknown0 is 28 |
|
Unknown4[].Unknown1(28).Unknown0 |
8 | unsigned; counts Unknown4[].Unknown1(28).Unknown1, Unknown4[].Unknown1(28).Unknown2
|
Unknown4[].Unknown1(28).Unknown1 |
array, counted by Unknown4[].Unknown1(28).Unknown0
|
|
Unknown4[].Unknown1(28).Unknown1[] |
32 | unsigned |
Unknown4[].Unknown1(28).Unknown2 |
array, counted by Unknown4[].Unknown1(28).Unknown0
|
|
Unknown4[].Unknown1(28).Unknown2[] |
32 | unsigned |
Unknown4[].Unknown1(28).Unknown3 |
32 | unsigned |
Unknown4[].Unknown1(29) |
when Unknown4[].Unknown0 is 29 |
|
Unknown4[].Unknown1(29).Unknown0 |
1 | unsigned |
The client ignores the whole message for the unit it moves.
Takes the movement of the unit the client moves back from the client.
| Opcode | Direction | Verified to |
|---|---|---|
0x0639 |
server to client | fields |
| Field | Bits | Encoding | Meaning |
|---|---|---|---|
| (none) | 0 |
The client stops moving the unit, drops the movement it has gathered but not yet sent, and sends no more ClientMovement until a MovementControl gives it a unit again. It then applies UnitMovement to the unit.
Tells the server the player has dashed.
| Opcode | Direction | Verified to |
|---|---|---|
0x00DE |
client to server | purpose |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
3 | unsigned |
| Opcode | Direction | Verified to |
|---|---|---|
0x00FB |
client to server | unverified |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
32 | float |
| Opcode | Direction | Verified to |
|---|---|---|
0x0141 |
client to server | unverified |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
14 | unsigned |
Unknown1 |
32 | unsigned |
| Opcode | Direction | Verified to |
|---|---|---|
0x01AF |
client to server | unverified |
| Field | Bits | Encoding |
|---|---|---|
| (none) | 0 |
Answers a MovementControl: the client sends it as soon as it takes one, before it acts on it.
| Opcode | Direction | Verified to |
|---|---|---|
0x0635 |
client to server | fields |
| Field | Bits | Encoding | Meaning |
|---|---|---|---|
Ticket |
32 | unsigned | The Ticket of the MovementControl it answers. |
The client registers a reader for it as well, but does nothing with one it receives.
The movement of the unit the client moves, as commands in batches the client stamps with its own clock.
| Opcode | Direction | Verified to |
|---|---|---|
0x0637 |
client to server | purpose |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
32 | unsigned |
Unknown1 count |
32 | unsigned |
Unknown1 |
array, counted by Unknown1 count
|
|
Unknown1[].Unknown0 |
5 | unsigned; selects Unknown1[].Unknown1
|
Unknown1[].Unknown1 |
union, selected by Unknown1[].Unknown0
|
|
Unknown1[].Unknown1(0) |
when Unknown1[].Unknown0 is 0 |
|
Unknown1[].Unknown1(0).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(1) |
when Unknown1[].Unknown0 is 1 |
|
Unknown1[].Unknown1(1).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(2) |
when Unknown1[].Unknown0 is 2 |
|
Unknown1[].Unknown1(2).Unknown0.X |
32 | float |
Unknown1[].Unknown1(2).Unknown0.Y |
32 | float |
Unknown1[].Unknown1(2).Unknown0.Z |
32 | float |
Unknown1[].Unknown1(2).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(3) |
when Unknown1[].Unknown0 is 3 |
|
Unknown1[].Unknown1(3).Unknown0 |
10 | unsigned; counts Unknown1[].Unknown1(3).Unknown1, Unknown1[].Unknown1(3).Unknown2
|
Unknown1[].Unknown1(3).Unknown1 |
array, counted by Unknown1[].Unknown1(3).Unknown0
|
|
Unknown1[].Unknown1(3).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(3).Unknown2 |
array, counted by Unknown1[].Unknown1(3).Unknown0
|
|
Unknown1[].Unknown1(3).Unknown2[].X |
32 | float |
Unknown1[].Unknown1(3).Unknown2[].Y |
32 | float |
Unknown1[].Unknown1(3).Unknown2[].Z |
32 | float |
Unknown1[].Unknown1(3).Unknown3 |
2 | unsigned |
Unknown1[].Unknown1(3).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(3).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(4) |
when Unknown1[].Unknown0 is 4 |
|
Unknown1[].Unknown1(4).Unknown0 count |
10 | unsigned |
Unknown1[].Unknown1(4).Unknown0 |
array, counted by Unknown1[].Unknown1(4).Unknown0 count
|
|
Unknown1[].Unknown1(4).Unknown0[].X |
32 | float |
Unknown1[].Unknown1(4).Unknown0[].Y |
32 | float |
Unknown1[].Unknown1(4).Unknown0[].Z |
32 | float |
Unknown1[].Unknown1(4).Unknown1 |
16 | packed float |
Unknown1[].Unknown1(4).Unknown2 |
2 | unsigned |
Unknown1[].Unknown1(4).Unknown3 |
4 | unsigned |
Unknown1[].Unknown1(4).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(4).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(5) |
when Unknown1[].Unknown0 is 5 |
|
Unknown1[].Unknown1(5).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(5).Unknown1 |
32 | float |
Unknown1[].Unknown1(5).Unknown2 |
32 | float |
Unknown1[].Unknown1(5).Unknown3.X |
16 | packed float |
Unknown1[].Unknown1(5).Unknown3.Y |
16 | packed float |
Unknown1[].Unknown1(5).Unknown3.Z |
16 | packed float |
Unknown1[].Unknown1(5).Unknown4 |
4 | unsigned |
Unknown1[].Unknown1(5).Unknown5 |
32 | unsigned |
Unknown1[].Unknown1(5).Unknown6 |
1 | unsigned |
Unknown1[].Unknown1(5).Unknown7 |
1 | unsigned |
Unknown1[].Unknown1(5).Unknown8 |
1 | unsigned |
Unknown1[].Unknown1(6) |
when Unknown1[].Unknown0 is 6 |
|
Unknown1[].Unknown1(6).Unknown0 count |
10 | unsigned |
Unknown1[].Unknown1(6).Unknown0 |
array, counted by Unknown1[].Unknown1(6).Unknown0 count
|
|
Unknown1[].Unknown1(6).Unknown0[] |
32 | unsigned |
Unknown1[].Unknown1(6).Unknown1 |
16 | packed float |
Unknown1[].Unknown1(6).Unknown2 |
32 | float |
Unknown1[].Unknown1(6).Unknown3 |
32 | float |
Unknown1[].Unknown1(6).Unknown4 |
32 | float |
Unknown1[].Unknown1(6).Unknown5.X |
16 | packed float |
Unknown1[].Unknown1(6).Unknown5.Y |
16 | packed float |
Unknown1[].Unknown1(6).Unknown5.Z |
16 | packed float |
Unknown1[].Unknown1(6).Unknown6 |
4 | unsigned |
Unknown1[].Unknown1(6).Unknown7 |
32 | unsigned |
Unknown1[].Unknown1(6).Unknown8 |
32 | unsigned |
Unknown1[].Unknown1(6).Unknown9 |
1 | unsigned |
Unknown1[].Unknown1(6).Unknown10 |
1 | unsigned |
Unknown1[].Unknown1(7) |
when Unknown1[].Unknown0 is 7 |
|
Unknown1[].Unknown1(7).Unknown0.X |
32 | float |
Unknown1[].Unknown1(7).Unknown0.Y |
32 | float |
Unknown1[].Unknown1(7).Unknown0.Z |
32 | float |
Unknown1[].Unknown1(7).Unknown1.X |
32 | float |
Unknown1[].Unknown1(7).Unknown1.Y |
32 | float |
Unknown1[].Unknown1(7).Unknown1.Z |
32 | float |
Unknown1[].Unknown1(7).Unknown2 |
32 | unsigned |
Unknown1[].Unknown1(7).Unknown3 |
32 | float |
Unknown1[].Unknown1(7).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(7).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(8) |
when Unknown1[].Unknown0 is 8 |
|
Unknown1[].Unknown1(8).Unknown0.X |
16 | packed float |
Unknown1[].Unknown1(8).Unknown0.Y |
16 | packed float |
Unknown1[].Unknown1(8).Unknown0.Z |
16 | packed float |
Unknown1[].Unknown1(8).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(9) |
when Unknown1[].Unknown0 is 9 |
|
Unknown1[].Unknown1(9).Unknown0 |
10 | unsigned; counts Unknown1[].Unknown1(9).Unknown1, Unknown1[].Unknown1(9).Unknown2
|
Unknown1[].Unknown1(9).Unknown1 |
array, counted by Unknown1[].Unknown1(9).Unknown0
|
|
Unknown1[].Unknown1(9).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(9).Unknown2 |
array, counted by Unknown1[].Unknown1(9).Unknown0
|
|
Unknown1[].Unknown1(9).Unknown2[].X |
16 | packed float |
Unknown1[].Unknown1(9).Unknown2[].Y |
16 | packed float |
Unknown1[].Unknown1(9).Unknown2[].Z |
16 | packed float |
Unknown1[].Unknown1(9).Unknown3 |
2 | unsigned |
Unknown1[].Unknown1(9).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(9).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(10) |
when Unknown1[].Unknown0 is 10 |
|
Unknown1[].Unknown1(10).Unknown0 |
1 | unsigned |
Unknown1[].Unknown1(11) |
when Unknown1[].Unknown0 is 11 |
|
Unknown1[].Unknown1(11).Unknown0.X |
16 | packed float |
Unknown1[].Unknown1(11).Unknown0.Y |
16 | packed float |
Unknown1[].Unknown1(11).Unknown0.Z |
16 | packed float |
Unknown1[].Unknown1(11).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(12) |
when Unknown1[].Unknown0 is 12 |
|
Unknown1[].Unknown1(12).Unknown0 |
10 | unsigned; counts Unknown1[].Unknown1(12).Unknown1, Unknown1[].Unknown1(12).Unknown2
|
Unknown1[].Unknown1(12).Unknown1 |
array, counted by Unknown1[].Unknown1(12).Unknown0
|
|
Unknown1[].Unknown1(12).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(12).Unknown2 |
array, counted by Unknown1[].Unknown1(12).Unknown0
|
|
Unknown1[].Unknown1(12).Unknown2[].X |
16 | packed float |
Unknown1[].Unknown1(12).Unknown2[].Y |
16 | packed float |
Unknown1[].Unknown1(12).Unknown2[].Z |
16 | packed float |
Unknown1[].Unknown1(12).Unknown3 |
2 | unsigned |
Unknown1[].Unknown1(12).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(12).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(13) |
when Unknown1[].Unknown0 is 13 |
|
Unknown1[].Unknown1(13).Unknown0 |
1 | unsigned |
Unknown1[].Unknown1(14) |
when Unknown1[].Unknown0 is 14 |
|
Unknown1[].Unknown1(14).Unknown0.X |
32 | float |
Unknown1[].Unknown1(14).Unknown0.Y |
32 | float |
Unknown1[].Unknown1(14).Unknown0.Z |
32 | float |
Unknown1[].Unknown1(14).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(15) |
when Unknown1[].Unknown0 is 15 |
|
Unknown1[].Unknown1(15).Unknown0 |
10 | unsigned; counts Unknown1[].Unknown1(15).Unknown1, Unknown1[].Unknown1(15).Unknown2
|
Unknown1[].Unknown1(15).Unknown1 |
array, counted by Unknown1[].Unknown1(15).Unknown0
|
|
Unknown1[].Unknown1(15).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(15).Unknown2 |
array, counted by Unknown1[].Unknown1(15).Unknown0
|
|
Unknown1[].Unknown1(15).Unknown2[].X |
32 | float |
Unknown1[].Unknown1(15).Unknown2[].Y |
32 | float |
Unknown1[].Unknown1(15).Unknown2[].Z |
32 | float |
Unknown1[].Unknown1(15).Unknown3 |
2 | unsigned |
Unknown1[].Unknown1(15).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(15).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(16) |
when Unknown1[].Unknown0 is 16 |
|
Unknown1[].Unknown1(16).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(16).Unknown1 |
16 | unsigned |
Unknown1[].Unknown1(16).Unknown2 |
32 | float |
Unknown1[].Unknown1(16).Unknown3 |
4 | unsigned |
Unknown1[].Unknown1(16).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(16).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(16).Unknown6 |
1 | unsigned |
Unknown1[].Unknown1(17) |
when Unknown1[].Unknown0 is 17 |
|
Unknown1[].Unknown1(17).Unknown0 count |
10 | unsigned |
Unknown1[].Unknown1(17).Unknown0 |
array, counted by Unknown1[].Unknown1(17).Unknown0 count
|
|
Unknown1[].Unknown1(17).Unknown0[] |
32 | unsigned |
Unknown1[].Unknown1(17).Unknown1 |
16 | packed float |
Unknown1[].Unknown1(17).Unknown2 |
32 | float |
Unknown1[].Unknown1(17).Unknown3 |
32 | float |
Unknown1[].Unknown1(17).Unknown4 |
32 | float |
Unknown1[].Unknown1(17).Unknown5 |
4 | unsigned |
Unknown1[].Unknown1(17).Unknown6 |
32 | unsigned |
Unknown1[].Unknown1(17).Unknown7 |
32 | unsigned |
Unknown1[].Unknown1(17).Unknown8 |
1 | unsigned |
Unknown1[].Unknown1(18) |
when Unknown1[].Unknown0 is 18 |
|
Unknown1[].Unknown1(18).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(18).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(19) |
when Unknown1[].Unknown0 is 19 |
|
Unknown1[].Unknown1(19).Unknown0.X |
32 | float |
Unknown1[].Unknown1(19).Unknown0.Y |
32 | float |
Unknown1[].Unknown1(19).Unknown0.Z |
32 | float |
Unknown1[].Unknown1(19).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(20) |
when Unknown1[].Unknown0 is 20 |
|
Unknown1[].Unknown1(20).Unknown0.X |
32 | float |
Unknown1[].Unknown1(20).Unknown0.Y |
32 | float |
Unknown1[].Unknown1(20).Unknown0.Z |
32 | float |
Unknown1[].Unknown1(20).Unknown1 |
32 | unsigned |
Unknown1[].Unknown1(20).Unknown2 |
16 | packed float |
Unknown1[].Unknown1(20).Unknown3 |
32 | unsigned |
Unknown1[].Unknown1(20).Unknown4 |
1 | unsigned |
Unknown1[].Unknown1(21) |
when Unknown1[].Unknown0 is 21 |
|
Unknown1[].Unknown1(21).Unknown0 |
1 | unsigned |
Unknown1[].Unknown1(22) |
when Unknown1[].Unknown0 is 22 |
|
Unknown1[].Unknown1(22).Unknown0 |
16 | packed float |
Unknown1[].Unknown1(22).Unknown1 |
1 | unsigned |
Unknown1[].Unknown1(23) |
when Unknown1[].Unknown0 is 23 |
|
Unknown1[].Unknown1(23).Unknown0 |
8 | unsigned; counts Unknown1[].Unknown1(23).Unknown1, Unknown1[].Unknown1(23).Unknown2
|
Unknown1[].Unknown1(23).Unknown1 |
array, counted by Unknown1[].Unknown1(23).Unknown0
|
|
Unknown1[].Unknown1(23).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(23).Unknown2 |
array, counted by Unknown1[].Unknown1(23).Unknown0
|
|
Unknown1[].Unknown1(23).Unknown2[] |
16 | packed float |
Unknown1[].Unknown1(23).Unknown3 |
2 | unsigned |
Unknown1[].Unknown1(23).Unknown4 |
32 | unsigned |
Unknown1[].Unknown1(23).Unknown5 |
1 | unsigned |
Unknown1[].Unknown1(24) |
when Unknown1[].Unknown0 is 24 |
|
Unknown1[].Unknown1(24).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(25) |
when Unknown1[].Unknown0 is 25 |
|
Unknown1[].Unknown1(25).Unknown0 |
8 | unsigned; counts Unknown1[].Unknown1(25).Unknown1, Unknown1[].Unknown1(25).Unknown2
|
Unknown1[].Unknown1(25).Unknown1 |
array, counted by Unknown1[].Unknown1(25).Unknown0
|
|
Unknown1[].Unknown1(25).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(25).Unknown2 |
array, counted by Unknown1[].Unknown1(25).Unknown0
|
|
Unknown1[].Unknown1(25).Unknown2[] |
32 | unsigned |
Unknown1[].Unknown1(25).Unknown3 |
32 | unsigned |
Unknown1[].Unknown1(26) |
when Unknown1[].Unknown0 is 26 |
|
Unknown1[].Unknown1(26).Unknown0 |
1 | unsigned |
Unknown1[].Unknown1(27) |
when Unknown1[].Unknown0 is 27 |
|
Unknown1[].Unknown1(27).Unknown0 |
32 | unsigned |
Unknown1[].Unknown1(28) |
when Unknown1[].Unknown0 is 28 |
|
Unknown1[].Unknown1(28).Unknown0 |
8 | unsigned; counts Unknown1[].Unknown1(28).Unknown1, Unknown1[].Unknown1(28).Unknown2
|
Unknown1[].Unknown1(28).Unknown1 |
array, counted by Unknown1[].Unknown1(28).Unknown0
|
|
Unknown1[].Unknown1(28).Unknown1[] |
32 | unsigned |
Unknown1[].Unknown1(28).Unknown2 |
array, counted by Unknown1[].Unknown1(28).Unknown0
|
|
Unknown1[].Unknown1(28).Unknown2[] |
32 | unsigned |
Unknown1[].Unknown1(28).Unknown3 |
32 | unsigned |
Unknown1[].Unknown1(29) |
when Unknown1[].Unknown0 is 29 |
|
Unknown1[].Unknown1(29).Unknown0 |
1 | unsigned |
The client sends it while it moves a unit: MovementControl starts it and MovementControlEnd stops it. The first one after the client takes a unit over carries only a time and a position whose flag is clear. After that the client sends from its movement timer, whose period is MovementInterval, and also at once at some moments, such as just before 0x00FB. Each batch opens with a time: the client's clock when it gathered the batch, plus two periods of MovementInterval.
Tells the server the zone of the unit the client moves when it changes, and on some takeovers of the player's own unit repeats the last one it reported.
| Opcode | Direction | Verified to |
|---|---|---|
0x063A |
client to server | fields |
| Field | Bits | Encoding | Meaning |
|---|---|---|---|
PreviousZoneId |
15 | unsigned | The zone id the client reported last, in WorldReady or an earlier ZoneChange; 0 when it has reported none since EnterWorld. |
ZoneId |
15 | unsigned | The zone id of the unit the client moves when the client sends a change, the id ZoneId also carries. In the one the client sends at once on taking control it repeats PreviousZoneId, and so can be 0. |
The client checks for a change each time its movement timer runs while it moves a unit; the timer's period is MovementInterval. It also sends one at once, with both values the same, when a MovementControl names the player's own unit while the unit the client moves, or last moved, carries the mark Unknown3 describes, as on the client's first takeover of that unit and after a MovementControlEnd.
| Piece | Path |
|---|---|
| Message declarations | Source/NexusTomorrow.Network.World/Message/Model/Movement/ |
| This page's generator | Tools/NexusTomorrow.ProtocolReference/ |
Start here
How the server works
- Server core design
- Host
- Gateway
- Owners
- Persistence
- Command layer
- Harness
- Map scheduler design
- Timer wheel design
The protocol
Working on it