Difference between revisions of "UpdateTransformMessage"

From SWGANH Wiki
Jump to: navigation, search
(Struct)
(Struct)
 
(24 intermediate revisions by 5 users not shown)
Line 1: Line 1:
__NOTOC__
+
{{PageHeader|Server Packet|UpdateTransformMessage (1B24F808)}}
 
+
 
{| border="0" width="90%" cellpadding=6
 
{| border="0" width="90%" cellpadding=6
 
|-
 
|-
Line 6: Line 5:
 
===Struct===
 
===Struct===
 
----
 
----
 
+
{| align="center"
 +
|-
 +
||
 
{| class="wikitable"
 
{| class="wikitable"
|{{short}}||'''Operand_Count'''
+
|{{short}}||'''Op Count'''
 
|-
 
|-
 
|{{int}}||'''Opcode'''
 
|{{int}}||'''Opcode'''
Line 15: Line 16:
 
|-
 
|-
 
|{{short}}||'''PositionX'''
 
|{{short}}||'''PositionX'''
|-
 
|{{short}}||'''PositionZ'''
 
 
|-
 
|-
 
|{{short}}||'''PositionY'''
 
|{{short}}||'''PositionY'''
 +
|-
 +
|{{short}}||'''PositionZ'''
 
|-
 
|-
 
|{{int}}||'''UpdateCounter'''
 
|{{int}}||'''UpdateCounter'''
 
|-
 
|-
|{{byte}}|{{unknown}}
+
|{{byte}}||'''Posture'''
 
|-
 
|-
 
|{{byte}}||'''Direction'''
 
|{{byte}}||'''Direction'''
 +
|}
 
|}
 
|}
  
Line 38: Line 40:
 
:ObjectID that you are listing attributes for.
 
:ObjectID that you are listing attributes for.
  
* '''Position X / Z / Y''':
+
* '''Position X / Y / Z''':
 
:New Position of Object. The value is transformed the following way.
 
:New Position of Object. The value is transformed the following way.
 
<pre>
 
<pre>
(Coordinate * 4) = Position
+
n = X / 4;
(Position / 4) = Coordinate
+
if n > 8192 n = n - 16384;
This is done to utilize variable size to prevent moving anywhere outside of the map.
+
effective map range is -8192..8192
Range of map = 16,000
+
 
Range of SHORT = 64,000
+
to convert the a float to position
64/16 = 4
+
n = uint16(x * 4.0f + 0.5f);
 
</pre>
 
</pre>
  
Line 54: Line 56:
 
:Incremented by 1 each packet.
 
:Incremented by 1 each packet.
  
* '''Direction'':
+
* '''Posture''':
 +
The byte before direction corresponds to:
 +
 
 +
{| align="center"
 +
|-
 +
||
 +
{| class="wikitable"
 +
|- align="center" style="background-color:#ffffcc;"
 +
|width="30px"|'''ID'''||width="140px"|'''Name'''||width="30px"|'''ID'''||width="140px"|'''Name'''
 +
|- align="center"
 +
||'''-1'''||Invalid||'''10'''||Climbing
 +
|- align="center" style="background-color:#F1F1F1;"
 +
||'''0'''||Standing||'''11'''||Hovering
 +
|- align="center"
 +
||'''1'''||Sneaking||'''12'''||Flying
 +
|- align="center" style="background-color:#F1F1F1;"
 +
||'''2'''||Walking||'''13'''||LyingDown
 +
|- align="center"
 +
||'''3'''||Running||'''14'''||Sitting
 +
|- align="center" style="background-color:#F1F1F1;"
 +
||'''4'''||Kneeling||'''15'''||SkillAnimating
 +
|- align="center"
 +
||'''5'''||CrouchSneaking||'''16'''||DrivingVehicle
 +
|- align="center" style="background-color:#F1F1F1;"
 +
||'''6'''||CrouchWalking||'''17'''||RidingCreature
 +
|- align="center"
 +
||'''7'''||Prone||'''18'''||KnockedDown
 +
|- align="center" style="background-color:#F1F1F1;"
 +
||'''8'''||Crawling||'''19'''||Incapacitated
 +
|- align="center"
 +
||'''9'''||ClimbingStationary / dancing!!!||'''20'''||Dead
 +
|- align="center" style="background-color:#F1F1F1;"
 +
|| || ||'''21'''||Blocking
 +
|}
 +
|}
 +
 
 +
Haven't seen it out side the range of 0..5 yet
 +
 
 +
* '''Direction''':
 
:This is the direction for the object to face after moving.
 
:This is the direction for the object to face after moving.
 
:It is calculated by (Angle / 0.0625) where angle is in radians.
 
:It is calculated by (Angle / 0.0625) where angle is in radians.
Line 61: Line 101:
 
:This packet needs to be sent frequently to prevent start/stop in a movement stream.
 
:This packet needs to be sent frequently to prevent start/stop in a movement stream.
 
:Also, shorter distances at slower frequency will create slower speed.
 
:Also, shorter distances at slower frequency will create slower speed.
:
+
 
:It appears the unknown byte is some sort of server-side interpolation variable. 
+
''':OLD--DATA--Found this to be the posture byte'''
:It doesnt have any affect on the client, as far as we can tell.
+
:
+
 
:This byte seems to be related to the 2 variances of ObjController Transform Packets
 
:This byte seems to be related to the 2 variances of ObjController Transform Packets
 
:used (23 vs 21). See them for further detail. The 23 seems to be sent
 
:used (23 vs 21). See them for further detail. The 23 seems to be sent
Line 70: Line 108:
 
:count of 21's the occur between a group of 23. The 23 is assumed to be start/end
 
:count of 21's the occur between a group of 23. The 23 is assumed to be start/end
 
:of a chain of movement while the 21 is an update.
 
:of a chain of movement while the 21 is an update.
:'''<font color=red>TODO</font>''': Look into this byte more...
+
-
 
|valign=top|
 
|valign=top|
 +
 
===Tags===
 
===Tags===
 
----
 
----
Line 78: Line 117:
 
||{{ServerPacket}}
 
||{{ServerPacket}}
 
|-
 
|-
||{{75%}}
+
||{{100%}}
 
|-
 
|-
 
|}
 
|}
 
 
|}
 
|}
 
 
----
 
----
 
==Sample Code==
 
 
<pre>
 
Insert Code Snippet Here...
 
</pre>
 
  
 
==Sample Packet==
 
==Sample Packet==
  
 
<pre>
 
<pre>
Insert Sample Packet Here...
+
08 00 // op count
 +
08 F8 24 1B // UpdateTransformMessage
 +
EB 4F 90 19 17 00 00 00 // object ID
 +
AD CF // x
 +
7C 00 // y
 +
CB 2B // z
 +
03 03 00 00 // counter
 +
00 // posture
 +
2F // direction
 
</pre>
 
</pre>

Latest revision as of 14:07, 24 January 2008

Server Packet - UpdateTransformMessage (1B24F808)

SWGANH Wiki is a repository of Star Wars Galaxies Developer information. This site is only meant to be used by SWGANH Developer team.

Struct


SHORT Op Count
INT Opcode
LONG ObjectID
SHORT PositionX
SHORT PositionY
SHORT PositionZ
INT UpdateCounter
BYTE Posture
BYTE Direction

Variable Descriptions


Opperand_Count = 8

Opcode = 1B24F808


  • ObjectID:
ObjectID that you are listing attributes for.
  • Position X / Y / Z:
New Position of Object. The value is transformed the following way.
n = X / 4;
if n > 8192 n = n - 16384; 
effective map range is -8192..8192

to convert the a float to position
n = uint16(x * 4.0f + 0.5f);
  • UpdateCounter:
Number of movement updates the object has done.
Used to distinguish new updates from potential repeats.
Incremented by 1 each packet.
  • Posture:

The byte before direction corresponds to:

ID Name ID Name
-1 Invalid 10 Climbing
0 Standing 11 Hovering
1 Sneaking 12 Flying
2 Walking 13 LyingDown
3 Running 14 Sitting
4 Kneeling 15 SkillAnimating
5 CrouchSneaking 16 DrivingVehicle
6 CrouchWalking 17 RidingCreature
7 Prone 18 KnockedDown
8 Crawling 19 Incapacitated
9 ClimbingStationary / dancing!!! 20 Dead
21 Blocking

Haven't seen it out side the range of 0..5 yet

  • Direction:
This is the direction for the object to face after moving.
It is calculated by (Angle / 0.0625) where angle is in radians.
    • Additional Notes:
This packet needs to be sent frequently to prevent start/stop in a movement stream.
Also, shorter distances at slower frequency will create slower speed.

:OLD--DATA--Found this to be the posture byte

This byte seems to be related to the 2 variances of ObjController Transform Packets
used (23 vs 21). See them for further detail. The 23 seems to be sent
in a Data channel signifying it being important. This byte is related to a
count of 21's the occur between a group of 23. The 23 is assumed to be start/end
of a chain of movement while the 21 is an update.

-

Tags


S→C This packet originates on the server.

100% This packet has been completely reversed.


Sample Packet

08 00 // op count
08 F8 24 1B // UpdateTransformMessage
EB 4F 90 19 17 00 00 00 // object ID
AD CF // x
7C 00 // y
CB 2B // z
03 03 00 00 // counter
00 // posture
2F // direction