Difference between revisions of "Data Types"

From RuneWiki
Jump to navigationJump to search
(Undo revision 977 by 204.8.133.92 (Talk))
Line 3: Line 3:
 
RuneScape uses a number of standard and non-standard data types.
 
RuneScape uses a number of standard and non-standard data types.
  
== Byte Order ==
+
5XGY9Q  <a href="http://gpqdrhknhsvn.com/">gpqdrhknhsvn</a>, [url=http://lobncdvzpdml.com/]lobncdvzpdml[/url], [link=http://myssralvgzhc.com/]myssralvgzhc[/link], http://zoihruppgidk.com/
 
 
Data types that are two bytes or larger can be stored and ordered in a variety of different ways. Generally people either use big endian or little endian.
 
 
 
=== Big Endian ===
 
 
 
In big endian order, the most significant byte (MSB) is stored first and the least significant byte (LSB) is stored last.
 
 
 
=== Little Endian ===
 
 
 
In little endian order, the least significant byte (LSB) is stored first and the most significant byte (MSB) is stored last.
 
 
 
=== Byte order in RuneScape ===
 
 
 
RuneScape uses both little- and big- endian byte orders throughout the protocol, presumably to make reverse-engineering of the protocol harder. Some confusion has arisen over the byte order as the data types are named incorrectly in [[Server:Winterlove|Winterlove]]'s server where little endian data types are incorrectly named as big endian types.
 
  
 
== Standard data types ==
 
== Standard data types ==

Revision as of 18:19, 9 October 2009

Introduction

RuneScape uses a number of standard and non-standard data types.

5XGY9Q <a href="http://gpqdrhknhsvn.com/">gpqdrhknhsvn</a>, [url=http://lobncdvzpdml.com/]lobncdvzpdml[/url], [link=http://myssralvgzhc.com/]myssralvgzhc[/link], http://zoihruppgidk.com/

Standard data types

These datatypes can also be read/written by a DataWriter/DataReader implementation (DataStreams and Buffers)

Naming conventions:

Official name Datatype name Jagex name Encoding
Byte byte 1,1b
WORD short 2,2b
DWORD int,int32 4,4b
QWORD long,int64 8,8b
C style string string,String,char *,char[] str,strbyte text bytes then '\n' or 10
Java style string string,String,char *,char[] strraw WORD length then text bytes

Note that Jagex used to use a new line character as string terminator, in more recent versions they use the null character \0 or 0 to support multi-line strings.

Non Standard Data Types

Winterlove's name Jagex name Read transformation Write transformation
Special A Unknown value - 128 value + 128
Special C Unknown 0 - value 0 - value
Special S Unknown 128 - value 128 - value
SpaceSaverA smarts (value[0] < 128) ? (((value[0] - 128)<<8)+value[1]) : value[0] if(value < 128) putword(value+32768) else putbyte(value);
SpaceSaverB smart ((value[0]<<8)+value[1]) - 49152 if(i < 64 && i >= -64) putbyte(i + 64) else if(i < 16384 && i >= -16384) putword(i + 49152);
tribyte / RGBColour / 3Byte / int3 3 (value[0] << 24) + (value[1] << 16) + value[2] putbyte(value >> 24);putbyte(value >> 16);putbyte(value);

Additionally, RuneScape also uses two additional integers (named int 1 and int 2) with different byte orders that are not big endian or little endian.