Messages Movement - NexusTomorrow/server GitHub Wiki
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
5aae370byTools/NexusTomorrow.ProtocolReference. Don't edit it by hand: change the declaration's documentation and regenerate.
Server to client
0x0070 Server0070
| Opcode | Direction | Verified to |
|---|---|---|
0x0070 |
server to client | unverified |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
32 | unsigned |
0x0636 MovementControl
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.
0x0638 UnitMovement
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.
0x0639 MovementControlEnd
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.
Client to server
0x00DE Dash
Tells the server the player has dashed.
| Opcode | Direction | Verified to |
|---|---|---|
0x00DE |
client to server | purpose |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
3 | unsigned |
0x00FB Client00FB
| Opcode | Direction | Verified to |
|---|---|---|
0x00FB |
client to server | unverified |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
32 | float |
0x0141 Client0141
| Opcode | Direction | Verified to |
|---|---|---|
0x0141 |
client to server | unverified |
| Field | Bits | Encoding |
|---|---|---|
Unknown0 |
14 | unsigned |
Unknown1 |
32 | unsigned |
0x01AF Client01AF
| Opcode | Direction | Verified to |
|---|---|---|
0x01AF |
client to server | unverified |
| Field | Bits | Encoding |
|---|---|---|
| (none) | 0 |
0x0635 MovementControlReceipt
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.
0x0637 ClientMovement
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.
0x063A ZoneChange
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.
Where the code lives
| Piece | Path |
|---|---|
| Message declarations | Source/NexusTomorrow.Network.World/Message/Model/Movement/ |
| This page's generator | Tools/NexusTomorrow.ProtocolReference/ |